commit 185247297710f84314741371b064627dbe263d0e Author: Michal Srb msrb@redhat.com Date: Mon May 12 13:21:41 2014 +0200
[mvn_artifact] Initial support for reading DependencyManagement information from parent POMs
java-utils/mvn_artifact.py | 42 ++++++++++++++++++++++++++++++++++++------ 1 files changed, 36 insertions(+), 6 deletions(-) --- diff --git a/java-utils/mvn_artifact.py b/java-utils/mvn_artifact.py index 58f59ef..992801d 100644 --- a/java-utils/mvn_artifact.py +++ b/java-utils/mvn_artifact.py @@ -88,6 +88,12 @@ def load_metadata(metadatadir="/usr/share/maven-metadata"): return Depmap(mfiles)
+def load_poms(pomdir="/usr/share/maven-poms"): + pfiles = [os.path.join(pomdir, f) for f in os.listdir(pomdir)] + poms = [] + return poms.extend([POM(p) for p in pfiles]) + + def is_it_ivy_file(fpath): """Try to determine whether file in given path is Ivy file or not""" et = ElementTree() @@ -95,6 +101,7 @@ def is_it_ivy_file(fpath):
return doc.tag == "ivy-module"
+ def add_artifact_elements(root, uart, ppath=None, jpath=None): artifacts = [] for path in [ppath, jpath]: @@ -124,27 +131,50 @@ def add_artifact_elements(root, uart, ppath=None, jpath=None): root.artifacts.append(a)
+def get_dependency_management(pom_path): + + curr_pom = POM(pom_path) + dm = [] + + if not curr_pom.parentGroupId: + dm.extend([x for x in curr_pom.get_dependency_management()]) + return dm + + all_poms = load_poms() + poms = [] + poms.append(curr_pom) + + while poms[-1].parentGroupId: + for p in all_poms: + if poms[-1].parentGroupId == p.groupId and poms[-1].parentArtifactId == p.ArtifactId: + poms.append(p) + + for p in reversed(poms): + # FIXME: not entirely correct + dm.append([x for x in p.get_dependency_management()]) + + return dm + + def get_dependencies(pom_path): deps = [] - dep_management = []
if pom_path: p = POM(pom_path) deps.extend([x for x in p.get_dependencies()]) - dep_management.extend([x for x in p.get_dependency_management()]) + dep_management = get_dependency_management(pom_path)
for d in deps: for dm in dep_management: if d.artifactId == dm.artifactId and d.groupId == dm.groupId: deps.append(Dependency.merge_dependencies(d, dm)) - deps.remove(d) - dep_management.remove(dm) + deps.pop(deps.index(d)) + dep_management.pop(dep_management.index(dm))
try: mets = load_metadata() for provided in mets.get_provided_artifacts(): - if (provided.groupId == p.parentGroupId and - provided.artifactId == p.parentArtifactId): + if provided.groupId == p.parentGroupId and provided.artifactId == p.parentArtifactId: for dep in provided.dependencies: deps.append(Dependency.from_metadata(dep)) except MetadataInvalidException: