• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 25443604553

06 May 2026 03:05PM UTC coverage: 92.879% (-0.04%) from 92.915%
25443604553

push

github

web-flow
[pants_ng] Scaffolding for a pants_ng mode. (#23319)

In this mode the command line is parsed as an
NG invocation, and dispatched appropriately.

Of course at the moment there are no
implementations to dispatch to. That will follow.

This does expose a new option, `pants_ng` to users. 
There is a big warning not to set it, but we're not trying
to hide that we're working on a new thing, so I am
comfortable with this.

25 of 76 new or added lines in 9 files covered. (32.89%)

1294 existing lines in 76 files now uncovered.

92234 of 99306 relevant lines covered (92.88%)

4.05 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.86
/src/python/pants/init/import_util.py
1
# Copyright 2025 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
12✔
5

6
import importlib.metadata
12✔
7
from collections.abc import Generator
12✔
8
from importlib.metadata import Distribution
12✔
9

10
from packaging.requirements import Requirement
12✔
11
from packaging.utils import NormalizedName, canonicalize_name
12✔
12
from packaging.version import InvalidVersion, Version
12✔
13

14

15
def distribution_matches_requirement(dist: Distribution, requirement: Requirement) -> bool:
12✔
16
    # Check whether the normalized names match.
UNCOV
17
    dist_name = canonicalize_name(dist.name)
1✔
UNCOV
18
    req_name = canonicalize_name(requirement.name)
1✔
UNCOV
19
    if dist_name != req_name:
1✔
UNCOV
20
        return False
1✔
21

22
    # If there is no version specifier, a name match is sufficient.
UNCOV
23
    if not requirement.specifier:
1✔
UNCOV
24
        return True
1✔
25

26
    # Otherwise, check version specifier and see if version is contained.
UNCOV
27
    try:
1✔
UNCOV
28
        dist_version = Version(dist.version)
1✔
UNCOV
29
        return requirement.specifier.contains(dist_version)
1✔
30
    except InvalidVersion:
×
31
        # If we can't parse the version, assume it doesn't match
32
        return False
×
33

34

35
def find_matching_distributions(
12✔
36
    requirement: Requirement | None,
37
) -> Generator[Distribution]:
38
    """Yield distributions matching the given requirement or all active distributions if
39
    `requirement` is `None`."""
40
    seen_dist_names: set[NormalizedName] = set()
4✔
41
    for dist in importlib.metadata.distributions():
4✔
42
        # Skip non-active distributions. Python prefers the first distribution on `sys.path`.
43
        normalized_dist_name = canonicalize_name(dist.name)
4✔
44
        if normalized_dist_name in seen_dist_names:
4✔
45
            continue
4✔
46
        seen_dist_names.add(normalized_dist_name)
4✔
47
        if requirement is None or distribution_matches_requirement(dist, requirement):
4✔
48
            yield dist
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc