Skip to content

Commit

Permalink
feat(maven): Group dependencies by common version property (#4028)
Browse files Browse the repository at this point in the history
  • Loading branch information
zharinov authored and rarkins committed Jul 13, 2019
1 parent 6490f1b commit 9a3c9ca
Show file tree
Hide file tree
Showing 5 changed files with 207 additions and 11 deletions.
8 changes: 8 additions & 0 deletions lib/manager/maven/extract.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)) {
Expand Down
20 changes: 15 additions & 5 deletions test/manager/maven/__snapshots__/extract.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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/",
Expand All @@ -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/",
Expand All @@ -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/",
Expand All @@ -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/",
Expand All @@ -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/",
Expand Down
178 changes: 178 additions & 0 deletions test/manager/maven/__snapshots__/index.spec.js.snap
Original file line number Diff line number Diff line change
@@ -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",
},
]
`;
5 changes: 5 additions & 0 deletions test/manager/maven/_fixtures/simple.pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
7 changes: 1 addition & 6 deletions test/manager/maven/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
});
});

Expand Down

0 comments on commit 9a3c9ca

Please sign in to comment.