-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
npm: Put the npm-debug logs in the cache folder, not cwd.
We also are storing a configurable number of previous log files. PR-URL: npm/npm#11439 Fixes: npm#5252 Fixes: npm#6350 Fixes: npm#1548 Fixes: npm#7614 Credit: @kenany Credit: @othiym23 Credit: @isaacs Credit: @iarna
- Loading branch information
Showing
6 changed files
with
161 additions
and
23 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
'use strict' | ||
var path = require('path') | ||
var test = require('tap').test | ||
var Tacks = require('tacks') | ||
var glob = require('glob') | ||
var asyncMap = require('slide').asyncMap | ||
var File = Tacks.File | ||
var Dir = Tacks.Dir | ||
var extend = Object.assign || require('util')._extend | ||
var common = require('../common-tap.js') | ||
|
||
var basedir = path.join(__dirname, path.basename(__filename, '.js')) | ||
var testdir = path.join(basedir, 'testdir') | ||
var cachedir = path.join(basedir, 'cache') | ||
var globaldir = path.join(basedir, 'global') | ||
var tmpdir = path.join(basedir, 'tmp') | ||
|
||
var conf = { | ||
cwd: testdir, | ||
env: extend(extend({}, process.env), { | ||
npm_config_cache: cachedir, | ||
npm_config_tmp: tmpdir, | ||
npm_config_prefix: globaldir, | ||
npm_config_registry: common.registry, | ||
npm_config_loglevel: 'warn' | ||
}) | ||
} | ||
|
||
var fixture = new Tacks(Dir({ | ||
cache: Dir(), | ||
global: Dir(), | ||
tmp: Dir(), | ||
testdir: Dir({ | ||
'package.json': File({ | ||
name: 'debug-logs', | ||
version: '1.0.0', | ||
scripts: { | ||
true: 'node -e "process.exit(0)"', | ||
false: 'node -e "process.exit(1)"' | ||
} | ||
}) | ||
}) | ||
})) | ||
|
||
function setup () { | ||
cleanup() | ||
fixture.create(basedir) | ||
} | ||
|
||
function cleanup () { | ||
fixture.remove(basedir) | ||
} | ||
|
||
test('setup', function (t) { | ||
setup() | ||
t.done() | ||
}) | ||
|
||
test('example', function (t) { | ||
common.npm(['run', 'false'], conf, function (err, code, stdout, stderr) { | ||
if (err) throw err | ||
t.is(code, 1, 'command errored') | ||
var matches = stderr.match(/Please include the following file with any support request:.*\nnpm ERR! {5,5}(.*)/) | ||
t.ok(matches, 'debug log mentioned in error message') | ||
if (matches) { | ||
var logfile = matches[1] | ||
t.matches(path.relative(cachedir, logfile), /^_logs/, 'debug log is inside the cache in _logs') | ||
} | ||
|
||
// we run a bunch concurrently, this will actually create > than our limit as the check is done | ||
// when the command starts | ||
var todo = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] | ||
asyncMap(todo, function (num, next) { | ||
common.npm(['run', '--logs-max=10', 'false'], conf, function (err, code) { | ||
if (err) throw err | ||
t.is(code, 1, 'run #' + num + ' errored as expected') | ||
next() | ||
}) | ||
}, function () { | ||
// now we do one more and that should clean up the list | ||
common.npm(['run', '--logs-max=10', 'false'], conf, function (err, code) { | ||
if (err) throw err | ||
t.is(code, 1, 'final run errored as expected') | ||
var files = glob.sync(path.join(cachedir, '_logs', '*')) | ||
t.is(files.length, 10, 'there should never be more than 10 log files') | ||
common.npm(['run', '--logs-max=5', 'true'], conf, function (err, code) { | ||
if (err) throw err | ||
t.is(code, 0, 'success run is ok') | ||
var files = glob.sync(path.join(cachedir, '_logs', '*')) | ||
t.is(files.length, 4, 'after success there should be logs-max - 1 log files') | ||
t.done() | ||
}) | ||
}) | ||
}) | ||
}) | ||
}) | ||
|
||
test('cleanup', function (t) { | ||
cleanup() | ||
t.done() | ||
}) | ||
|
This file contains 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