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

pantsbuild / pants / 21465010194

29 Jan 2026 03:55AM UTC coverage: 80.275% (+0.005%) from 80.27%
21465010194

push

github

web-flow
Use Depot hosted runners instead of GHA hosted runners. (#22993)

Depot have kindly offered use of their runners as in-kind sponsorship.

78810 of 98175 relevant lines covered (80.28%)

3.36 hits per line

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

81.25
/src/python/pants/backend/nfpm/util_rules/contents.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
5✔
5

6
from collections.abc import Iterable
5✔
7
from dataclasses import dataclass
5✔
8

9
from pants.backend.nfpm.field_sets import NfpmContentFileFieldSet
5✔
10
from pants.core.goals.package import PackageFieldSet, TraverseIfNotPackageTarget
5✔
11
from pants.engine.addresses import Address, Addresses
5✔
12
from pants.engine.internals.graph import find_valid_field_sets
5✔
13
from pants.engine.internals.graph import transitive_targets as get_transitive_targets
5✔
14
from pants.engine.rules import Rule, collect_rules, implicitly, rule
5✔
15
from pants.engine.target import (
5✔
16
    FieldSetsPerTarget,
17
    FieldSetsPerTargetRequest,
18
    TransitiveTargets,
19
    TransitiveTargetsRequest,
20
)
21
from pants.engine.unions import UnionMembership, UnionRule
5✔
22

23

24
@dataclass(frozen=True)
5✔
25
class GetPackageFieldSetsForNfpmContentFileDepsRequest:
5✔
26
    addresses: Addresses
5✔
27
    field_set_types: tuple[type[PackageFieldSet], ...]
5✔
28

29
    def __init__(
5✔
30
        self, addresses: Iterable[Address], field_set_types: Iterable[type[PackageFieldSet]]
31
    ):
32
        object.__setattr__(self, "addresses", Addresses(addresses))
1✔
33
        object.__setattr__(self, "field_set_types", tuple(field_set_types))
1✔
34

35

36
@dataclass(frozen=True)
5✔
37
class PackageFieldSetsForNfpmContentFileDeps:
5✔
38
    nfpm_content_file_targets: TransitiveTargets
5✔
39
    package_field_sets: FieldSetsPerTarget
5✔
40

41

42
@rule
5✔
43
async def get_package_field_sets_for_nfpm_content_file_deps(
5✔
44
    request: GetPackageFieldSetsForNfpmContentFileDepsRequest,
45
    union_membership: UnionMembership,
46
) -> PackageFieldSetsForNfpmContentFileDeps:
47
    def transitive_targets_request(roots: Iterable[Address]):
×
48
        return TransitiveTargetsRequest(
×
49
            tuple(roots),
50
            should_traverse_deps_predicate=TraverseIfNotPackageTarget(
51
                roots=tuple(roots),
52
                union_membership=union_membership,
53
            ),
54
        )
55

56
    transitive_targets: TransitiveTargets = await get_transitive_targets(
×
57
        transitive_targets_request(request.addresses), **implicitly()
58
    )
59
    content_file_transitive_targets: TransitiveTargets = await get_transitive_targets(
×
60
        transitive_targets_request(
61
            [
62
                tgt.address
63
                for tgt in transitive_targets.dependencies
64
                if NfpmContentFileFieldSet.is_applicable(tgt)
65
            ]
66
        ),
67
        **implicitly(),
68
    )
69
    package_field_sets: FieldSetsPerTarget = await find_valid_field_sets(
×
70
        FieldSetsPerTargetRequest(
71
            PackageFieldSet,  # has to be a union parent
72
            [
73
                tgt
74
                for tgt in content_file_transitive_targets.dependencies
75
                if any(
76
                    field_set_type.is_applicable(tgt) for field_set_type in request.field_set_types
77
                )
78
            ],
79
        ),
80
        **implicitly(),
81
    )
82
    return PackageFieldSetsForNfpmContentFileDeps(
×
83
        content_file_transitive_targets, package_field_sets
84
    )
85

86

87
def rules() -> Iterable[Rule | UnionRule]:
5✔
88
    return collect_rules()
5✔
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