| @@ -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') | |||