From 628b66ffbfc58f0c0fb453b895c7a942c9155a28 Mon Sep 17 00:00:00 2001 From: Sergio Zharinov <zharinov@users.noreply.github.com> Date: Mon, 5 Aug 2019 17:00:16 +0400 Subject: [PATCH] fix(maven): Fix cyclic parents chain resolution (#4215) --- lib/manager/maven/extract.ts | 13 ++++++++++--- test/manager/maven/__snapshots__/index.spec.ts.snap | 1 + test/manager/maven/_fixtures/parent.pom.xml | 7 +++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts index bf535024ef..bfd5057152 100644 --- a/lib/manager/maven/extract.ts +++ b/lib/manager/maven/extract.ts @@ -179,8 +179,9 @@ export function extractPackage(rawContent: string, packageFile: string = null) { }); } - const parentPath = project.valueWithPath('parent.relativePath'); - if (parentPath) { + if (packageFile && project.childNamed('parent')) { + const parentPath = + project.valueWithPath('parent.relativePath') || '../pom.xml'; result.parent = resolveParentFile(packageFile, parentPath); } @@ -204,10 +205,16 @@ export function resolveProps(packages: PackageFile[]): PackageFile[] { // which allows inheritance/overriding. packageFileNames.forEach(name => { const hierarchy: Record<string, MavenProp>[] = []; + const alreadyExtracted: Record<string, boolean> = {}; let pkg = extractedPackages[name]; while (pkg) { hierarchy.unshift(pkg.mavenProps); - pkg = extractedPackages[pkg.parent]; + if (pkg.parent && !alreadyExtracted[pkg.parent]) { + alreadyExtracted[pkg.parent] = true; + pkg = extractedPackages[pkg.parent]; + } else { + pkg = null; + } } hierarchy.unshift({}); // @ts-ignore diff --git a/test/manager/maven/__snapshots__/index.spec.ts.snap b/test/manager/maven/__snapshots__/index.spec.ts.snap index c9dc7c4655..0c5c78c660 100644 --- a/test/manager/maven/__snapshots__/index.spec.ts.snap +++ b/test/manager/maven/__snapshots__/index.spec.ts.snap @@ -143,6 +143,7 @@ Array [ }, ], "packageFile": "random.pom.xml", + "parent": "../pom.xml", }, ] `; diff --git a/test/manager/maven/_fixtures/parent.pom.xml b/test/manager/maven/_fixtures/parent.pom.xml index 2da5281232..aea9626f8e 100644 --- a/test/manager/maven/_fixtures/parent.pom.xml +++ b/test/manager/maven/_fixtures/parent.pom.xml @@ -1,5 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"> + <parent> + <groupId>org.example</groupId> + <artifactId>child</artifactId> + <version>42</version> + <relativePath>child.pom.xml</relativePath> + </parent> + <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>ExamplePomParent</artifactId> -- GitLab