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

pantsbuild / pants / 19120576134

06 Nov 2025 12:22AM UTC coverage: 80.307% (+0.007%) from 80.3%
19120576134

Pull #22861

github

web-flow
Merge 9479b1cb5 into 89462b7ef
Pull Request #22861: nfpm.native_libs: new backend to generate pkg deps for nfpm packages

613 of 767 new or added lines in 18 files covered. (79.92%)

1 existing line in 1 file now uncovered.

78600 of 97875 relevant lines covered (80.31%)

3.35 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:
NEW
47
    def transitive_targets_request(roots: Iterable[Address]):
×
NEW
48
        return TransitiveTargetsRequest(
×
49
            tuple(roots),
50
            should_traverse_deps_predicate=TraverseIfNotPackageTarget(
51
                roots=tuple(roots),
52
                union_membership=union_membership,
53
            ),
54
        )
55

NEW
56
    transitive_targets: TransitiveTargets = await get_transitive_targets(
×
57
        transitive_targets_request(request.addresses), **implicitly()
58
    )
NEW
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
    )
NEW
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
    )
NEW
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