From 9a3c9cabb8edce8c1a161c4634483a8261847ac4 Mon Sep 17 00:00:00 2001 From: Sergio Zharinov <zharinov@users.noreply.github.com> Date: Sat, 13 Jul 2019 09:56:44 +0400 Subject: [PATCH] feat(maven): Group dependencies by common version property (#4028) --- lib/manager/maven/extract.js | 8 + .../maven/__snapshots__/extract.spec.js.snap | 20 +- .../maven/__snapshots__/index.spec.js.snap | 178 ++++++++++++++++++ test/manager/maven/_fixtures/simple.pom.xml | 5 + test/manager/maven/index.spec.js | 7 +- 5 files changed, 207 insertions(+), 11 deletions(-) create mode 100644 test/manager/maven/__snapshots__/index.spec.js.snap diff --git a/lib/manager/maven/extract.js b/lib/manager/maven/extract.js index 9b62ed7fec..ce99fff75b 100644 --- a/lib/manager/maven/extract.js +++ b/lib/manager/maven/extract.js @@ -69,10 +69,14 @@ function applyProps(dep, props) { let fileReplacePosition = dep.fileReplacePosition; let propSource = null; + let groupName = null; const currentValue = dep.currentValue.replace(/^\${.*?}$/, substr => { const propKey = substr.slice(2, -1).trim(); const propValue = props[propKey]; if (propValue) { + if (!groupName) { + groupName = propKey; + } fileReplacePosition = propValue.fileReplacePosition; propSource = propValue.packageFile; return propValue.val; @@ -89,6 +93,10 @@ function applyProps(dep, props) { currentValue, }; + if (groupName) { + result.groupName = groupName; + } + if (containsPlaceholder(depName)) { result.skipReason = 'name-placeholder'; } else if (containsPlaceholder(currentValue)) { diff --git a/test/manager/maven/__snapshots__/extract.spec.js.snap b/test/manager/maven/__snapshots__/extract.spec.js.snap index 4144c21d3e..601c732451 100644 --- a/test/manager/maven/__snapshots__/extract.spec.js.snap +++ b/test/manager/maven/__snapshots__/extract.spec.js.snap @@ -74,11 +74,21 @@ Object { "https://maven.atlassian.com/content/repositories/atlassian-public/", ], }, + Object { + "currentValue": "\${quuxVersion}", + "datasource": "maven", + "depName": "\${quuxGroup}:\${quuxId}-test", + "fileReplacePosition": 2684, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, Object { "currentValue": "1.2.3", "datasource": "maven", "depName": "org.example:quuz", - "fileReplacePosition": 2673, + "fileReplacePosition": 2832, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -88,7 +98,7 @@ Object { "currentValue": "it's not a version", "datasource": "maven", "depName": "org.example:quuuz", - "fileReplacePosition": 2813, + "fileReplacePosition": 2972, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -98,7 +108,7 @@ Object { "currentValue": "[1.0.0]", "datasource": "maven", "depName": "org.example:hard-range", - "fileReplacePosition": 2971, + "fileReplacePosition": 3130, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -108,7 +118,7 @@ Object { "currentValue": "\${profile-placeholder}", "datasource": "maven", "depName": "org.example:profile-artifact", - "fileReplacePosition": 3233, + "fileReplacePosition": 3392, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -118,7 +128,7 @@ Object { "currentValue": "2.17", "datasource": "maven", "depName": "org.apache.maven.plugins:maven-checkstyle-plugin", - "fileReplacePosition": 3509, + "fileReplacePosition": 3668, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", diff --git a/test/manager/maven/__snapshots__/index.spec.js.snap b/test/manager/maven/__snapshots__/index.spec.js.snap new file mode 100644 index 0000000000..dab2e477fe --- /dev/null +++ b/test/manager/maven/__snapshots__/index.spec.js.snap @@ -0,0 +1,178 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/maven extractAllPackageFiles should return package files info 1`] = ` +Array [ + Object { + "datasource": "maven", + "deps": Array [ + Object { + "currentValue": "42", + "datasource": "maven", + "depName": "org.example:parent", + "fileReplacePosition": 186, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "0.0.1", + "datasource": "maven", + "depName": "org.example:foo", + "fileReplacePosition": 905, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "1.0.0", + "datasource": "maven", + "depName": "org.example:bar", + "fileReplacePosition": 1053, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "1.8.1", + "datasource": "maven", + "depName": "org.apache.maven.scm:maven-scm-provider-gitexe", + "fileReplacePosition": 1485, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "0.0.1", + "datasource": "maven", + "depName": "org.example:\${artifact-id-placeholder}", + "fileReplacePosition": 2230, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + "skipReason": "name-placeholder", + }, + Object { + "currentValue": "0.0.1", + "datasource": "maven", + "depName": "\${group-id-placeholder}:baz", + "fileReplacePosition": 2380, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + "skipReason": "name-placeholder", + }, + Object { + "currentValue": "1.2.3.4", + "datasource": "maven", + "depName": "org.example:quux", + "fileReplacePosition": 698, + "groupName": "quuxVersion", + "propSource": "random.pom.xml", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "1.2.3.4", + "datasource": "maven", + "depName": "org.example:quux-test", + "fileReplacePosition": 698, + "groupName": "quuxVersion", + "propSource": "random.pom.xml", + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "1.2.3", + "datasource": "maven", + "depName": "org.example:quuz", + "fileReplacePosition": 2832, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "it's not a version", + "datasource": "maven", + "depName": "org.example:quuuz", + "fileReplacePosition": 2972, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + "skipReason": "not-a-version", + }, + Object { + "currentValue": "[1.0.0]", + "datasource": "maven", + "depName": "org.example:hard-range", + "fileReplacePosition": 3130, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + Object { + "currentValue": "\${profile-placeholder}", + "datasource": "maven", + "depName": "org.example:profile-artifact", + "fileReplacePosition": 3392, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + "skipReason": "version-placeholder", + }, + Object { + "currentValue": "2.17", + "datasource": "maven", + "depName": "org.apache.maven.plugins:maven-checkstyle-plugin", + "fileReplacePosition": 3668, + "propSource": null, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://maven.atlassian.com/content/repositories/atlassian-public/", + ], + }, + ], + "mavenProps": Object { + "quuxGroup": Object { + "fileReplacePosition": 631, + "packageFile": "random.pom.xml", + "val": "org.example", + }, + "quuxId": Object { + "fileReplacePosition": 667, + "packageFile": "random.pom.xml", + "val": "quux", + }, + "quuxVersion": Object { + "fileReplacePosition": 698, + "packageFile": "random.pom.xml", + "val": "1.2.3.4", + }, + }, + "packageFile": "random.pom.xml", + }, +] +`; diff --git a/test/manager/maven/_fixtures/simple.pom.xml b/test/manager/maven/_fixtures/simple.pom.xml index ed76aeb998..cbebf20279 100644 --- a/test/manager/maven/_fixtures/simple.pom.xml +++ b/test/manager/maven/_fixtures/simple.pom.xml @@ -98,6 +98,11 @@ <artifactId>${quuxId}</artifactId> <version>${quuxVersion}</version> </dependency> + <dependency> + <groupId>${quuxGroup}</groupId> + <artifactId>${quuxId}-test</artifactId> + <version>${quuxVersion}</version> + </dependency> <dependency> <groupId>org.example</groupId> <artifactId>quuz</artifactId> diff --git a/test/manager/maven/index.spec.js b/test/manager/maven/index.spec.js index db5f91edc3..a52c4251f7 100644 --- a/test/manager/maven/index.spec.js +++ b/test/manager/maven/index.spec.js @@ -42,12 +42,7 @@ describe('manager/maven', () => { it('should return package files info', async () => { platform.getFile.mockReturnValueOnce(pomContent); const packages = await extractAllPackageFiles({}, ['random.pom.xml']); - expect(packages).toHaveLength(1); - - const pkg = packages[0]; - expect(pkg.packageFile).toEqual('random.pom.xml'); - expect(pkg.datasource).toEqual('maven'); - expect(pkg.deps).not.toBeNull(); + expect(packages).toMatchSnapshot(); }); }); -- GitLab