Skip to content

Commit

Permalink
feat(manager/pip_requirements): Add managerData with layered requirem…
Browse files Browse the repository at this point in the history
…ents (#27217)
  • Loading branch information
not7cd committed Feb 10, 2024
1 parent 15ac0b3 commit 06af3ee
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
22 changes: 22 additions & 0 deletions lib/modules/manager/pip_requirements/extract.spec.ts
Expand Up @@ -65,6 +65,28 @@ some-package==0.3.1`;
});
});

it('extracts --requirement short code option', () => {
const requirements = `-r base.txt
some-package==0.3.1`;

const res = extractPackageFile(requirements);

expect(res).toHaveProperty('managerData', {
requirementsFiles: ['base.txt'],
});
});

it('extracts --constraints short code option', () => {
const requirements = `-c constrain.txt
some-package==0.3.1`;

const res = extractPackageFile(requirements);

expect(res).toHaveProperty('managerData', {
constraintsFiles: ['constrain.txt'],
});
});

it('extracts multiple dependencies', () => {
const res = extractPackageFile(requirements2)?.deps;
expect(res).toMatchSnapshot();
Expand Down
23 changes: 22 additions & 1 deletion lib/modules/manager/pip_requirements/extract.ts
Expand Up @@ -8,6 +8,7 @@ import { newlineRegex, regEx } from '../../../util/regex';
import { GitTagsDatasource } from '../../datasource/git-tags';
import { PypiDatasource } from '../../datasource/pypi';
import type { PackageDependency, PackageFileContent } from '../types';
import type { PipRequirementsManagerData } from './types';

export const packagePattern =
'[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]';
Expand Down Expand Up @@ -46,11 +47,15 @@ export function cleanRegistryUrls(registryUrls: string[]): string[] {
});
}

export function extractPackageFile(content: string): PackageFileContent | null {
export function extractPackageFile(
content: string,
): PackageFileContent<PipRequirementsManagerData> | null {
logger.trace('pip_requirements.extractPackageFile()');

let registryUrls: string[] = [];
const additionalRegistryUrls: string[] = [];
const additionalRequirementsFiles: string[] = [];
const additionalConstraintsFiles: string[] = [];
content.split(newlineRegex).forEach((line) => {
if (line.startsWith('-i ') || line.startsWith('--index-url ')) {
registryUrls = [line.split(' ')[1]];
Expand All @@ -59,6 +64,10 @@ export function extractPackageFile(content: string): PackageFileContent | null {
.substring('--extra-index-url '.length)
.split(' ')[0];
additionalRegistryUrls.push(extraUrl);
} else if (line.startsWith('-r ')) {
additionalRequirementsFiles.push(line.split(' ')[1]);
} else if (line.startsWith('-c ')) {
additionalConstraintsFiles.push(line.split(' ')[1]);
}
});

Expand Down Expand Up @@ -132,5 +141,17 @@ export function extractPackageFile(content: string): PackageFileContent | null {
if (additionalRegistryUrls.length) {
res.additionalRegistryUrls = cleanRegistryUrls(additionalRegistryUrls);
}
if (additionalRequirementsFiles.length) {
if (!res.managerData) {
res.managerData = {};
}
res.managerData.requirementsFiles = additionalRequirementsFiles;
}
if (additionalConstraintsFiles.length) {
if (!res.managerData) {
res.managerData = {};
}
res.managerData.constraintsFiles = additionalConstraintsFiles;
}
return res;
}
4 changes: 4 additions & 0 deletions lib/modules/manager/pip_requirements/types.ts
@@ -0,0 +1,4 @@
export interface PipRequirementsManagerData {
requirementsFiles?: string[];
constraintsFiles?: string[];
}

0 comments on commit 06af3ee

Please sign in to comment.