File tree 2 files changed +46
-5
lines changed
src/plugins/python/handlers/pip-requirements/update-dependencies
test/unit/plugins/python/handlers/update-dependencies
2 files changed +46
-5
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ const debug = debugLib('snyk-fix:python:update-dependencies');
19
19
export function updateDependencies (
20
20
parsedRequirementsData : ParsedRequirements ,
21
21
updates : DependencyPins ,
22
+ directUpgradesOnly = false ,
22
23
) : { updatedManifest : string ; changes : FixChangesSummary [ ] } {
23
24
const {
24
25
requirements,
@@ -38,11 +39,15 @@ export function updateDependencies(
38
39
) ;
39
40
debug ( 'Finished generating upgrades to apply' ) ;
40
41
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
+ }
46
51
47
52
let updatedManifest = [
48
53
...applyUpgrades ( requirements , updatedRequirements ) ,
Original file line number Diff line number Diff line change @@ -306,4 +306,40 @@ describe('remediation', () => {
306
306
) ;
307
307
}
308
308
} ) ;
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
+ } ) ;
309
345
} ) ;
You can’t perform that action at this time.
0 commit comments