fix: keep the requested version when retrying install after EACCES - #3379
Open
arpitjain099 wants to merge 1 commit into
Open
arpitjain099 wants to merge 1 commit into
arpitjain099 wants to merge 1 commit into
Conversation
Signed-off-by: Arpit Jain <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of change
eaccesFallbackretries the install withgyp.commands.install([noretry].concat(argv)), putting the sentinel first.processReleasereads the version fromargv[0], so on the retrysemver.valid('--node_gyp_internal_noretry')is null and the requested version falls through toprocess.version.The result is that
node-gyp install <version>under EACCES quietly installs headers for the running node instead, and exits 0. Against a local dist server:With the sentinel moved to the end the same command fetches
v99.0.0.It is narrow:
--targetandnpm_config_targetgo throughgyp.opts.targetand are unaffected, so it only bites the positional argument form.The existing
EACCES retry oncecase callsinstall([])and asserts on the stat count, so it cannot see this. The new case records the argv of each retry and checks the version is still first, which fails on main with'--node_gyp_internal_noretry' == '99.0.0'.npm testpasses, 115 tests, and eslint is clean on both files.