Skip to content

Commit

Permalink
fix(arborist): update save exact
Browse files Browse the repository at this point in the history
When updating dependencies skip any unchanged node so that we avoid
overwriting existent specs, such as exact version that should not
change between installs.

Fixes: #4329
  • Loading branch information
ruyadorno committed Jan 26, 2022
1 parent 8558527 commit f3d72e6
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 0 deletions.
2 changes: 2 additions & 0 deletions workspaces/arborist/lib/arborist/reify.js
Original file line number Diff line number Diff line change
Expand Up @@ -1284,6 +1284,8 @@ module.exports = cls => class Reifier extends cls {
const filterDirectDependencies = node =>
!node.isRoot && node.resolveParent.isRoot
&& (!names || names.includes(node.name))
&& !this.diff.unchanged.includes(node) // skip unchanged deps

const directDeps = this.idealTree.inventory
.filter(filterDirectDependencies)

Expand Down
11 changes: 11 additions & 0 deletions workspaces/arborist/test/arborist/reify.js
Original file line number Diff line number Diff line change
Expand Up @@ -2572,5 +2572,16 @@ t.test('save package.json on update', t => {
)
})

t.test('should preserve exact ranges', async t => {
const path = fixture(t, 'update-exact-version')

await reify(path, { update: true, save: true })

t.equal(
require(resolve(path, 'package.json')).dependencies.abbrev,
'1.0.4',
'should save no top level dep update to root package.json'
)
})
t.end()
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// generated from test/fixtures/update-exact-version
module.exports = t => {
const path = t.testdir({
"node_modules": {
"abbrev": {
"package.json": JSON.stringify({
"name": "abbrev",
"version": "1.0.4",
"description": "Like ruby's abbrev module, but in js",
"author": "Isaac Z. Schlueter <i@izs.me>",
"main": "./lib/abbrev.js",
"scripts": {
"test": "node lib/abbrev.js"
},
"repository": "http://github.com/isaacs/abbrev-js",
"license": {
"type": "MIT",
"url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE"
}
})
}
},
"package-lock.json": JSON.stringify({
"name": "update-exact-version",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"dependencies": {
"abbrev": "1.0.4"
}
},
"node_modules/abbrev": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz",
"integrity": "sha1-vVWuXkE7oXIu5Mq6H26hBBSlns0="
}
},
"dependencies": {
"abbrev": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz",
"integrity": "sha1-vVWuXkE7oXIu5Mq6H26hBBSlns0="
}
}
}),
"package.json": JSON.stringify({
"dependencies": {
"abbrev": "1.0.4"
}
})
})
return path
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"dependencies": {
"abbrev": "1.0.4"
}
}

0 comments on commit f3d72e6

Please sign in to comment.