From 3972609ab0a74a566628adcdc55b2128cb567407 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov <olegkrivtsov@gmail.com> Date: Thu, 6 Jan 2022 17:47:56 +0700 Subject: [PATCH] fix(manager/pip_requirements): handle lines with environment markers in requirements.txt (#13403) Co-authored-by: Michael Kriese <michael.kriese@visualon.de> --- .../__fixtures__/requirements-env-markers.txt | 1 + lib/manager/pip_requirements/extract.spec.ts | 20 +++++++++++++++++++ lib/manager/pip_requirements/extract.ts | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 lib/manager/pip_requirements/__fixtures__/requirements-env-markers.txt diff --git a/lib/manager/pip_requirements/__fixtures__/requirements-env-markers.txt b/lib/manager/pip_requirements/__fixtures__/requirements-env-markers.txt new file mode 100644 index 0000000000..3f46ef611a --- /dev/null +++ b/lib/manager/pip_requirements/__fixtures__/requirements-env-markers.txt @@ -0,0 +1 @@ +attrs==20.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" diff --git a/lib/manager/pip_requirements/extract.spec.ts b/lib/manager/pip_requirements/extract.spec.ts index 94f9b02783..fce32b69a0 100644 --- a/lib/manager/pip_requirements/extract.spec.ts +++ b/lib/manager/pip_requirements/extract.spec.ts @@ -10,6 +10,7 @@ const requirements5 = loadFixture('requirements5.txt'); const requirements6 = loadFixture('requirements6.txt'); const requirements7 = loadFixture('requirements7.txt'); const requirements8 = loadFixture('requirements8.txt'); +const requirementsWithEnvMarkers = loadFixture('requirements-env-markers.txt'); describe('manager/pip_requirements/extract', () => { beforeEach(() => { @@ -134,10 +135,29 @@ describe('manager/pip_requirements/extract', () => { 'http://its-a-secret:example.com/private-pypi/', ]); }); + it('should handle hashes', () => { const res = extractPackageFile(requirements8, 'unused_file_name', {}); expect(res).toMatchSnapshot(); expect(res.deps).toHaveLength(3); }); + + it('should handle dependency and ignore env markers', () => { + const res = extractPackageFile( + requirementsWithEnvMarkers, + 'unused_file_name', + {} + ); + expect(res).toEqual({ + deps: [ + { + currentValue: '==20.3.0', + currentVersion: '20.3.0', + datasource: 'pypi', + depName: 'attrs', + }, + ], + }); + }); }); }); diff --git a/lib/manager/pip_requirements/extract.ts b/lib/manager/pip_requirements/extract.ts index 5ca09fe420..6393ba9fc2 100644 --- a/lib/manager/pip_requirements/extract.ts +++ b/lib/manager/pip_requirements/extract.ts @@ -63,7 +63,8 @@ export function extractPackageFile( if (isSkipComment(comment)) { dep.skipReason = SkipReason.Ignored; } - const lineNoHashes = line.split(' \\')[0]; + const [lineNoEnvMarkers] = line.split(';').map((part) => part.trim()); + const lineNoHashes = lineNoEnvMarkers.split(' \\')[0]; const matches = pkgValRegex.exec(lineNoHashes) || pkgRegex.exec(lineNoHashes); if (!matches) { -- GitLab