| @@ -0,0 +1,25 @@ | ||
| var Conf = require('../config/core.js').Conf | ||
| var CachingRegClient = require('../cache/caching-client.js') | ||
| var log = require('npmlog') | ||
|
|
||
| module.exports = getPublishConfig | ||
|
|
||
| function getPublishConfig (publishConfig, defaultConfig, defaultClient) { | ||
| var config = defaultConfig | ||
| var client = defaultClient | ||
| log.verbose('getPublishConfig', publishConfig) | ||
| if (publishConfig) { | ||
| config = new Conf(defaultConfig) | ||
| config.save = defaultConfig.save.bind(defaultConfig) | ||
|
|
||
| // don't modify the actual publishConfig object, in case we have | ||
| // to set a login token or some other data. | ||
| config.unshift(Object.keys(publishConfig).reduce(function (s, k) { | ||
| s[k] = publishConfig[k] | ||
| return s | ||
| }, {})) | ||
| client = new CachingRegClient(config) | ||
| } | ||
|
|
||
| return { config: config, client: client } | ||
| } |
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm\fR \- a JavaScript package manager | ||
| .P | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-ACCESS" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-access\fR \- Set access level on published packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-ADDUSER" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-adduser\fR \- Add a registry user account | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-BIN" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-bin\fR \- Display npm bin folder | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-BUGS" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-bugs\fR \- Bugs for a package in a web browser maybe | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-BUNDLE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-bundle\fR \- REMOVED | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-CACHE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-cache\fR \- Manipulates packages cache | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-COMPLETION" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-completion\fR \- Tab Completion for npm | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-CONFIG" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-config\fR \- Manage the npm configuration files | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DEDUPE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-dedupe\fR \- Reduce duplication | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DEPRECATE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-deprecate\fR \- Deprecate a version of a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DIST\-TAG" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-dist-tag\fR \- Modify package distribution tags | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DOCS" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-docs\fR \- Docs for a package in a web browser maybe | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-EDIT" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-edit\fR \- Edit an installed package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-EXPLORE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-explore\fR \- Browse an installed package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-HELP\-SEARCH" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-help-search\fR \- Search npm help documentation | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-HELP" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-help\fR \- Get help on npm | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-INIT" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-init\fR \- Interactively create a package\.json file | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-INSTALL" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-install\fR \- Install a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-LINK" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-link\fR \- Symlink a package folder | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-LOGOUT" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-logout\fR \- Log out of the registry | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-OUTDATED" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-outdated\fR \- Check for outdated packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-OWNER" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-owner\fR \- Manage package owners | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PACK" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-pack\fR \- Create a tarball from a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PREFIX" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-prefix\fR \- Display prefix | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PRUNE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-prune\fR \- Remove extraneous packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PUBLISH" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-publish\fR \- Publish a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-REBUILD" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-rebuild\fR \- Rebuild a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-REPO" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-repo\fR \- Open package repository page in the browser | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-RESTART" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-restart\fR \- Restart a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-RM" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-rm\fR \- Remove a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-ROOT" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-root\fR \- Display npm root | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-RUN\-SCRIPT" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-run-script\fR \- Run arbitrary package scripts | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-SEARCH" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-search\fR \- Search for packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-STAR" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-star\fR \- Mark your favorite packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-STARS" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-stars\fR \- View packages marked as favorites | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-START" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-start\fR \- Start a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-STOP" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-stop\fR \- Stop a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-TAG" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-tag\fR \- Tag a published version | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-TEST" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-test\fR \- Test a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-RM" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-rm\fR \- Remove a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-UNPUBLISH" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-unpublish\fR \- Remove a package from the registry | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-UPDATE" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-update\fR \- Update a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-VERSION" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-version\fR \- Bump a package version | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-VIEW" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-view\fR \- View registry info | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-WHOAMI" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-whoami\fR \- Display npm username | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-BIN" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-bin\fR \- Display npm bin folder | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-BUGS" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-bugs\fR \- Bugs for a package in a web browser maybe | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-CACHE" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-cache\fR \- manage the npm cache programmatically | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-COMMANDS" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-commands\fR \- npm commands | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-CONFIG" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-config\fR \- Manage the npm configuration files | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DEPRECATE" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-deprecate\fR \- Deprecate a version of a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DOCS" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-docs\fR \- Docs for a package in a web browser maybe | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-EDIT" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-edit\fR \- Edit an installed package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-EXPLORE" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-explore\fR \- Browse an installed package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-HELP\-SEARCH" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-help-search\fR \- Search the help pages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM" "" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm\fR | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-INSTALL" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-install\fR \- install a package programmatically | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-LINK" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-link\fR \- Symlink a package folder | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-LOAD" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-load\fR \- Load config settings | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-LS" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-ls\fR \- List installed packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-OUTDATED" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-outdated\fR \- Check for outdated packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-OWNER" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-owner\fR \- Manage package owners | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PACK" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-pack\fR \- Create a tarball from a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PREFIX" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-prefix\fR \- Display prefix | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PRUNE" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-prune\fR \- Remove extraneous packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-PUBLISH" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-publish\fR \- Publish a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-REBUILD" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-rebuild\fR \- Rebuild a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-REPO" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-repo\fR \- Open package repository page in the browser | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-RESTART" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-restart\fR \- Restart a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-ROOT" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-root\fR \- Display npm root | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-RUN\-SCRIPT" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-run-script\fR \- Run arbitrary package scripts | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-SEARCH" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-search\fR \- Search for packages | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-SHRINKWRAP" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-shrinkwrap\fR \- programmatically generate package shrinkwrap file | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-START" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-start\fR \- Start a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-STOP" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-stop\fR \- Stop a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-TAG" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-tag\fR \- Tag a published version | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-TEST" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-test\fR \- Test a package | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-UNINSTALL" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-uninstall\fR \- uninstall a package programmatically | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-UNPUBLISH" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-unpublish\fR \- Remove a package from the registry | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-VERSION" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-version\fR \- Bump a package version | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-VIEW" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-view\fR \- View registry info | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-WHOAMI" "3" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-whoami\fR \- Display npm username | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-FOLDERS" "5" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-folders\fR \- Folder Structures Used by npm | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-FOLDERS" "5" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-folders\fR \- Folder Structures Used by npm | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-CODING\-STYLE" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-coding-style\fR \- npm's "funny" coding style | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DEVELOPERS" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-developers\fR \- Developer Guide | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-DISPUTES" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-disputes\fR \- Handling Module Name Disputes | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-FAQ" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-faq\fR \- Frequently Asked Questions | ||
| .SH Where can I find these docs in HTML? | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-INDEX" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-index\fR \- Index of all npm documentation | ||
| .SS npm help README | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-REGISTRY" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-registry\fR \- The JavaScript Package Registry | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-SCRIPTS" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-scripts\fR \- How npm handles the "scripts" field | ||
| .SH DESCRIPTION | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "NPM\-REMOVAL" "1" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBnpm-removal\fR \- Cleaning the Slate | ||
| .SH SYNOPSIS | ||
| @@ -1,4 +1,4 @@ | ||
| .TH "SEMVER" "7" "May 2015" "" "" | ||
| .SH "NAME" | ||
| \fBsemver\fR \- The semantic versioner for npm | ||
| .SH Usage | ||
| @@ -0,0 +1,17 @@ | ||
| var path = require("path") | ||
| var test = require("tap").test | ||
| var common = require("../common-tap.js") | ||
| var opts = { cwd: __dirname } | ||
| var binDir = "../../node_modules/.bin" | ||
| var fixture = path.resolve(binDir) | ||
|
|
||
| test('npm bin', function (t) { | ||
| common.npm(["bin"], opts, function (err, code, stdout, stderr) { | ||
| t.ifError(err, "bin ran without issue") | ||
| t.notOk(stderr, "should have no stderr") | ||
| t.equal(code, 0, "exit ok") | ||
| var res = path.resolve(stdout) | ||
| t.equal(res, fixture + "\n") | ||
| t.end() | ||
| }) | ||
| }) |
| @@ -0,0 +1,212 @@ | ||
| var execFile = require('child_process').execFile | ||
| var path = require('path') | ||
| var zlib = require('zlib') | ||
|
|
||
| var asyncMap = require('slide').asyncMap | ||
| var deepEqual = require('deep-equal') | ||
| var fs = require('graceful-fs') | ||
| var mkdirp = require('mkdirp') | ||
| var once = require('once') | ||
| var requireInject = require('require-inject') | ||
| var rimraf = require('rimraf') | ||
| var tar = require('tar') | ||
| var test = require('tap').test | ||
| var tmpdir = require('osenv').tmpdir | ||
| var which = require('which') | ||
|
|
||
| var wd = path.resolve(tmpdir(), 'git-races') | ||
| var fixtures = path.resolve(__dirname, '../fixtures') | ||
| var testcase = 'github-com-BryanDonovan-npm-git-test' | ||
| var testcase_git = path.resolve(wd, testcase + '.git') | ||
| var testcase_path = path.resolve(wd, testcase) | ||
| var testcase_tgz = path.resolve(fixtures, testcase + '.git.tar.gz') | ||
|
|
||
| var testtarballs = [] | ||
| var testrepos = {} | ||
| var testurls = {} | ||
|
|
||
| /* | ||
| This test is specifically for #7202, where the bug was if you tried installing multiple git urls that | ||
| pointed at the same repo but had different comittishes, you'd sometimes get the wrong version. | ||
| The test cases, provided by @BryanDonovan, have a dependency tree like this: | ||
|
|
||
| top | ||
| bar#4.0.0 | ||
| buzz#3.0.0 | ||
| foo#3.0.0 | ||
| buzz#3.0.0 | ||
| foo#4.0.0 | ||
| buzz#2.0.0 | ||
|
|
||
| But what would happen is that buzz#2.0.0 would end up installed under bar#4.0.0. | ||
|
|
||
| bar#4.0.0 shouldn't have gotten its own copy if buzz, and if it did, it shouldn've been buzz#3.0.0 | ||
| */ | ||
|
|
||
| ;['bar', 'foo', 'buzz'].forEach(function (name) { | ||
| var mockurl = 'ssh://git@github.com/BryanDonovan/dummy-npm-' + name + '.git' | ||
| var realrepo = path.resolve(wd, 'github-com-BryanDonovan-dummy-npm-' + name + '.git') | ||
| var tgz = path.resolve(fixtures, 'github-com-BryanDonovan-dummy-npm-' + name + '.git.tar.gz') | ||
|
|
||
| testrepos[mockurl] = realrepo | ||
| testtarballs.push(tgz) | ||
| }) | ||
|
|
||
| function cleanup () { | ||
| process.chdir(tmpdir()) | ||
| rimraf.sync(wd) | ||
| } | ||
|
|
||
| var npm = requireInject.installGlobally('../../lib/npm.js', { | ||
| 'child_process': { | ||
| 'execFile': function (cmd, args, options, cb) { | ||
| // If it's a clone we swap any requests for any of the urls we're mocking | ||
| // with the path to the bare repo | ||
| if (args[0] === 'clone') { | ||
| var m2 = args.length - 2 | ||
| var m1 = args.length - 1 | ||
| if (testrepos[args[m2]]) { | ||
| testurls[args[m1]] = args[m2] | ||
| args[m2] = testrepos[args[m2]] | ||
| } | ||
| execFile(cmd, args, options, cb) | ||
| // here, we intercept npm validating the remote origin url on one of the | ||
| // clones we've done previously and return the original url that was requested | ||
| } else if (args[0] === 'config' && args[1] === '--get' && args[2] === 'remote.origin.url') { | ||
| process.nextTick(function () { | ||
| cb(null, testurls[options.cwd], '') | ||
| }) | ||
| } else { | ||
| execFile(cmd, args, options, cb) | ||
| } | ||
| } | ||
| } | ||
| }) | ||
|
|
||
| function extract (tarball, target, cb) { | ||
| cb = once(cb) | ||
| fs.createReadStream(tarball).on('error', function (er) { cb(er) }) | ||
| .pipe(zlib.createGunzip()).on('error', function (er) { cb(er) }) | ||
| .pipe(tar.Extract({path: target})).on('error', function (er) { cb(er) }) | ||
| .on('end', function () { | ||
| cb() | ||
| }) | ||
| } | ||
|
|
||
| // Copied from lib/utils/git, because we need to use | ||
| // it before calling npm.load and lib/utils/git uses npm.js | ||
| // which doesn't allow that. =( =( | ||
|
|
||
| function prefixGitArgs () { | ||
| return process.platform === 'win32' ? ['-c', 'core.longpaths=true'] : [] | ||
| } | ||
|
|
||
| var gitcmd | ||
|
|
||
| function execGit (args, options, cb) { | ||
| var fullArgs = prefixGitArgs().concat(args || []) | ||
| return execFile(gitcmd, fullArgs, options, cb) | ||
| } | ||
|
|
||
| function gitWhichAndExec (args, options, cb) { | ||
| if (gitcmd) return execGit(args, options, cb) | ||
|
|
||
| which('git', function (err, pathtogit) { | ||
| if (err) { | ||
| err.code = 'ENOGIT' | ||
| return cb(err) | ||
| } | ||
| gitcmd = pathtogit | ||
|
|
||
| execGit(args, options, cb) | ||
| }) | ||
| } | ||
|
|
||
| function andClone (gitdir, repodir, cb) { | ||
| return function (er) { | ||
| if (er) return cb(er) | ||
| gitWhichAndExec(['clone', gitdir, repodir], {}, cb) | ||
| } | ||
| } | ||
|
|
||
| function setup (cb) { | ||
| cleanup() | ||
| mkdirp.sync(wd) | ||
|
|
||
| extract(testcase_tgz, wd, andClone(testcase_git, testcase_path, andExtractPackages)) | ||
|
|
||
| function andExtractPackages (er) { | ||
| if (er) return cb(er) | ||
| asyncMap(testtarballs, function (tgz, done) { | ||
| extract(tgz, wd, done) | ||
| }, andChdir) | ||
| } | ||
| function andChdir (er) { | ||
| if (er) return cb(er) | ||
| process.chdir(testcase_path) | ||
| andLoadNpm() | ||
| } | ||
| function andLoadNpm () { | ||
| var opts = { | ||
| cache: path.resolve(wd, 'cache') | ||
| } | ||
| npm.load(opts, cb) | ||
| } | ||
| } | ||
|
|
||
| test('setup', function (t) { | ||
| setup(function (er) { | ||
| t.ifError(er, 'setup ran OK') | ||
| t.end() | ||
| }) | ||
| }) | ||
|
|
||
| // there are two (sic) valid trees that can result we don't care which one we | ||
| // get in npm@2 | ||
| var oneTree = [ | ||
| 'npm-git-test@1.0.0', [ | ||
| ['dummy-npm-bar@4.0.0', [ | ||
| ['dummy-npm-foo@3.0.0', []] | ||
| ]], | ||
| ['dummy-npm-buzz@3.0.0', []], | ||
| ['dummy-npm-foo@4.0.0', [ | ||
| ['dummy-npm-buzz@2.0.0', []] | ||
| ]] | ||
| ] | ||
| ] | ||
| var otherTree = [ | ||
| 'npm-git-test@1.0.0', [ | ||
| ['dummy-npm-bar@4.0.0', [ | ||
| ['dummy-npm-buzz@3.0.0', []], | ||
| ['dummy-npm-foo@3.0.0', []] | ||
| ]], | ||
| ['dummy-npm-buzz@3.0.0', []], | ||
| ['dummy-npm-foo@4.0.0', [ | ||
| ['dummy-npm-buzz@2.0.0', []] | ||
| ]] | ||
| ] | ||
| ] | ||
|
|
||
| test('correct versions are installed for git dependency', function (t) { | ||
| t.plan(4) | ||
| t.comment('test for https://github.com/npm/npm/issues/7202') | ||
| npm.commands.install([], function (er) { | ||
| t.ifError(er, 'installed OK') | ||
| npm.commands.ls([], true, function (er, result) { | ||
| t.ifError(er, 'ls OK') | ||
| var simplified = toSimple(result) | ||
| t.ok( | ||
| deepEqual(simplified, oneTree) || deepEqual(simplified, otherTree), | ||
| 'install tree is correct' | ||
| ) | ||
| }) | ||
| }) | ||
| }) | ||
|
|
||
| function toSimple (tree) { | ||
| var deps = [] | ||
| Object.keys(tree.dependencies || {}).forEach(function (dep) { | ||
| deps.push(toSimple(tree.dependencies[dep])) | ||
| }) | ||
| return [ tree['name'] + '@' + tree['version'], deps ] | ||
| } |
| @@ -0,0 +1,109 @@ | ||
| var fs = require('fs') | ||
| var path = require('path') | ||
|
|
||
| var mkdirp = require('mkdirp') | ||
| var mr = require('npm-registry-mock') | ||
| var osenv = require('osenv') | ||
| var rimraf = require('rimraf') | ||
| var test = require('tap').test | ||
|
|
||
| var common = require('../common-tap.js') | ||
| var server | ||
|
|
||
| var pkg = path.join(__dirname, 'install-noargs-dev') | ||
|
|
||
| var EXEC_OPTS = { cwd: pkg } | ||
|
|
||
| var PACKAGE_JSON1 = { | ||
| name: 'install-noargs-dev', | ||
| version: '0.0.1', | ||
| devDependencies: { | ||
| 'underscore': '1.3.1' | ||
| } | ||
| } | ||
|
|
||
| var PACKAGE_JSON2 = { | ||
| name: 'install-noargs-dev', | ||
| version: '0.0.2', | ||
| devDependencies: { | ||
| 'underscore': '1.5.1' | ||
| } | ||
| } | ||
|
|
||
| test('setup', function (t) { | ||
| setup() | ||
| mr({ port: common.port }, function (er, s) { | ||
| t.ifError(er, 'started mock registry') | ||
| server = s | ||
| t.end() | ||
| }) | ||
| }) | ||
|
|
||
| test('install noargs installs devDependencies', function (t) { | ||
| common.npm( | ||
| [ | ||
| '--registry', common.registry, | ||
| '--loglevel', 'silent', | ||
| 'install' | ||
| ], | ||
| EXEC_OPTS, | ||
| function (err, code) { | ||
| t.ifError(err, 'npm install ran without issue') | ||
| t.notOk(code, 'npm install exited with code 0') | ||
|
|
||
| var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') | ||
| var pkgJson = JSON.parse(fs.readFileSync(p)) | ||
|
|
||
| t.equal(pkgJson.version, '1.3.1') | ||
| t.end() | ||
| } | ||
| ) | ||
| }) | ||
|
|
||
| test('install noargs installs updated devDependencies', function (t) { | ||
| fs.writeFileSync( | ||
| path.join(pkg, 'package.json'), | ||
| JSON.stringify(PACKAGE_JSON2, null, 2) | ||
| ) | ||
|
|
||
| common.npm( | ||
| [ | ||
| '--registry', common.registry, | ||
| '--loglevel', 'silent', | ||
| 'install' | ||
| ], | ||
| EXEC_OPTS, | ||
| function (err, code) { | ||
| t.ifError(err, 'npm install ran without issue') | ||
| t.notOk(code, 'npm install exited with code 0') | ||
|
|
||
| var p = path.join(pkg, 'node_modules', 'underscore', 'package.json') | ||
| var pkgJson = JSON.parse(fs.readFileSync(p)) | ||
|
|
||
| t.equal(pkgJson.version, '1.5.1') | ||
| t.end() | ||
| } | ||
| ) | ||
| }) | ||
|
|
||
| test('cleanup', function (t) { | ||
| server.close() | ||
| cleanup() | ||
| t.end() | ||
| }) | ||
|
|
||
| function cleanup () { | ||
| process.chdir(osenv.tmpdir()) | ||
| rimraf.sync(pkg) | ||
| } | ||
|
|
||
| function setup () { | ||
| cleanup() | ||
| mkdirp.sync(path.resolve(pkg, 'node_modules')) | ||
| fs.writeFileSync( | ||
| path.join(pkg, 'package.json'), | ||
| JSON.stringify(PACKAGE_JSON1, null, 2) | ||
| ) | ||
|
|
||
| process.chdir(pkg) | ||
| } |
| @@ -0,0 +1,193 @@ | ||
| var common = require('../common-tap.js') | ||
| var test = require('tap').test | ||
| var npm = require('../../') | ||
| var rimraf = require('rimraf') | ||
| var path = require('path') | ||
| var mr = require('npm-registry-mock') | ||
| var osenv = require('osenv') | ||
| var mkdirp = require('mkdirp') | ||
| var fs = require('graceful-fs') | ||
|
|
||
| var pkg = path.resolve(__dirname, 'outdated-local') | ||
| var pkgLocal = path.resolve(pkg, 'local-module') | ||
| var pkgScopedLocal = path.resolve(pkg, 'another-local-module') | ||
| var pkgLocalUnderscore = path.resolve(pkg, 'underscore') | ||
| var pkgLocalOptimist = path.resolve(pkg, 'optimist') | ||
|
|
||
| function mocks (server) { | ||
| server.get('/local-module') | ||
| .reply(404) | ||
| server.get('/@scoped%2fanother-local-module') | ||
| .reply(404) | ||
| } | ||
|
|
||
| test('setup', function (t) { | ||
| bootstrap() | ||
| t.end() | ||
| }) | ||
|
|
||
| test('outdated support local modules', function (t) { | ||
| t.plan(4) | ||
| process.chdir(pkg) | ||
| mr({ port: common.port, plugin: mocks }, function (err, s) { | ||
| t.ifError(err, 'mock registry started without problems') | ||
|
|
||
| function verify (actual, expected) { | ||
| for (var i = 0; i < expected.length; i++) { | ||
| var current = expected[i] | ||
|
|
||
| var found = false | ||
| for (var j = 0; j < actual.length; j++) { | ||
| var target = actual[j] | ||
|
|
||
| var k | ||
| for (k = 0; k < current.length; k++) { | ||
| if (current[k] !== target[k]) break | ||
| } | ||
| if (k === current.length) found = true | ||
| } | ||
|
|
||
| if (!found) return false | ||
| } | ||
|
|
||
| return true | ||
| } | ||
|
|
||
| npm.load( | ||
| { | ||
| loglevel: 'silent', | ||
| parseable: true, | ||
| registry: common.registry | ||
| }, | ||
| function () { | ||
| npm.install('.', function (err) { | ||
| t.ifError(err, 'install success') | ||
| bumpLocalModules() | ||
| npm.outdated(function (er, d) { | ||
| t.ifError(er, 'outdated success') | ||
| t.ok(verify(d, [ | ||
| [ | ||
| path.resolve(__dirname, 'outdated-local'), | ||
| 'local-module', | ||
| '1.0.0', | ||
| '1.1.0', | ||
| '1.1.0', | ||
| 'file:local-module' | ||
| ], | ||
| [ | ||
| path.resolve(__dirname, 'outdated-local'), | ||
| '@scoped/another-local-module', | ||
| '1.0.0', | ||
| '1.2.0', | ||
| '1.2.0', | ||
| 'file:another-local-module' | ||
| ], | ||
| [ | ||
| path.resolve(__dirname, 'outdated-local'), | ||
| 'underscore', | ||
| '1.3.1', | ||
| '1.6.1', | ||
| '1.5.1', | ||
| 'file:underscore' | ||
| ], | ||
| [ | ||
| path.resolve(__dirname, 'outdated-local'), | ||
| 'optimist', | ||
| '0.4.0', | ||
| '0.6.0', | ||
| '0.6.0', | ||
| 'optimist@0.6.0' | ||
| ] | ||
| ]), 'got expected outdated output') | ||
| s.close() | ||
| }) | ||
| }) | ||
| } | ||
| ) | ||
| }) | ||
| }) | ||
|
|
||
| test('cleanup', function (t) { | ||
| cleanup() | ||
| t.end() | ||
| }) | ||
|
|
||
| var pjParent = JSON.stringify({ | ||
| name: 'outdated-local', | ||
| version: '1.0.0', | ||
| dependencies: { | ||
| 'local-module': 'file:local-module', // updated locally, not on repo | ||
| '@scoped/another-local-module': 'file:another-local-module', // updated locally, scoped, not on repo | ||
| 'underscore': 'file:underscore', // updated locally, updated but lesser version on repo | ||
| 'optimist': 'file:optimist' // updated locally, updated and greater version on repo | ||
| } | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjLocal = JSON.stringify({ | ||
| name: 'local-module', | ||
| version: '1.0.0' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjLocalBumped = JSON.stringify({ | ||
| name: 'local-module', | ||
| version: '1.1.0' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjScopedLocal = JSON.stringify({ | ||
| name: '@scoped/another-local-module', | ||
| version: '1.0.0' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjScopedLocalBumped = JSON.stringify({ | ||
| name: '@scoped/another-local-module', | ||
| version: '1.2.0' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjLocalUnderscore = JSON.stringify({ | ||
| name: 'underscore', | ||
| version: '1.3.1' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjLocalUnderscoreBumped = JSON.stringify({ | ||
| name: 'underscore', | ||
| version: '1.6.1' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjLocalOptimist = JSON.stringify({ | ||
| name: 'optimist', | ||
| version: '0.4.0' | ||
| }, null, 2) + '\n' | ||
|
|
||
| var pjLocalOptimistBumped = JSON.stringify({ | ||
| name: 'optimist', | ||
| version: '0.5.0' | ||
| }, null, 2) + '\n' | ||
|
|
||
| function bootstrap () { | ||
| mkdirp.sync(pkg) | ||
| fs.writeFileSync(path.resolve(pkg, 'package.json'), pjParent) | ||
|
|
||
| mkdirp.sync(pkgLocal) | ||
| fs.writeFileSync(path.resolve(pkgLocal, 'package.json'), pjLocal) | ||
|
|
||
| mkdirp.sync(pkgScopedLocal) | ||
| fs.writeFileSync(path.resolve(pkgScopedLocal, 'package.json'), pjScopedLocal) | ||
|
|
||
| mkdirp.sync(pkgLocalUnderscore) | ||
| fs.writeFileSync(path.resolve(pkgLocalUnderscore, 'package.json'), pjLocalUnderscore) | ||
|
|
||
| mkdirp.sync(pkgLocalOptimist) | ||
| fs.writeFileSync(path.resolve(pkgLocalOptimist, 'package.json'), pjLocalOptimist) | ||
| } | ||
|
|
||
| function bumpLocalModules () { | ||
| fs.writeFileSync(path.resolve(pkgLocal, 'package.json'), pjLocalBumped) | ||
| fs.writeFileSync(path.resolve(pkgScopedLocal, 'package.json'), pjScopedLocalBumped) | ||
| fs.writeFileSync(path.resolve(pkgLocalUnderscore, 'package.json'), pjLocalUnderscoreBumped) | ||
| fs.writeFileSync(path.resolve(pkgLocalOptimist, 'package.json'), pjLocalOptimistBumped) | ||
| } | ||
|
|
||
| function cleanup () { | ||
| process.chdir(osenv.tmpdir()) | ||
| rimraf.sync(pkg) | ||
| } |