From 98940452018bbeb9c676fe3fc85e7375523e281e Mon Sep 17 00:00:00 2001 From: jacobtolar Date: Tue, 30 Apr 2019 13:27:46 -0500 Subject: [PATCH 1/3] Support listing out npm cache --- lib/cache.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/cache.js b/lib/cache.js index 00abd8c746ab7..7044712dcd730 100644 --- a/lib/cache.js +++ b/lib/cache.js @@ -52,6 +52,9 @@ function cache (args, cb) { case 'verify': case 'check': result = verify() break + case 'list': case 'ls': + result = list() + break default: return cb('Usage: ' + cache.usage) } if (!result || !result.then) { @@ -135,3 +138,22 @@ function unpack (pkg, ver, unpackTarget, dmode, fmode, uid, gid) { return pacote.extract(npa.resolve(pkg, ver), unpackTarget, opts) }) } + +cache.list = list +function list () { + const cache = path.join(npm.config.get('cache'), '_cacache') + let prefix = cache + if (prefix.indexOf(process.env.HOME) === 0) { + prefix = '~' + prefix.substr(process.env.HOME.length) + } + + return cacache.ls(cache).then((data) => { + for (var key in data) { + output(key) + output(' url = ' + data[key].metadata.url) + output(' path = ' + data[key].path) + output(' size = ' + data[key].size) + output(' time = ' + data[key].time) + } + }) +} From 69759a1c82fd7d5729b6966132558f2efb6bc632 Mon Sep 17 00:00:00 2001 From: Jacob Tolar Date: Tue, 2 Jul 2019 13:52:46 -0500 Subject: [PATCH 2/3] address review comments --- lib/cache.js | 55 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/lib/cache.js b/lib/cache.js index 7044712dcd730..888fd1e59acb6 100644 --- a/lib/cache.js +++ b/lib/cache.js @@ -22,18 +22,21 @@ cache.usage = 'npm cache add ' + '\nnpm cache add ' + '\nnpm cache add @' + '\nnpm cache clean' + + '\nnpm cache list [--json]' + '\nnpm cache verify' cache.completion = function (opts, cb) { var argv = opts.conf.argv.remain if (argv.length === 2) { - return cb(null, ['add', 'clean']) + return cb(null, ['add', 'clean', 'list', 'verify']) } // TODO - eventually... switch (argv[2]) { case 'clean': case 'add': + case 'list': + case 'verify': return cb(null, []) } } @@ -53,6 +56,7 @@ function cache (args, cb) { result = verify() break case 'list': case 'ls': + result = list() break default: return cb('Usage: ' + cache.usage) @@ -141,19 +145,46 @@ function unpack (pkg, ver, unpackTarget, dmode, fmode, uid, gid) { cache.list = list function list () { + const json = npm.config.get('json') const cache = path.join(npm.config.get('cache'), '_cacache') - let prefix = cache - if (prefix.indexOf(process.env.HOME) === 0) { - prefix = '~' + prefix.substr(process.env.HOME.length) + let writer + if (json) { + writer = { + item: undefined, + handleElement: function (item) { + if (this.item === undefined) { + output('[') + } else { + output(' ' + JSON.stringify(this.item) + ',') + } + this.item = item + }, + done: function () { + if (this.item === undefined) { + output(JSON.stringify([])) + } else { + output(' ' + JSON.stringify(this.item)) + output(']') + } + } + } + } else { + writer = { + handleElement: function (item) { + output(item.key) + output(' url = ' + (item.metadata === undefined ? 'undefined' : item.metadata.url)) + output(' path = ' + item.path) + output(' size = ' + item.size) + output(' time = ' + item.time) + }, + done: () => {} + } } - return cacache.ls(cache).then((data) => { - for (var key in data) { - output(key) - output(' url = ' + data[key].metadata.url) - output(' path = ' + data[key].path) - output(' size = ' + data[key].size) - output(' time = ' + data[key].time) - } + return new BB((resolve, reject) => { + const stream = cacache.ls.stream(cache) + stream.on('data', (item) => writer.handleElement(item)) + stream.on('error', error => { reject(error) }) + stream.on('end', () => { writer.done(); resolve('done') }) }) } From 1b25c4cd7f3d791b94cb336251eb0c5bb120c717 Mon Sep 17 00:00:00 2001 From: Jacob Tolar Date: Tue, 2 Jul 2019 13:57:35 -0500 Subject: [PATCH 3/3] extra whitespace --- lib/cache.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/cache.js b/lib/cache.js index 888fd1e59acb6..6817ad525e00d 100644 --- a/lib/cache.js +++ b/lib/cache.js @@ -56,7 +56,6 @@ function cache (args, cb) { result = verify() break case 'list': case 'ls': - result = list() break default: return cb('Usage: ' + cache.usage)