Skip to content

Commit

Permalink
Allow cache add to accept multiple specs
Browse files Browse the repository at this point in the history
This is a backwards incompatible change to the undocumented
`cache add pkg version`, but

Motivations for this can be found here:
#2976 (comment)

Signed-off-by: Marco Sirabella <marco@sirabella.org>
  • Loading branch information
mjsir911 committed Apr 18, 2021
1 parent a4e7f4e commit c8292f4
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 26 deletions.
40 changes: 19 additions & 21 deletions lib/cache.js
Expand Up @@ -86,32 +86,30 @@ with --force.`)
return rimraf(cachePath)
}

// npm cache add <tarball-url>
// npm cache add <pkg> <ver>
// npm cache add <tarball>
// npm cache add <folder>
// npm cache add <tarball-url>...
// npm cache add <pkg> <ver>...
// npm cache add <tarball>...
// npm cache add <folder>...
async add (args) {
const usage = 'Usage:\n' +
' npm cache add <tarball-url>\n' +
' npm cache add <pkg>@<ver>\n' +
' npm cache add <tarball>\n' +
' npm cache add <folder>\n'
' npm cache add <tarball-url>...\n' +
' npm cache add <pkg>@<ver>...\n' +
' npm cache add <tarball>...\n' +
' npm cache add <folder>...\n'
log.silly('cache add', 'args', args)
const spec = args[0] && args[0] +
(args[1] === undefined || args[1] === null ? '' : `@${args[1]}`)

if (!spec)
if (args.length === 0)
throw Object.assign(new Error(usage), { code: 'EUSAGE' })

log.silly('cache add', 'spec', spec)

// we ask pacote for the thing, and then just throw the data
// away so that it tee-pipes it into the cache like it does
// for a normal request.
await pacote.tarball.stream(spec, stream => {
stream.resume()
return stream.promise()
}, this.npm.flatOptions)
return Promise.all(args.map(spec => {
log.silly('cache add', 'spec', spec)
// we ask pacote for the thing, and then just throw the data
// away so that it tee-pipes it into the cache like it does
// for a normal request.
return pacote.tarball.stream(spec, stream => {
stream.resume()
return stream.promise()
}, this.npm.flatOptions)
}))
}

async verify () {
Expand Down
11 changes: 6 additions & 5 deletions test/lib/cache.js
Expand Up @@ -134,20 +134,21 @@ t.test('cache add pkg only', t => {
})
})

t.test('cache add pkg w/ spec modifier', t => {
t.test('cache add multiple pkgs', t => {
t.teardown(() => {
logOutput = []
tarballStreamSpec = ''
tarballStreamOpts = {}
})

cache.exec(['add', 'mypkg', 'latest'], err => {
cache.exec(['add', 'mypkg', 'anotherpkg'], err => {
t.error(err)
t.strictSame(logOutput, [
['silly', 'cache add', 'args', ['mypkg', 'latest']],
['silly', 'cache add', 'spec', 'mypkg@latest'],
['silly', 'cache add', 'args', ['mypkg', 'anotherpkg']],
['silly', 'cache add', 'spec', 'mypkg'],
['silly', 'cache add', 'spec', 'anotherpkg'],
], 'logs correctly')
t.equal(tarballStreamSpec, 'mypkg@latest', 'passes the correct spec to pacote')
t.equal(tarballStreamSpec, 'anotherpkg', 'passes the correct spec to pacote')
t.same(tarballStreamOpts, npm.flatOptions, 'passes the correct options to pacote')
t.end()
})
Expand Down

0 comments on commit c8292f4

Please sign in to comment.