Skip to content
Snippets Groups Projects
Commit b794c9ec authored by Rhys Arkins's avatar Rhys Arkins
Browse files

refactor: maven repositoryUrls

parent 2c4ee47f
No related branches found
No related tags found
No related merge requests found
......@@ -2,20 +2,23 @@ const got = require('got');
const url = require('url');
const fs = require('fs-extra');
const { XmlDocument } = require('xmldoc');
const is = require('@sindresorhus/is');
module.exports = {
getPkgReleases,
};
// eslint-disable-next-line no-unused-vars
async function getPkgReleases(purl, config) {
async function getPkgReleases(purl) {
const versions = [];
const dependency = getDependencyParts(purl);
const repositories = getRepositories(purl);
if (repositories.length < 1) {
if (!is.nonEmptyArray(purl.repositoryUrls)) {
logger.error(`No repositories defined for ${dependency.display}`);
return null;
}
const repositories = purl.repositoryUrls.map(repository =>
repository.replace(/\/?$/, '/')
);
logger.debug(
`Found ${repositories.length} repositories for ${dependency.display}`
);
......@@ -56,18 +59,6 @@ function getDependencyParts(purl) {
};
}
function getRepositories(purl) {
if (!purl.qualifiers || !purl.qualifiers.repository_url) {
return [];
}
return purl.qualifiers.repository_url.split(',').map(repoUrl => {
if (!repoUrl.endsWith('/')) {
return repoUrl + '/';
}
return repoUrl;
});
}
async function downloadMavenMetadata(dependency, repoUrl) {
const pkgUrl = new url.URL(
`${dependency.dependencyUrl}/maven-metadata.xml`,
......
......@@ -45,6 +45,10 @@ function parse(input) {
res.lookupType = res.qualifiers.lookupType;
delete res.qualifiers.lookupType;
}
if (res.qualifiers.repository_url) {
res.repositoryUrls = res.qualifiers.repository_url.split(',');
delete res.qualifiers.repository_url;
}
} else {
res.qualifiers = {};
}
......
......@@ -45,7 +45,7 @@ describe('datasource/maven', () => {
expect(releases).toBeNull();
});
it('should return all versions of a specific library', async () => {
it('should simply return all versions of a specific library', async () => {
const releases = await datasource.getPkgReleases({
...config,
purl:
......@@ -150,7 +150,7 @@ describe('datasource/maven', () => {
.get('/maven2/mysql/mysql-connector-java/maven-metadata.xml')
.reply(200, invalidMavenMetadata);
const releases = await datasource.getPkgReleases({
config,
...config,
purl:
'pkg:maven/mysql/mysql-connector-java?repository_url=http://central.maven.org/maven2/,http://invalid_metadata_repo/maven2/',
});
......@@ -159,7 +159,7 @@ describe('datasource/maven', () => {
it('should return all versions of a specific library if a repository does not end with /', async () => {
const releases = await datasource.getPkgReleases({
config,
...config,
purl:
'pkg:maven/mysql/mysql-connector-java?repository_url=http://central.maven.org/maven2',
});
......
......@@ -58,6 +58,17 @@ Object {
}
`;
exports[`util/purl parse() parses repository_url qualifier 1`] = `
Object {
"datasource": "maven",
"lookupName": "org.apache.xmlgraphics/batik-anim",
"qualifiers": Object {},
"repositoryUrls": Array [
"repo.spring.io/release",
],
}
`;
exports[`util/purl parse() parses simple npm 1`] = `
Object {
"datasource": "npm",
......
......@@ -29,5 +29,12 @@ describe('util/purl', () => {
it('parses github with lookupType', () => {
expect(parse('pkg:github/abc/def?lookupType=releases')).toMatchSnapshot();
});
it('parses repository_url qualifier', () => {
expect(
parse(
'pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?repository_url=repo.spring.io/release'
)
).toMatchSnapshot();
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment