diff --git a/sync/generate-gradle.py b/sync/generate-gradle.py index 516df7c..46e73c6 100755 --- a/sync/generate-gradle.py +++ b/sync/generate-gradle.py @@ -48,6 +48,9 @@ class WaitForPackage(Exception): def __init__(self, package): self.package = package +def find_tag_text(parent, tag) -> str | None: + elem = parent.find(tag, ns) + return elem.text if elem is not None else None class PackagePOM: def __init__(self, package: 'Package', pom: str): @@ -59,12 +62,9 @@ class PackagePOM: self.parent: Package | None = None if (parent_tag := self.raw_root.find('parent', ns)) is not None: - parent_group_tag = parent_tag.find('groupId', ns) - parent_artifact_tag = parent_tag.find('artifactId', ns) - parent_version_tag = parent_tag.find('version', ns) - parent_group = parent_group_tag.text if parent_group_tag is not None else None - parent_artifact = parent_artifact_tag.text if parent_artifact_tag is not None else None - parent_version = parent_version_tag.text if parent_version_tag is not None else None + parent_group = find_tag_text(parent_tag, 'groupId') + parent_artifact = find_tag_text(parent_tag, 'artifactId') + parent_version = find_tag_text(parent_tag, 'version') logger.debug(f'{package}: Parsing parent {parent_group}:{parent_artifact}:{parent_version}') @@ -97,16 +97,32 @@ class PackagePOM: self.gradle_packages = [str(package)] - if self.packaging == 'pom': - root_copy = copy.deepcopy(self.raw_root) - dependencies = root_copy.find('dependencies', ns) or ET.SubElement(root_copy, 'dependencies') + if self.is_bom: + logger.debug(f'{package}: Parsing dependencyManagement') - self.gradle_packages.extend( - [ - f'{dep.find("groupId").text}:{dep.find("artifactId").text}:{dep.find("version").text}' - for dep in dependencies.findall('dependency') - ] - ) + if (dependencyManagement := self.raw_root.find('dependencyManagement', ns)): + if (dependencies := dependencyManagement.find('dependencies', ns)): + packages = [] + + for dep in dependencies.findall('dependency', ns): + groupId = find_tag_text(dep, 'groupId') + artifactId = find_tag_text(dep, 'artifactId') + version = find_tag_text(dep, 'version') + + + if groupId is not None and artifactId is not None and version is not None: + groupId = self.prop_replace(groupId) + artifactId = self.prop_replace(artifactId) + version = self.prop_replace(version) + packages.append(f'{groupId}:{artifactId}:{version}') + + logger.debug(f'{package}: Adding {len(packages)} package(s) from dependencyManagement') + + self.gradle_packages.extend(packages) + else: + logger.warn(f'{package}: dependencyManagement has no dependencies') + else: + logger.warn(f'{package}: BOM has no dependencyManagement') logger.debug(f'{package}: POM parsed')