diff --git a/src/crawl/artifactgenctx.py b/src/crawl/artifactgenctx.py new file mode 100644 index 0000000..ca5d290 --- /dev/null +++ b/src/crawl/artifactgenctx.py @@ -0,0 +1,78 @@ +import crawl.pom + + +class ArtifactGenerationContext: + """ + Information about a single artifact that was crawled. + """ + + def __init__(self, workspace, pom_template, artifact_def, dependency): + self._artifact_def = artifact_def + self._dependency = dependency + + self._direct_dependencies = [] + self._artifact_transitive_closure = [] + self._library_transitive_closure = [] + + # TODO remove/make this factory/config based + self._generator = crawl.pom.get_pom_generator( + workspace, pom_template, artifact_def, dependency) + + @property + def artifact_def(self): + """ + The artifact that this context is for. + """ + return self._artifact_def + + @property + def dependency(self): + """ + The dependency that points at this artifact (that dragged it in). + """ + return self._dependency + + @property + def direct_dependencies(self): + return self._direct_dependencies + + @property + def artifact_transitive_closure(self): + return self._artifact_transitive_closure + + @property + def library_transitive_closure(self): + return self._library_transitive_closure + + @property + def generator(self): + return self._generator + + def register_artifact_directs(self, dependencies): + """ + Registers the dependencies this artifact references explicitly. + """ + self._direct_dependencies = dependencies + self._generator.register_dependencies(dependencies) + + def register_artifact_transitive_closure(self, dependencies): + """ + Registers the transitive closure of dependencies of this artifact. + """ + self._artifact_transitive_closure = dependencies + self._generator.register_dependencies_transitive_closure__artifact(dependencies) + + def register_library_transitive_closure(self, dependencies): + """ + Registers the transitive closure of dependencies of the library + that this artifact belongs to. + """ + self._library_transitive_closure = dependencies + self._generator.register_dependencies_transitive_closure__library(dependencies) + + def gen_goldfile_manifest(self): + """ + TODO - fix abstraction - move to after crawling? + """ + import crawl.pom + return self._generator.gen(crawl.pom.PomContentType.GOLDFILE) diff --git a/src/crawl/crawler.py b/src/crawl/crawler.py index 76631b6..3502d05 100644 --- a/src/crawl/crawler.py +++ b/src/crawl/crawler.py @@ -9,9 +9,9 @@ """ from collections import defaultdict from common import logger +from crawl import artifactgenctx from crawl import dependency from crawl import bazel -from crawl import pom from crawl import pomparser from crawl.releasereason import ReleaseReason import difflib @@ -50,11 +50,10 @@ class CrawlerResult: """ Useful bits and pieces that are the outcome of crawling Bazel BUILD files. """ + def __init__(self, genctxs, nodes, crawled_bazel_packages): - def __init__(self, pomgens, nodes, crawled_bazel_packages): - - # list of pom generators, for poms that need to be generated: - self.pomgens = pomgens + # artifactgenctx.ArtifactGenerationContext instances + self.artifact_generation_contexts = genctxs # list of root nodes self.nodes = nodes @@ -75,7 +74,7 @@ def __init__(self, workspace, pom_template, verbose=False): self.target_to_node = {} # bazel target -> Node for that target self.target_to_dependencies = {} # bazel_target -> target's deps - self.pomgens = [] # all pomgen instances + self.genctxs = [] # ArtifactGenerationContext instances self.leafnodes = [] # all leafnodes discovered while crawling def crawl(self, packages, follow_references=True, force_release=False): @@ -149,14 +148,14 @@ def crawl(self, packages, follow_references=True, force_release=False): target_to_transitive_closure_deps = self._compute_transitive_closures_of_deps() - # augment pom generators with deps discovered while crawling - self._register_dependencies_with_pomgen_instances(target_to_transitive_closure_deps) + # add discovered deps to artifact generation contexts + self._register_dependencies(target_to_transitive_closure_deps) - # for each artifact, if its pom changed since the last release - # (tracked by pom.xml.released), mark the artifact is requiring to be - # released - self._check_for_pom_changes() + # for each artifact, if its manifest (for ex pom.xml) has changed since + # the last release (tracked by pom.xml.released), mark the artifact as + # requiring to be released + self._check_for_artifact_manifest_changes() # figure out whether artifacts need to be released because a transitive @@ -164,44 +163,34 @@ def crawl(self, packages, follow_references=True, force_release=False): self._calculate_artifact_release_flag(force_release) - # only pomgen instances for artifacts that need to be released are + # include only contexts for artifacts that need to be released # included in the result - result_pomgens = [] - for p in self.pomgens: - if p.artifact_def.requires_release: - result_pomgens.append(p) + ctxs = [ctx for ctx in self.genctxs if ctx.artifact_def.requires_release] crawled_bazel_packages = self._get_crawled_packages_as_deps() - return CrawlerResult(result_pomgens, nodes, crawled_bazel_packages) + return CrawlerResult(ctxs, nodes, crawled_bazel_packages) - def _register_dependencies_with_pomgen_instances(self, target_to_transitive_closure_deps): + def _register_dependencies(self, target_to_transitive_closure_deps): """ - This method sets various dependency lists on all pomgen instances: + This method sets dependency lists on generaton contexts: - - the direct dependencies that typically go into the generated pom + - the direct dependencies of the artifact - the transitive closure of the direct dependenices - the transitive closure of the library's dependencies """ - # register the direct dependencies - for p in self.pomgens: - target_key = self._get_target_key(p.bazel_package, p.dependency) - dependencies = self.target_to_dependencies[target_key] - p.register_dependencies(dependencies) - - # register the transitive closure of dependencies belonging to the - # artifact - for p in self.pomgens: - - target_key = self._get_target_key(p.artifact_def.bazel_package, p.dependency) - art_deps = target_to_transitive_closure_deps[target_key] - p.register_dependencies_transitive_closure__artifact(art_deps) - - # register the transitive closure of dependencies belonging to the - # library - for p in self.pomgens: - lib_deps = self._get_deps_transitive_closure_for_library(p.artifact_def.library_path, target_to_transitive_closure_deps) - p.register_dependencies_transitive_closure__library(lib_deps) + for ctx in self.genctxs: + target_key = self._get_target_key( + ctx.artifact_def.bazel_package, ctx.dependency) + directs = self.target_to_dependencies[target_key] + ctx.register_artifact_directs(directs) + transitive_closure = target_to_transitive_closure_deps[target_key] + ctx.register_artifact_transitive_closure(transitive_closure) + lib_transitive_closure = self\ + ._get_deps_transitive_closure_for_library( + ctx.artifact_def.library_path, + target_to_transitive_closure_deps) + ctx.register_library_transitive_closure(lib_transitive_closure) def _get_deps_transitive_closure_for_library(self, library_path, target_to_transitive_closure_deps): @@ -245,31 +234,33 @@ def _get_unprocessed_packages(self): missing_packages += all_library_packages.difference(all_packages_already_processed) return missing_packages - def _check_for_pom_changes(self): + def _check_for_artifact_manifest_changes(self): """ For each artifact def not flagged as needing to be released, check - whether its current pom is different than the previously released pom. - If the pom has changed, mark the artifact def as needing to be released. + whether its current manifest (for ex pom.xml) is different the + previously released manifest. If it has changed, mark the artifact def + as needing to be released. """ - - for pomgen in self.pomgens: - art_def = pomgen.artifact_def + for ctx in self.genctxs: + art_def = ctx.artifact_def if not art_def.requires_release and art_def.released_pom_content is not None: - current_pom = pomparser.format_for_comparison(pomgen.gen(pom.PomContentType.GOLDFILE)) - previous_pom = pomparser.format_for_comparison(art_def.released_pom_content) - pom_changed = current_pom != previous_pom - if pom_changed: + # TODO pomparser + current_manifest = pomparser.format_for_comparison(ctx.gen_goldfile_manifest()) + previous_manifest = pomparser.format_for_comparison(art_def.released_pom_content) + manifest_changed = current_manifest != previous_manifest + if manifest_changed: art_def.requires_release = True + # TODO release reason art_def.release_reason = ReleaseReason.POM if self.verbose: logger.debug("pom diff %s %s" % (art_def, art_def.bazel_package)) - diff = difflib.unified_diff(previous_pom.splitlines(True), current_pom.splitlines(True)) + diff = difflib.unified_diff(previous_manifest.splitlines(True), current_manifest.splitlines(True)) logger.raw(''.join(diff)) - logger.debug("%s computed pom:" % art_def) - logger.raw(current_pom) - logger.debug("%s released pom:" % art_def) - logger.raw(previous_pom) + logger.debug("%s computed manifest:" % art_def) + logger.raw(current_manifest) + logger.debug("%s released manifest:" % art_def) + logger.raw(previous_manifest) def _compute_transitive_closures_of_deps(self): @@ -539,9 +530,9 @@ def _crawl(self, package, dep, parent_node, follow_references): # this is a bootstrapping problem: the root # artifacts (that we start with) have nothing pointing at them dep = dependency.new_dep_from_maven_artifact_def(artifact_def) - pomgen = pom.get_pom_generator(self.workspace, self.pom_template, - artifact_def, dep) - self.pomgens.append(pomgen) + artifactctx = artifactgenctx.ArtifactGenerationContext( + self.workspace, self.pom_template, artifact_def, dep) + self.genctxs.append(artifactctx) source_deps, ext_deps, all_deps = self._discover_dependencies(artifact_def, dep) self.target_to_dependencies[target_key] = all_deps if self.verbose: @@ -549,7 +540,7 @@ def _crawl(self, package, dep, parent_node, follow_references): logger.debug("Source deps: %s" % "\n".join([str(d) for d in source_deps])) logger.debug("Ext deps: %s" % "\n".join([str(d) for d in ext_deps])) logger.debug("All deps: %s" % "\n".join([str(d) for d in all_deps])) - node = Node(parent_node, artifact_def, pomgen.dependency) + node = Node(parent_node, artifact_def, dep) if follow_references: # crawl BUILD file dependencies for source_dep in source_deps: diff --git a/src/crawl/pom.py b/src/crawl/pom.py index 716a42b..b0eccae 100644 --- a/src/crawl/pom.py +++ b/src/crawl/pom.py @@ -344,7 +344,7 @@ def _get_version_properties(self, pomcontenttype): del key_to_version[key] version_from_dep = self._dep_version(pomcontenttype, dep) if not version_ref_must_be_fq: - # the key (groupId:artficatId:version) is not fully qualified, + # the key (groupId:artifactId:version) is not fully qualified, # only the name prefixed with the maven_install rule name is key_to_version[key] = version_from_dep key_to_dep[key] = dep @@ -578,7 +578,7 @@ def gen(self, pomcontenttype): content = self.pom_template.replace("#{group_id}", self._artifact_def.group_id) # by convention, we add the suffix ".depmanagement" to the artifactId # so com.blah is the real jar artifact and com.blah.depmanagement - # is the dependency management pom for that artficat + # is the dependency management pom for that artifact content = content.replace("#{artifact_id}", "%s.depmanagement" % self._artifact_def.artifact_id) version = self._artifact_def_version(pomcontenttype) content = content.replace("#{version}", version) diff --git a/src/pomgen.py b/src/pomgen.py index 735f8f8..08ab3db 100755 --- a/src/pomgen.py +++ b/src/pomgen.py @@ -54,7 +54,7 @@ def main(args): crawler = crawlerm.Crawler(ws, cfg.pom_template, args.verbose) result = crawler.crawl(packages, follow_references=not args.ignore_references, force_release=args.force) - if len(result.pomgens) == 0: + if len(result.artifact_generation_contexts) == 0: logger.info("No releases are required. pomgen will not generate any pom files. To force pom generation, use pomgen's --force option.") else: output_dir = _get_output_dir(args) @@ -71,7 +71,10 @@ def main(args): path = lib_paths[0] _write_all_libraries_hint_files(result, output_dir, path) - for pomgen in result.pomgens: + # hardcoded to pom.xml files right here, but in the future pluggable? + pomgens = [ctx.generator for ctx in result.artifact_generation_contexts] + + for pomgen in pomgens: pom_dest_dir = os.path.join(output_dir, pomgen.bazel_package) if not os.path.exists(pom_dest_dir): os.makedirs(pom_dest_dir) diff --git a/tests/crawlertest.py b/tests/crawlertest.py index 0574de9..f39e910 100644 --- a/tests/crawlertest.py +++ b/tests/crawlertest.py @@ -146,7 +146,7 @@ def test_no_lib_changed(self): """ result = self.crawler.crawl(["libs/a/a1"]) - self.assertEqual(0, len(result.pomgens)) + self.assertEqual(0, len(result.artifact_generation_contexts)) def test_no_lib_changed__force_release(self): """ @@ -155,10 +155,10 @@ def test_no_lib_changed__force_release(self): """ result = self.crawler.crawl(["libs/a/a1"], force_release=True) - self.assertEqual(6, len(result.pomgens)) - for p in result.pomgens: + self.assertEqual(6, len(result.artifact_generation_contexts)) + for ctx in result.artifact_generation_contexts: self.assertEqual(rr.ReleaseReason.ALWAYS, - p.artifact_def.release_reason) + ctx.artifact_def.release_reason) def test_all_libs_changed(self): """ @@ -171,10 +171,10 @@ def test_all_libs_changed(self): result = self.crawler.crawl(["libs/a/a1"]) all = set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2", "libs/c/a1", "libs/c/a2"]) - self.assertEqual(all, set([p.artifact_def.bazel_package for p in result.pomgens])) - for p in result.pomgens: + self.assertEqual(all, set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) + for ctx in result.artifact_generation_contexts: self.assertEqual(rr.ReleaseReason.ARTIFACT, - p.artifact_def.release_reason) + ctx.artifact_def.release_reason) def test_all_libs_changed__force_release(self): """ @@ -187,10 +187,10 @@ def test_all_libs_changed__force_release(self): result = self.crawler.crawl(["libs/a/a1"], force_release=True) all = set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2", "libs/c/a1", "libs/c/a2"]) - self.assertEqual(all, set([p.artifact_def.bazel_package for p in result.pomgens])) - for p in result.pomgens: + self.assertEqual(all, set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) + for ctx in result.artifact_generation_contexts: self.assertEqual(rr.ReleaseReason.ALWAYS, - p.artifact_def.release_reason) + ctx.artifact_def.release_reason) def test_all_libs_changed__dont_follow_refs(self): """ @@ -202,7 +202,7 @@ def test_all_libs_changed__dont_follow_refs(self): result = self.crawler.crawl(["libs/a/a1"], follow_references=False) self.assertEqual(set(["libs/a/a1"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) def test_register_dependencies(self): """ @@ -258,7 +258,7 @@ def test_version_references_in_pom_template(self): result = self.crawler.crawl(["libs/a/a1"]) - pom = result.pomgens[0].gen(pomm.PomContentType.RELEASE) + pom = result.artifact_generation_contexts[0].generator.gen(pomm.PomContentType.RELEASE) self.assertIn("0.0.2", pom) self.assertIn("0.0.3", pom) @@ -273,7 +273,7 @@ def test_A_a1_changed(self): result = self.crawler.crawl(["libs/a/a1"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) a_a1 = self._get_node_by_bazel_package(result.nodes, "libs/a/a1") self.assertIs(a_a1.artifact_def.release_reason, rr.ReleaseReason.ARTIFACT) a_a2 = self._get_node_by_bazel_package(result.nodes, "libs/a/a2") @@ -303,7 +303,7 @@ def test_A_a2_changed(self): result = self.crawler.crawl(["libs/a/a1"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) a_a1 = self._get_node_by_bazel_package(result.nodes, "libs/a/a1") self.assertIs(a_a1.artifact_def.release_reason, rr.ReleaseReason.ARTIFACT) a_a2 = self._get_node_by_bazel_package(result.nodes, "libs/a/a2") @@ -333,7 +333,7 @@ def test_B_a1_changed(self): result = self.crawler.crawl(["libs/a/a1"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) a_a1 = self._get_node_by_bazel_package(result.nodes, "libs/a/a1") self.assertIs(a_a1.artifact_def.release_reason, rr.ReleaseReason.TRANSITIVE) @@ -364,7 +364,7 @@ def test_B_a2_changed(self): result = self.crawler.crawl(["libs/a/a1"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) a_a1 = self._get_node_by_bazel_package(result.nodes, "libs/a/a1") self.assertIs(a_a1.artifact_def.release_reason, rr.ReleaseReason.TRANSITIVE) @@ -395,7 +395,7 @@ def test_C_a1_changed(self): result = self.crawler.crawl(["libs/a/a1"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2", "libs/c/a1", "libs/c/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) a_a1 = self._get_node_by_bazel_package(result.nodes, "libs/a/a1") self.assertIs(a_a1.artifact_def.release_reason, rr.ReleaseReason.TRANSITIVE) @@ -426,7 +426,7 @@ def test_C_a2_changed(self): result = self.crawler.crawl(["libs/a/a2"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2", "libs/c/a1", "libs/c/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) a_a1 = self._get_node_by_bazel_package(result.nodes, "libs/a/a1") self.assertIs(a_a1.artifact_def.release_reason, rr.ReleaseReason.TRANSITIVE) @@ -461,7 +461,7 @@ def test_released_pom_exists_without_changes(self): result = self.crawler.crawl(["libs/a/a1"]) - self.assertEqual(0, len(result.pomgens)) + self.assertEqual(0, len(result.artifact_generation_contexts)) def test_one_lib_changed__lib_b__pom_changes_only(self): """ @@ -479,7 +479,7 @@ def test_one_lib_changed__lib_b__pom_changes_only(self): result = self.crawler.crawl(["libs/a/a1"]) self.assertEqual(set(["libs/a/a1", "libs/a/a2", "libs/b/a1", "libs/b/a2"]), - set([p.artifact_def.bazel_package for p in result.pomgens])) + set([ctx.artifact_def.bazel_package for ctx in result.artifact_generation_contexts])) node_a_a1 = result.nodes[0] self.assertIs(node_a_a1.artifact_def.release_reason, rr.ReleaseReason.TRANSITIVE) node_b_a1 = node_a_a1.children[0] @@ -499,23 +499,23 @@ def test_pomgen_dependencies_state(self): result = self.crawler.crawl(["libs/a/a1"]) # LIB A A1 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/a/a1"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/a/a1"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(2, len(dependency_paths)) self.assertIn("libs/b/a1", dependency_paths) self.assertIn("libs/c/a1", dependency_paths) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(3, len(dependency_paths)) self.assertIn("libs/b/a1", dependency_paths) self.assertIn("libs/c/a1", dependency_paths) self.assertIn("libs/d/a1", dependency_paths) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(5, len(dependency_paths)) self.assertIn("libs/a/a1", dependency_paths) # own artifact included self.assertIn("libs/a/a2", dependency_paths) # own artifact included @@ -524,18 +524,18 @@ def test_pomgen_dependencies_state(self): self.assertIn("libs/d/a1", dependency_paths) # LIB A A2 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/a/a2"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/a/a2"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(0, len(dependency_paths)) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(0, len(dependency_paths)) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(5, len(dependency_paths)) self.assertIn("libs/a/a1", dependency_paths) # own artifact included self.assertIn("libs/a/a2", dependency_paths) # own artifact included @@ -544,21 +544,21 @@ def test_pomgen_dependencies_state(self): self.assertIn("libs/d/a1", dependency_paths) # LIB B A1 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/b/a1"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/b/a1"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(1, len(dependency_paths)) self.assertIn("libs/c/a1", dependency_paths) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(2, len(dependency_paths)) self.assertIn("libs/c/a1", dependency_paths) self.assertIn("libs/d/a1", dependency_paths) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(4, len(dependency_paths)) self.assertIn("libs/b/a1", dependency_paths) # own artifact included self.assertIn("libs/b/a2", dependency_paths) # own artifact included @@ -566,18 +566,18 @@ def test_pomgen_dependencies_state(self): self.assertIn("libs/d/a1", dependency_paths) # LIB B A2 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/b/a2"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/b/a2"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(0, len(dependency_paths)) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(0, len(dependency_paths)) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(4, len(dependency_paths)) self.assertIn("libs/b/a1", dependency_paths) # own artifact included self.assertIn("libs/b/a2", dependency_paths) # own artifact included @@ -585,73 +585,73 @@ def test_pomgen_dependencies_state(self): self.assertIn("libs/d/a1", dependency_paths) # LIB C A1 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/c/a1"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/c/a1"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(1, len(dependency_paths)) self.assertIn("libs/d/a1", dependency_paths) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(1, len(dependency_paths)) self.assertIn("libs/d/a1", dependency_paths) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(3, len(dependency_paths)) self.assertIn("libs/c/a1", dependency_paths) # own artifact included self.assertIn("libs/c/a2", dependency_paths) # own artifact included self.assertIn("libs/d/a1", dependency_paths) # LIB C A2 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/c/a2"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/c/a2"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(0, len(dependency_paths)) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(0, len(dependency_paths)) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(3, len(dependency_paths)) self.assertIn("libs/c/a1", dependency_paths) # own artifact included self.assertIn("libs/c/a2", dependency_paths) # own artifact included self.assertIn("libs/d/a1", dependency_paths) # LIB D A1 - pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/d/a1"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/d/a1"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(0, len(dependency_paths)) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(0, len(dependency_paths)) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(2, len(dependency_paths)) self.assertIn("libs/d/a1", dependency_paths) # own artifact included self.assertIn("libs/d/a2", dependency_paths) # own artifact included # LIB D A2 - _pomgen = [p for p in result.pomgens if p.artifact_def.bazel_package == "libs/d/a2"][0] + ctx = [ctx for ctx in result.artifact_generation_contexts if ctx.artifact_def.bazel_package == "libs/d/a2"][0] # direct dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies] + dependency_paths = [d.bazel_package for d in ctx.direct_dependencies] self.assertEqual(0, len(dependency_paths)) # transitive closure of artifact dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_artifact_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.artifact_transitive_closure] self.assertEqual(0, len(dependency_paths)) # transitive closure of library dependencies - dependency_paths = [d.bazel_package for d in pomgen.dependencies_library_transitive_closure] + dependency_paths = [d.bazel_package for d in ctx.library_transitive_closure] self.assertEqual(2, len(dependency_paths)) self.assertIn("libs/d/a1", dependency_paths) # own artifact included self.assertIn("libs/d/a2", dependency_paths) # own artifact included