Skip to content

Commit eec0981

Browse files
committed
checkpoint 1
1 parent 082bd87 commit eec0981

File tree

5 files changed

+45
-43
lines changed

5 files changed

+45
-43
lines changed

src/crawl/artifactgenctx.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ class ArtifactGenerationContext:
66
Information about a single artifact that was crawled.
77
"""
88

9-
def __init__(self, workspace, pom_template, artifact_def, dependency):
9+
def __init__(self, workspace, pom_template, artifact_def, label):
1010
self._artifact_def = artifact_def
11-
self._dependency = dependency
11+
self._label = label
1212

1313
self._direct_dependencies = []
1414
self._artifact_transitive_closure = []
@@ -26,11 +26,11 @@ def artifact_def(self):
2626
return self._artifact_def
2727

2828
@property
29-
def dependency(self):
29+
def label(self):
3030
"""
31-
The dependency that points at this artifact (that dragged it in).
31+
The label that points at this artifact.
3232
"""
33-
return self._dependency
33+
return self._label
3434

3535
@property
3636
def direct_dependencies(self):

src/crawl/crawler.py

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@ class Node:
2525
target per bazel package.
2626
"""
2727

28-
def __init__(self, parent, artifact_def, dependency):
28+
def __init__(self, parent, artifact_def, label):
2929
assert artifact_def is not None, "artifact_def cannot be None"
30-
assert dependency is not None, "dependency cannot be None"
30+
assert label is not None, "label cannot be None"
3131

3232
# the parent Nodes
3333
self.parents = [] if parent is None else [parent]
3434
# parsed metadata (BUILD.pom etc) files
3535
self.artifact_def = artifact_def
3636
# the dependency pointing to this target
37-
self.dependency = dependency
37+
self.label = label
3838
# all direct child nodes
3939
self.children = []
4040

@@ -182,7 +182,7 @@ def _register_dependencies(self, target_to_transitive_closure_deps):
182182
"""
183183
for ctx in self.genctxs:
184184
target_key = self._get_target_key(
185-
ctx.artifact_def.bazel_package, ctx.dependency)
185+
ctx.artifact_def.bazel_package, ctx.label)
186186
directs = self.target_to_dependencies[target_key]
187187
ctx.register_artifact_directs(directs)
188188
transitive_closure = target_to_transitive_closure_deps[target_key]
@@ -199,7 +199,7 @@ def _get_deps_transitive_closure_for_library(self, library_path,
199199

200200
nodes = self.library_to_nodes[library_path]
201201
for n in nodes:
202-
target_key = self._get_target_key(n.artifact_def.bazel_package, n.dependency)
202+
target_key = self._get_target_key(n.artifact_def.bazel_package, n.label)
203203
all_deps.update(target_to_transitive_closure_deps[target_key])
204204

205205
# also include every artifact that is part of this library
@@ -295,7 +295,7 @@ def _accumulate_deps_and_walk(self, node, accumulated_deps,
295295
target_to_all_dependencies: the result dictionary being built
296296
"""
297297
package = node.artifact_def.bazel_package
298-
target_key = self._get_target_key(package, node.dependency)
298+
target_key = self._get_target_key(package, node.label)
299299
this_node_deps = self.target_to_dependencies[target_key]
300300

301301
processed_deps = set() # to remove duplicate deps
@@ -358,7 +358,7 @@ def _push_transitives_to_parent(self):
358358
def _push_transitives_and_walk(self, node, collected_dep_lists,
359359
processed_nodes):
360360
package = node.artifact_def.bazel_package
361-
target_key = self._get_target_key(package, node.dependency)
361+
target_key = self._get_target_key(package, node.label)
362362
deps = self.target_to_dependencies[target_key]
363363
if node.artifact_def.pom_generation_mode.produces_artifact:
364364
if len(collected_dep_lists) > 0:
@@ -484,24 +484,25 @@ def _crawl_packages(self, packages, follow_references):
484484
"""
485485
nodes = []
486486
for package in packages:
487-
n = self._crawl(package, dep=None, parent_node=None,
487+
n = self._crawl(package, label=None, parent_node=None,
488488
follow_references=follow_references)
489489
nodes.append(n)
490490
return nodes
491-
492-
def _crawl(self, package, dep, parent_node, follow_references):
491+
492+
# TODO combine package and label
493+
def _crawl(self, package, label, parent_node, follow_references):
493494
"""
494495
For the specified package, crawl BUILD file dependencies, unless
495496
follow_references is False.
496497
497-
The dependency instance is the dependency pointing at this package.
498+
The given label instance is the label pointing at this package.
498499
499500
Returns a Node instance for the crawled package.
500501
"""
501502
artifact_def = self.workspace.parse_maven_artifact_def(package)
502503
if artifact_def is None:
503504
raise Exception("No artifact defined at package %s" % package)
504-
target_key = self._get_target_key(package, dep, artifact_def)
505+
target_key = self._get_target_key(package, label, artifact_def)
505506
if target_key in self.target_to_node:
506507
# if we have already processed this target, we can re-use the
507508
# children we discovered previously
@@ -526,15 +527,16 @@ def _crawl(self, package, dep, parent_node, follow_references):
526527

527528
self.package_to_artifact[package] = artifact_def
528529
self.library_to_artifact[artifact_def.library_path].append(artifact_def)
529-
if dep is None:
530-
# make a real dependency instance here
530+
if label is None:
531+
# make a real label instance here
531532
# this is a bootstrapping problem: the root
532533
# artifacts (that we start with) have nothing pointing at them
533-
dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
534+
# (but this can be initialized earlier)
535+
label = labelm.Label("%s:%s" % (package, artifact_def.bazel_target))
534536
artifactctx = artifactgenctx.ArtifactGenerationContext(
535-
self.workspace, self.pom_template, artifact_def, dep)
537+
self.workspace, self.pom_template, artifact_def, label)
536538
self.genctxs.append(artifactctx)
537-
labels = self._discover_dependencies(artifact_def, dep)
539+
labels = self._discover_dependencies(artifact_def, label)
538540

539541
# TODO abstract this, as it assumes maven_install
540542
all_deps = self.workspace.parse_dep_labels([lbl.name for lbl in labels])
@@ -544,7 +546,7 @@ def _crawl(self, package, dep, parent_node, follow_references):
544546
logger.debug("Determined labels for artifact: [%s] with target key [%s]" % (artifact_def, target_key))
545547
logger.debug("Labels: %s" % "\n".join([lbl.name for lbl in labels]))
546548
logger.debug("Dependencies: %s" % "\n".join([str(d) for d in all_deps]))
547-
node = Node(parent_node, artifact_def, dep)
549+
node = Node(parent_node, artifact_def, label)
548550
if follow_references:
549551
# this is where we crawl is source label:
550552
for label in labels:
@@ -555,30 +557,30 @@ def _crawl(self, package, dep, parent_node, follow_references):
555557
# the parse method above
556558
continue
557559
child_node = self._crawl(
558-
label.package_path, deps[0], node,
560+
label.package_path, label, node,
559561
follow_references)
560562
node.children.append(child_node)
561563
self.target_to_node[target_key] = node
562564
self.library_to_nodes[node.artifact_def.library_path].append(node)
563565
self._store_if_leafnode(node)
564566
return node
565567

566-
def _discover_dependencies(self, artifact_def, dep):
568+
def _discover_dependencies(self, artifact_def, label):
567569
"""
568570
Discovers the dependencies of the given artifact (==bazel target).
569571
570572
This method returns a list of common.label.Label instances.
571573
"""
572574
assert artifact_def is not None
573-
assert dep is not None, "dep is None for artifact %s" % artifact_def
575+
assert label is not None, "label is None for artifact %s" % artifact_def
574576
labels = ()
575577
if artifact_def.deps is not None:
576578
labels = [labelm.Label(lbl) for lbl in artifact_def.deps]
577579
if artifact_def.has_build_file:
578-
labels += self._query_labels(artifact_def, dep)
580+
labels += self._query_labels(artifact_def, label)
579581
return labels
580582

581-
def _query_labels(self, artifact_def, dependency):
583+
def _query_labels(self, artifact_def, label):
582584
"""
583585
Delegates to bazel query to get the value of a bazel target's "deps"
584586
and "runtime_deps" attributes. Returns an iterable of common.label.Label
@@ -588,13 +590,10 @@ def _query_labels(self, artifact_def, dependency):
588590
return ()
589591
else:
590592
assert artifact_def.bazel_package is not None
591-
assert dependency.bazel_target is not None
592-
assert len(dependency.bazel_target) > 0
593-
artifact_def_label = "%s:%s" % (artifact_def.bazel_package, dependency.bazel_target)
594593
try:
595594
labels = bazel.query_java_library_deps_attributes(
596595
self.workspace.repo_root_path,
597-
artifact_def_label,
596+
label.name,
598597
artifact_def.pom_generation_mode.dependency_attributes,
599598
self.workspace.verbose)
600599
labels = [labelm.Label(lbl) for lbl in labels]
@@ -627,14 +626,14 @@ def _remove_package_private_labels(clazz, labels, owning_artifact_def):
627626
return updated_labels
628627

629628
@classmethod
630-
def _get_target_key(clazz, package, dep, artifact_def=None):
631-
if dep is None:
629+
def _get_target_key(clazz, package, label, artifact_def=None):
630+
if label is None:
632631
# initial bootstrap - we start a bazel package and we don't
633-
# have a dep pointing here
632+
# have a label pointing here
634633
assert artifact_def is not None
635634
target = artifact_def.bazel_target
636635
else:
637-
target = dep.bazel_target
636+
target = label.target
638637
assert target is not None, "Target is None for package %s" % package
639638
return "%s:%s" % (package, target)
640639

src/crawl/dependency.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ def new_dep_from_maven_art_str(maven_artifact_str, name):
315315

316316

317317
def new_dep_from_maven_artifact_def(artifact_def, bazel_target=None):
318-
if bazel_target is None:
318+
if bazel_target is None:
319319
bazel_target = artifact_def.bazel_target
320320
assert bazel_target is not None
321321
return MonorepoDependency(artifact_def, bazel_target)

tests/crawlerunittest.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -541,18 +541,17 @@ def _build_node(self, artifact_id, bazel_package,
541541
pom_generation_mode=pom_generation_mode,
542542
library_path=library_path,
543543
bazel_target="t1")
544-
dep = dependency.new_dep_from_maven_artifact_def(art_def)
545-
return crawlerm.Node(parent=parent_node, artifact_def=art_def, dependency=dep)
544+
return crawlerm.Node(parent_node, art_def, label.Label(bazel_package))
546545

547546
def _get_associated_deps(self, crawler, node):
548547
return self._get_deps_for_node(node, crawler.target_to_dependencies)
549548

550549
def _get_deps_for_node(self, node, target_to_deps):
551-
target_key = crawlerm.Crawler._get_target_key(node.artifact_def.bazel_package, node.dependency)
550+
target_key = crawlerm.Crawler._get_target_key(node.artifact_def.bazel_package, node.label)
552551
return target_to_deps[target_key]
553552

554553
def _associate_dep(self, crawler, node, dep):
555-
target_key = crawlerm.Crawler._get_target_key(node.artifact_def.bazel_package, node.dependency)
554+
target_key = crawlerm.Crawler._get_target_key(node.artifact_def.bazel_package, node.label)
556555
deps_list = dep if isinstance(dep, (list, tuple)) else [dep]
557556
if target_key in crawler.target_to_dependencies:
558557
crawler.target_to_dependencies[target_key] += deps_list

tests/libaggregatortest.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
"""
77

8+
9+
from common import label
810
from crawl.buildpom import MavenArtifactDef
911
from crawl import dependency
1012
from crawl.crawler import Node
1113
from crawl.releasereason import ReleaseReason
1214
import crawl.libaggregator
1315
import unittest
1416

17+
1518
class LibAggregatorTest(unittest.TestCase):
1619

1720
def test_single_lib__requires_release(self):
@@ -165,8 +168,9 @@ def _create_library_artifact_node(self, group_id, artifact_id, version,
165168
requires_release=requires_release,
166169
bazel_target="t1")
167170
artifact_def.release_reason = release_reason
168-
dep = dependency.new_dep_from_maven_artifact_def(artifact_def)
169-
return Node(parent=None, artifact_def=artifact_def, dependency=dep)
171+
return Node(parent=None, artifact_def=artifact_def,
172+
label=label.Label(library_path))
173+
170174

171175
if __name__ == '__main__':
172176
unittest.main()

0 commit comments

Comments
 (0)