Skip to content
Snippets Groups Projects
Unverified Commit b0fdfeba authored by Rhys Arkins's avatar Rhys Arkins Committed by GitHub
Browse files

refactor(pipenv): write registryUrls to packageFile level (#3574)

parent d68da97e
No related merge requests found
......@@ -24,22 +24,22 @@ function extractPackageFile(content) {
logger.debug({ err }, 'Error parsing Pipfile');
return null;
}
let registryUrls;
const res = {};
if (pipfile.source) {
registryUrls = pipfile.source.map(source => source.url);
res.registryUrls = pipfile.source.map(source => source.url);
}
const deps = [
...extractFromSection(pipfile, 'packages', registryUrls),
...extractFromSection(pipfile, 'dev-packages', registryUrls),
res.deps = [
...extractFromSection(pipfile, 'packages'),
...extractFromSection(pipfile, 'dev-packages'),
];
if (!deps.length) {
return null;
if (res.deps.length) {
return res;
}
return { deps };
return null;
}
function extractFromSection(pipfile, section, registryUrls) {
function extractFromSection(pipfile, section) {
if (!(section in pipfile)) {
return [];
}
......@@ -96,9 +96,6 @@ function extractFromSection(pipfile, section, registryUrls) {
dep.datasource = 'pypi';
}
if (pipenvNestedVersion) dep.pipenvNestedVersion = pipenvNestedVersion;
if (registryUrls) {
dep.registryUrls = registryUrls;
}
return dep;
})
.filter(Boolean);
......
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`lib/manager/pipenv/extract extractPackageFile() extracts dependencies 1`] = `
Array [
Object {
"currentValue": "==0.3.1",
"datasource": "pypi",
"depName": "some-package",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
},
Object {
"currentValue": "==1.0.0",
"datasource": "pypi",
"depName": "some-other-package",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
},
Object {
"currentValue": "==1.0.0",
"depName": "_invalid-package",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
"skipReason": "invalid-name",
},
Object {
"currentValue": "==0 0",
"depName": "invalid-version",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
"skipReason": "invalid-version",
},
Object {
"currentValue": "==1.0.0",
"datasource": "pypi",
"depName": "pytest-benchmark",
"depType": "packages",
"pipenvNestedVersion": true,
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
},
Object {
"currentValue": "==0.1.0",
"datasource": "pypi",
"depName": "dev-package",
"depType": "dev-packages",
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
},
]
Object {
"deps": Array [
Object {
"currentValue": "==0.3.1",
"datasource": "pypi",
"depName": "some-package",
"depType": "packages",
},
Object {
"currentValue": "==1.0.0",
"datasource": "pypi",
"depName": "some-other-package",
"depType": "packages",
},
Object {
"currentValue": "==1.0.0",
"depName": "_invalid-package",
"depType": "packages",
"skipReason": "invalid-name",
},
Object {
"currentValue": "==0 0",
"depName": "invalid-version",
"depType": "packages",
"skipReason": "invalid-version",
},
Object {
"currentValue": "==1.0.0",
"datasource": "pypi",
"depName": "pytest-benchmark",
"depType": "packages",
"pipenvNestedVersion": true,
},
Object {
"currentValue": "==0.1.0",
"datasource": "pypi",
"depName": "dev-package",
"depType": "dev-packages",
},
],
"registryUrls": Array [
"https://pypi.org/simple",
"http://example.com/private-pypi/",
],
}
`;
exports[`lib/manager/pipenv/extract extractPackageFile() extracts example pipfile 1`] = `
......@@ -72,9 +54,6 @@ Object {
Object {
"depName": "requests",
"depType": "packages",
"registryUrls": Array [
"https://pypi.python.org/simple",
],
"skipReason": "any-version",
},
Object {
......@@ -82,32 +61,20 @@ Object {
"datasource": "pypi",
"depName": "records",
"depType": "packages",
"registryUrls": Array [
"https://pypi.python.org/simple",
],
},
Object {
"depName": "django",
"depType": "packages",
"registryUrls": Array [
"https://pypi.python.org/simple",
],
"skipReason": "git-dependency",
},
Object {
"depName": "e682b37",
"depType": "packages",
"registryUrls": Array [
"https://pypi.python.org/simple",
],
"skipReason": "file-dependency",
},
Object {
"depName": "e1839a8",
"depType": "packages",
"registryUrls": Array [
"https://pypi.python.org/simple",
],
"skipReason": "local-dependency",
},
Object {
......@@ -115,18 +82,12 @@ Object {
"depName": "pywinusb",
"depType": "packages",
"pipenvNestedVersion": true,
"registryUrls": Array [
"https://pypi.python.org/simple",
],
"skipReason": "any-version",
},
Object {
"currentValue": "*",
"depName": "nose",
"depType": "dev-packages",
"registryUrls": Array [
"https://pypi.python.org/simple",
],
"skipReason": "any-version",
},
Object {
......@@ -135,60 +96,50 @@ Object {
"depName": "unittest2",
"depType": "dev-packages",
"pipenvNestedVersion": true,
"registryUrls": Array [
"https://pypi.python.org/simple",
],
},
],
"registryUrls": Array [
"https://pypi.python.org/simple",
],
}
`;
exports[`lib/manager/pipenv/extract extractPackageFile() extracts multiple dependencies 1`] = `
Array [
Object {
"currentValue": "==1",
"datasource": "pypi",
"depName": "Django",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
],
},
Object {
"currentValue": "==0.6.27",
"datasource": "pypi",
"depName": "distribute",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
],
},
Object {
"currentValue": "==0.2",
"datasource": "pypi",
"depName": "dj-database-url",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
],
},
Object {
"currentValue": "==2.4.5",
"datasource": "pypi",
"depName": "psycopg2",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
],
},
Object {
"currentValue": "==0.1.2",
"datasource": "pypi",
"depName": "wsgiref",
"depType": "packages",
"registryUrls": Array [
"https://pypi.org/simple",
],
},
]
Object {
"deps": Array [
Object {
"currentValue": "==1",
"datasource": "pypi",
"depName": "Django",
"depType": "packages",
},
Object {
"currentValue": "==0.6.27",
"datasource": "pypi",
"depName": "distribute",
"depType": "packages",
},
Object {
"currentValue": "==0.2",
"datasource": "pypi",
"depName": "dj-database-url",
"depType": "packages",
},
Object {
"currentValue": "==2.4.5",
"datasource": "pypi",
"depName": "psycopg2",
"depType": "packages",
},
Object {
"currentValue": "==0.1.2",
"datasource": "pypi",
"depName": "wsgiref",
"depType": "packages",
},
],
"registryUrls": Array [
"https://pypi.org/simple",
],
}
`;
......@@ -31,10 +31,10 @@ describe('lib/manager/pipenv/extract', () => {
expect(extractPackageFile('nothing here', config)).toBeNull();
});
it('extracts dependencies', () => {
const res = extractPackageFile(pipfile1, config).deps;
const res = extractPackageFile(pipfile1, config);
expect(res).toMatchSnapshot();
expect(res).toHaveLength(6);
expect(res.filter(dep => !dep.skipReason)).toHaveLength(4);
expect(res.deps).toHaveLength(6);
expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(4);
});
it('marks packages with "extras" as skipReason === any-version', () => {
const res = extractPackageFile(pipfile3, {
......@@ -42,45 +42,45 @@ describe('lib/manager/pipenv/extract', () => {
pipenv: { enabled: true },
pip_setup: { enabled: true },
labels: ['dependencies'],
}).deps;
expect(res.filter(r => !r.skipReason)).toHaveLength(0);
expect(res.filter(r => r.skipReason)).toHaveLength(6);
});
expect(res.deps.filter(r => !r.skipReason)).toHaveLength(0);
expect(res.deps.filter(r => r.skipReason)).toHaveLength(6);
});
it('extracts multiple dependencies', () => {
const res = extractPackageFile(pipfile2, config).deps;
const res = extractPackageFile(pipfile2, config);
expect(res).toMatchSnapshot();
expect(res).toHaveLength(5);
expect(res.deps).toHaveLength(5);
});
it('ignores git dependencies', () => {
const content =
'[packages]\r\nflask = {git = "https://github.com/pallets/flask.git"}\r\nwerkzeug = ">=0.14"';
const res = extractPackageFile(content, config).deps;
expect(res.filter(r => !r.skipReason)).toHaveLength(1);
const res = extractPackageFile(content, config);
expect(res.deps.filter(r => !r.skipReason)).toHaveLength(1);
});
it('ignores invalid package names', () => {
const content = '[packages]\r\nfoo = "==1.0.0"\r\n_invalid = "==1.0.0"';
const res = extractPackageFile(content, config).deps;
expect(res).toHaveLength(2);
expect(res.filter(dep => !dep.skipReason)).toHaveLength(1);
const res = extractPackageFile(content, config);
expect(res.deps).toHaveLength(2);
expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(1);
});
it('ignores relative path dependencies', () => {
const content = '[packages]\r\nfoo = "==1.0.0"\r\ntest = {path = "."}';
const res = extractPackageFile(content, config).deps;
expect(res.filter(r => !r.skipReason)).toHaveLength(1);
const res = extractPackageFile(content, config);
expect(res.deps.filter(r => !r.skipReason)).toHaveLength(1);
});
it('ignores invalid versions', () => {
const content = '[packages]\r\nfoo = "==1.0.0"\r\nsome-package = "==0 0"';
const res = extractPackageFile(content, config).deps;
expect(res).toHaveLength(2);
expect(res.filter(dep => !dep.skipReason)).toHaveLength(1);
const res = extractPackageFile(content, config);
expect(res.deps).toHaveLength(2);
expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(1);
});
it('extracts all sources', () => {
const content =
'[[source]]\r\nurl = "source-url"\r\n' +
'[[source]]\r\nurl = "other-source-url"\r\n' +
'[packages]\r\nfoo = "==1.0.0"\r\n';
const res = extractPackageFile(content, config).deps;
expect(res[0].registryUrls).toEqual(['source-url', 'other-source-url']);
const res = extractPackageFile(content, config);
expect(res.registryUrls).toEqual(['source-url', 'other-source-url']);
});
it('extracts example pipfile', () => {
const res = extractPackageFile(pipfile4, config);
......
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