Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGar <gar+gh@danger.computer>2022-02-24 21:29:16 +0300
committerRuy Adorno <ruyadorno@hotmail.com>2022-03-10 18:40:11 +0300
commit55ab38c5337de76b739c4f0cdfb8932dc5420ce4 (patch)
treefef3864c7934135bdbd88d13b6d3f28917c557f9 /lib/commands
parent1c182e11d524294d85348a3c2566f266bd281c00 (diff)
fix(doctor): allow for missing local bin and node_modules
Diffstat (limited to 'lib/commands')
-rw-r--r--lib/commands/doctor.js42
1 files changed, 22 insertions, 20 deletions
diff --git a/lib/commands/doctor.js b/lib/commands/doctor.js
index 552fe5d51..630150c08 100644
--- a/lib/commands/doctor.js
+++ b/lib/commands/doctor.js
@@ -10,7 +10,6 @@ const semver = require('semver')
const { promisify } = require('util')
const log = require('../utils/log-shim.js')
const ansiTrim = require('../utils/ansi-trim.js')
-const isWindows = require('../utils/is-windows.js')
const ping = require('../utils/ping.js')
const {
registry: { default: defaultRegistry },
@@ -55,32 +54,36 @@ class Doctor extends BaseCommand {
['node -v', 'getLatestNodejsVersion', []],
['npm config get registry', 'checkNpmRegistry', []],
['which git', 'getGitPath', []],
- ...(isWindows
+ ...(process.platform === 'win32'
? []
: [
- ['Perms check on cached files', 'checkFilesPermission', [this.npm.cache, true, R_OK]],
[
+ 'Perms check on cached files',
+ 'checkFilesPermission',
+ [this.npm.cache, true, R_OK],
+ ], [
'Perms check on local node_modules',
'checkFilesPermission',
- [this.npm.localDir, true],
- ],
- [
+ [this.npm.localDir, true, R_OK | W_OK, true],
+ ], [
'Perms check on global node_modules',
'checkFilesPermission',
- [this.npm.globalDir, false],
- ],
- [
+ [this.npm.globalDir, false, R_OK],
+ ], [
'Perms check on local bin folder',
'checkFilesPermission',
- [this.npm.localBin, false, R_OK | W_OK | X_OK],
- ],
- [
+ [this.npm.localBin, false, R_OK | W_OK | X_OK, true],
+ ], [
'Perms check on global bin folder',
'checkFilesPermission',
[this.npm.globalBin, false, X_OK],
],
]),
- ['Verify cache contents', 'verifyCachedFiles', [this.npm.flatOptions.cache]],
+ [
+ 'Verify cache contents',
+ 'verifyCachedFiles',
+ [this.npm.flatOptions.cache],
+ ],
// TODO:
// - ensure arborist.loadActual() runs without errors and no invalid edges
// - ensure package-lock.json matches loadActual()
@@ -202,11 +205,7 @@ class Doctor extends BaseCommand {
}
}
- async checkFilesPermission (root, shouldOwn, mask = null) {
- if (mask === null) {
- mask = shouldOwn ? R_OK | W_OK : R_OK
- }
-
+ async checkFilesPermission (root, shouldOwn, mask, missingOk) {
let ok = true
const tracker = log.newItem(root, 1)
@@ -218,8 +217,11 @@ class Doctor extends BaseCommand {
for (const f of files) {
tracker.silly('checkFilesPermission', f.substr(root.length + 1))
const st = await lstat(f).catch(er => {
- ok = false
- tracker.warn('checkFilesPermission', 'error getting info for ' + f)
+ // if it can't be missing, or if it can and the error wasn't that it was missing
+ if (!missingOk || er.code !== 'ENOENT') {
+ ok = false
+ tracker.warn('checkFilesPermission', 'error getting info for ' + f)
+ }
})
tracker.completeWork(1)