Skip to content

Commit

Permalink
publish: adapt config for publish RegClient (#16762)
Browse files Browse the repository at this point in the history
Fixes: #16746
PR-URL: npm/npm#16762
Credit: @zkat
  • Loading branch information
zkat committed May 31, 2017
1 parent 9aac984 commit e61e68d
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 53 deletions.
29 changes: 29 additions & 0 deletions lib/config/reg-client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
'use strict'

module.exports = regClientConfig
function regClientConfig (npm, log, config) {
return {
proxy: {
http: config.get('proxy'),
https: config.get('https-proxy'),
localAddress: config.get('local-address')
},
ssl: {
certificate: config.get('cert'),
key: config.get('key'),
ca: config.get('ca'),
strict: config.get('strict-ssl')
},
retry: {
retries: config.get('fetch-retries'),
factor: config.get('fetch-retry-factor'),
minTimeout: config.get('fetch-retry-mintimeout'),
maxTimeout: config.get('fetch-retry-maxtimeout')
},
userAgent: config.get('user-agent'),
log: log,
defaultTag: config.get('tag'),
maxSockets: config.get('maxsockets'),
scope: npm.projectScope
}
}
30 changes: 2 additions & 28 deletions lib/npm.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
var rimraf = require('rimraf')
var lazyProperty = require('lazy-property')
var parseJSON = require('./utils/parse-json.js')
var clientConfig = require('./config/reg-client.js')
var aliases = require('./config/cmd-list').aliases
var cmdList = require('./config/cmd-list').cmdList
var plumbing = require('./config/cmd-list').plumbing
Expand Down Expand Up @@ -344,7 +345,7 @@
lazyProperty(npm, 'registry', function () {
registryLoaded = true
var RegClient = require('npm-registry-client')
var registry = new RegClient(adaptClientConfig(npm.config))
var registry = new RegClient(clientConfig(npm, log, npm.config))
registry.version = npm.version
registry.refer = registryRefer
return registry
Expand Down Expand Up @@ -467,31 +468,4 @@
return ''
}
}

function adaptClientConfig (config) {
return {
proxy: {
http: config.get('proxy'),
https: config.get('https-proxy'),
localAddress: config.get('local-address')
},
ssl: {
certificate: config.get('cert'),
key: config.get('key'),
ca: config.get('ca'),
strict: config.get('strict-ssl')
},
retry: {
retries: config.get('fetch-retries'),
factor: config.get('fetch-retry-factor'),
minTimeout: config.get('fetch-retry-mintimeout'),
maxTimeout: config.get('fetch-retry-maxtimeout')
},
userAgent: config.get('user-agent'),
log: log,
defaultTag: config.get('tag'),
maxSockets: config.get('maxsockets'),
scope: npm.projectScope
}
}
})()
16 changes: 10 additions & 6 deletions lib/utils/get-publish-config.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
var Conf = require('../config/core.js').Conf
var RegClient = require('npm-registry-client')
var log = require('npmlog')
'use strict'

const clientConfig = require('../config/reg-client.js')
const Conf = require('../config/core.js').Conf
const log = require('npmlog')
const npm = require('../npm.js')
const RegClient = require('npm-registry-client')

module.exports = getPublishConfig

function getPublishConfig (publishConfig, defaultConfig, defaultClient) {
var config = defaultConfig
var client = defaultClient
let config = defaultConfig
let client = defaultClient
log.verbose('getPublishConfig', publishConfig)
if (publishConfig) {
config = new Conf(defaultConfig)
Expand All @@ -18,7 +22,7 @@ function getPublishConfig (publishConfig, defaultConfig, defaultClient) {
s[k] = publishConfig[k]
return s
}, {}))
client = new RegClient(config)
client = new RegClient(clientConfig(npm, log, config))
}

return { config: config, client: client }
Expand Down
45 changes: 26 additions & 19 deletions test/tap/publish-config.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,43 @@
var common = require('../common-tap.js')
var test = require('tap').test
var fs = require('fs')
var osenv = require('osenv')
var pkg = process.env.npm_config_tmp || '/tmp'
pkg += '/npm-test-publish-config'
'use strict'

const common = require('../common-tap.js')
const test = require('tap').test
const fs = require('fs')
const osenv = require('osenv')
const pkg = `${process.env.npm_config_tmp || '/tmp'}/npm-test-publish-config`

require('mkdirp').sync(pkg)

fs.writeFileSync(pkg + '/package.json', JSON.stringify({
name: 'npm-test-publish-config',
version: '1.2.3',
publishConfig: { registry: common.registry }
publishConfig: {
registry: common.registry
}
}), 'utf8')

fs.writeFileSync(pkg + '/fixture_npmrc',
'//localhost:1337/:email = [email protected]\n' +
'//localhost:1337/:username = fancy\n' +
'//localhost:1337/:_password = ' + new Buffer('feast').toString('base64') + '\n' +
'registry = http://localhost:1337/')
'//localhost:1337/:_password = ' + new Buffer('feast').toString('base64'))

test(function (t) {
var child
t.plan(4)
let child
t.plan(5)
require('http').createServer(function (req, res) {
t.pass('got request on the fakey fake registry')
this.close()
res.statusCode = 500
res.end(JSON.stringify({
error: 'sshhh. naptime nao. \\^O^/ <(YAWWWWN!)'
}))
child.kill('SIGINT')
}).listen(common.port, function () {
let body = ''
req.on('data', (d) => { body += d })
req.on('end', () => {
this.close()
res.statusCode = 500
res.end(JSON.stringify({
error: 'sshhh. naptime nao. \\^O^/ <(YAWWWWN!)'
}))
t.match(body, /"beta"/, 'got expected tag')
child.kill('SIGINT')
})
}).listen(common.port, () => {
t.pass('server is listening')

// don't much care about listening to the child's results
Expand All @@ -40,7 +47,7 @@ test(function (t) {
// itself functions normally.
//
// Make sure that we don't sit around waiting for lock files
child = common.npm(['publish', '--userconfig=' + pkg + '/fixture_npmrc'], {
child = common.npm(['publish', '--userconfig=' + pkg + '/fixture_npmrc', '--tag=beta'], {
cwd: pkg,
stdio: 'inherit',
env: {
Expand Down

0 comments on commit e61e68d

Please sign in to comment.