Skip to content

Commit f94c558

Browse files
committedMar 29, 2021
feat: include pins optionally
1 parent 66ca77a commit f94c558

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed
 

‎packages/snyk-fix/src/plugins/python/handlers/pip-requirements/update-dependencies/index.ts

+10-5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const debug = debugLib('snyk-fix:python:update-dependencies');
1919
export function updateDependencies(
2020
parsedRequirementsData: ParsedRequirements,
2121
updates: DependencyPins,
22+
directUpgradesOnly = false,
2223
): { updatedManifest: string; changes: FixChangesSummary[] } {
2324
const {
2425
requirements,
@@ -38,11 +39,15 @@ export function updateDependencies(
3839
);
3940
debug('Finished generating upgrades to apply');
4041

41-
const { pinnedRequirements, changes: pinChanges } = generatePins(
42-
requirements,
43-
updates,
44-
);
45-
debug('Finished generating pins to apply');
42+
let pinnedRequirements: string[] = [];
43+
let pinChanges: FixChangesSummary[] = [];
44+
if (!directUpgradesOnly) {
45+
({ pinnedRequirements, changes: pinChanges } = generatePins(
46+
requirements,
47+
updates,
48+
));
49+
debug('Finished generating pins to apply');
50+
}
4651

4752
let updatedManifest = [
4853
...applyUpgrades(requirements, updatedRequirements),

‎packages/snyk-fix/test/unit/plugins/python/handlers/update-dependencies/update-dependencies.spec.ts

+36
Original file line numberDiff line numberDiff line change
@@ -306,4 +306,40 @@ describe('remediation', () => {
306306
);
307307
}
308308
});
309+
it('skips pins if asked', () => {
310+
const upgrades = {
311+
'django@1.6.1': {
312+
upgradeTo: 'django@2.0.1',
313+
vulns: [],
314+
upgrades: [],
315+
isTransitive: false,
316+
},
317+
'transitive@1.0.0': {
318+
upgradeTo: 'transitive@1.1.1',
319+
vulns: [],
320+
upgrades: [],
321+
isTransitive: true,
322+
},
323+
};
324+
325+
const manifestContents = 'Django==1.6.1';
326+
327+
const expectedManifest =
328+
'Django==2.0.1\ntransitive>=1.1.1 # not directly required, pinned by Snyk to avoid a vulnerability';
329+
const directUpgradesOnly = false;
330+
const requirements = parseRequirementsFile(manifestContents);
331+
const result = updateDependencies(
332+
requirements,
333+
upgrades,
334+
directUpgradesOnly,
335+
);
336+
expect(result.changes.map((c) => c.userMessage).sort()).toEqual(
337+
[
338+
'Pinned transitive from 1.0.0 to 1.1.1',
339+
'Upgraded Django from 1.6.1 to 2.0.1',
340+
].sort(),
341+
);
342+
// Note no extra newline was added to the expected manifest
343+
expect(result.updatedManifest).toEqual(expectedManifest);
344+
});
309345
});

0 commit comments

Comments
 (0)
Please sign in to comment.