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

pantsbuild / pants / 20632486505

01 Jan 2026 04:21AM UTC coverage: 43.231% (-37.1%) from 80.281%
20632486505

Pull #22962

github

web-flow
Merge 08d5c63b0 into f52ab6675
Pull Request #22962: Bump the gha-deps group across 1 directory with 6 updates

26122 of 60424 relevant lines covered (43.23%)

0.86 hits per line

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

75.0
/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
2✔
5

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

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

23

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

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

35

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

41

42
@rule
2✔
43
async def get_package_field_sets_for_nfpm_content_file_deps(
2✔
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]:
2✔
88
    return collect_rules()
2✔
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