fast-nail-55400
10/20/2021, 11:10 PMtest_compile_multiple_source_files
in src/python/pants/backend/java/compile/javac_test.py
working with same package dependency inference. That test creates two files in the same package but they do not refer to each other’s types, so they should end up in separate `CoarsenedTarget`’s. However, it appears the shared dependency of the coursier_lockfile
is being found to link them together, and so they end up in a single CoarsenedTarget. Is this expected?dependency_mapping=_DependencyMapping(mapping=FrozenDict({Address(//ExampleLib.java:lib): (Address(//:lockfile), Address(//ExampleLib.java:lib), Address(//OtherLib.java:lib)), Address(//OtherLib.java:lib): (Address(//:lockfile), Address(//ExampleLib.java:lib), Address(//OtherLib.java:lib)), Address(//:lockfile): ()}), visited=FrozenOrderedSet([<class 'pants.jvm.target_types.JvmDependencyLockfile'>(address=//:lockfile, alias='coursier_lockfile', residence_dir='', description=None, source=coursier_resolve.lockfile, tags=None), <class 'pants.backend.java.target_types.JavaSourceTarget'>(address=//ExampleLib.java:lib, alias='java_source', residence_dir='', dependencies=(':lockfile',), description=None, source=ExampleLib.java, tags=None), <class 'pants.backend.java.target_types.JavaSourceTarget'>(address=//OtherLib.java:lib, alias='java_source', residence_dir='', dependencies=(':lockfile',), description=None, source=OtherLib.java, tags=None)]), roots_as_targets=UnexpandedTargets([<class 'pants.backend.java.target_types.JavaSourceTarget'>(address=//ExampleLib.java:lib, alias='java_source', residence_dir='', dependencies=(':lockfile',), description=None, source=ExampleLib.java, tags=None), <class 'pants.backend.java.target_types.JavaSourceTarget'>(address=//OtherLib.java:lib, alias='java_source', residence_dir='', dependencies=(':lockfile',), description=None, source=OtherLib.java, tags=None)]))
addresses_to_targets={Address(//:lockfile): <class 'pants.jvm.target_types.JvmDependencyLockfile'>(address=//:lockfile, alias='coursier_lockfile', residence_dir='', description=None, source=coursier_resolve.lockfile, tags=None),
Address(//ExampleLib.java:lib): <class 'pants.backend.java.target_types.JavaSourceTarget'>(address=//ExampleLib.java:lib, alias='java_source', residence_dir='', dependencies=(':lockfile',), description=None, source=ExampleLib.java, tags=None),
Address(//OtherLib.java:lib): <class 'pants.backend.java.target_types.JavaSourceTarget'>(address=//OtherLib.java:lib, alias='java_source', residence_dir='', dependencies=(':lockfile',), description=None, source=OtherLib.java, tags=None)}
components=[[Address(//:lockfile)],
[Address(//OtherLib.java:lib), Address(//ExampleLib.java:lib)]]
root_addresses_set={Address(//ExampleLib.java:lib), Address(//OtherLib.java:lib)}
component=[Address(//:lockfile)]
component=[Address(//OtherLib.java:lib), Address(//ExampleLib.java:lib)]
witty-crayon-22786
10/20/2021, 11:15 PMCoarsenedTargets
in there… what makes you think they are being coarsened together?fast-nail-55400
10/20/2021, 11:16 PMcomponent=[Address(//:lockfile)]
component=[Address(//OtherLib.java:lib), Address(//ExampleLib.java:lib)]
diff --git a/src/python/pants/engine/internals/graph.py b/src/python/pants/engine/internals/graph.py
index a9f94adca..a31c8cfd9 100644
--- a/src/python/pants/engine/internals/graph.py
+++ b/src/python/pants/engine/internals/graph.py
@@ -413,6 +413,7 @@ async def transitive_targets(request: TransitiveTargetsRequest) -> TransitiveTar
@rule
async def coarsened_targets(addresses: Addresses) -> CoarsenedTargets:
+ from pprint import pformat
dependency_mapping = await Get(
_DependencyMapping,
_DependencyMappingRequest(
@@ -424,9 +425,11 @@ async def coarsened_targets(addresses: Addresses) -> CoarsenedTargets:
expanded_targets=False,
),
)
+ print(f"dependency_mapping={pformat(dependency_mapping)}")
addresses_to_targets = {
t.address: t for t in [*dependency_mapping.visited, *dependency_mapping.roots_as_targets]
}
+ print(f"addresses_to_targets={pformat(addresses_to_targets)}")
# Because this is Tarjan's SCC (TODO: update signature to guarantee), components are returned
# in reverse topological order. We can thus assume when building the structure shared
@@ -435,11 +438,14 @@ async def coarsened_targets(addresses: Addresses) -> CoarsenedTargets:
components = native_engine.strongly_connected_components(
list(dependency_mapping.mapping.items())
)
+ print(f"components={pformat(components)}")
coarsened_targets: dict[Address, CoarsenedTarget] = {}
root_coarsened_targets = []
root_addresses_set = set(addresses)
+ print(f"root_addresses_set={pformat(root_addresses_set)}")
for component in components:
+ print(f"component={component}")
component = sorted(component)
component_set = set(component)
witty-crayon-22786
10/20/2021, 11:17 PMfast-nail-55400
10/20/2021, 11:18 PMAddress(//ExampleLib.java:lib): (Address(//:lockfile), Address(//ExampleLib.java:lib), Address(//OtherLib.java:lib))
witty-crayon-22786
10/20/2021, 11:22 PMcomponent=[Address(//:lockfile)]
component=[Address(//OtherLib.java:lib), Address(//ExampleLib.java:lib)]
…looks like two targetsfast-nail-55400
10/20/2021, 11:23 PMcoarsened_target[0]:
- java_source(address="//ExampleLib.java:lib", dependencies=(':lockfile',), description=None, source=ExampleLib.java, tags=None)
- java_source(address="//OtherLib.java:lib", dependencies=(':lockfile',), description=None, source=OtherLib.java, tags=None)
witty-crayon-22786
10/20/2021, 11:24 PMAddress(//OtherLib.java:lib), Address(//ExampleLib.java:lib)
are in the same cycle: you’d have to look at the inferred depsfast-nail-55400
10/20/2021, 11:27 PMwitty-crayon-22786
10/20/2021, 11:27 PMfast-nail-55400
10/20/2021, 11:40 PMresolve_dependencies(java_source(address="//OtherLib.java:lib", dependencies=(':lockfile',), description=None, source=OtherLib.java, tags=None))
explicitly_provided=ExplicitlyProvidedDependencies(address=Address(//OtherLib.java:lib), includes=FrozenOrderedSet([Address(//:lockfile)]), ignores=FrozenOrderedSet())
injected=()
inferred=()
generated_addresses=()
special_cased=()
resolve_dependencies(java_source(address="//ExampleLib.java:lib", dependencies=(':lockfile',), description=None, source=ExampleLib.java, tags=None))
explicitly_provided=ExplicitlyProvidedDependencies(address=Address(//ExampleLib.java:lib), includes=FrozenOrderedSet([Address(//:lockfile)]), ignores=FrozenOrderedSet())
injected=()
inferred=()
generated_addresses=()
special_cased=()
resolve_dependencies(coursier_lockfile(address="//:lockfile", description=None, source=coursier_resolve.lockfile, tags=None))
explicitly_provided=ExplicitlyProvidedDependencies(address=Address(//:lockfile), includes=FrozenOrderedSet(), ignores=FrozenOrderedSet())
injected=()
inferred=()
generated_addresses=()
special_cased=()
witty-crayon-22786
10/20/2021, 11:43 PMmapping=FrozenDict({
Address(//ExampleLib.java:lib): (Address(//:lockfile), Address(//ExampleLib.java:lib), Address(//OtherLib.java:lib)),
Address(//OtherLib.java:lib): (Address(//:lockfile), Address(//ExampleLib.java:lib), Address(//OtherLib.java:lib)),
Address(//:lockfile): ()}
)
fast-nail-55400
10/20/2021, 11:48 PMwitty-crayon-22786
10/20/2021, 11:51 PMresolve_dependencies
doesn’t include them?fast-nail-55400
10/20/2021, 11:54 PMorg.pantsbuild.example.lib
as the algorithm strips off the parts of the FQT