diff options
author | isaacs <i@izs.me> | 2012-04-06 14:42:19 -0700 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-04-06 14:42:19 -0700 |
commit | 37ac5e52bfaa79be477b4ac123ed05980defe599 (patch) | |
tree | aa8a95c1fb225968f8ad5a55c14d6240d8a7609d /deps | |
parent | 0b57fee3f8598e4d16af5ce89714e460dd042700 (diff) | |
download | node-37ac5e52bfaa79be477b4ac123ed05980defe599.tar.gz |
Update npm to 1.1.16
Diffstat (limited to 'deps')
258 files changed, 2010 insertions, 2758 deletions
diff --git a/deps/npm/AUTHORS b/deps/npm/AUTHORS index 8f78dca48..340c4bdbc 100644 --- a/deps/npm/AUTHORS +++ b/deps/npm/AUTHORS @@ -61,3 +61,5 @@ Andrew Lunny <alunny@gmail.com> Henrik Hodne <dvyjones@binaryhex.com> Adam Blackburn <regality@gmail.com> Kris Windham <kriswindham@gmail.com> +Jens Grunert <jens.grunert@gmail.com> +Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl> diff --git a/deps/npm/doc/cli/config.md b/deps/npm/doc/cli/config.md index 049a51ea4..8cd03a769 100644 --- a/deps/npm/doc/cli/config.md +++ b/deps/npm/doc/cli/config.md @@ -358,6 +358,13 @@ user. A proxy to use for outgoing https requests. +### user-agent + +* Default: npm/{npm.version} node/{process.version} +* Type: String + +Sets a User-Agent to the request header + ### ignore * Default: "" diff --git a/deps/npm/doc/cli/json.md b/deps/npm/doc/cli/json.md index 16b2ad931..ddd500e3b 100644 --- a/deps/npm/doc/cli/json.md +++ b/deps/npm/doc/cli/json.md @@ -485,7 +485,7 @@ to publish it. This is a way to prevent accidental publication of private repositories. If you would like to ensure that a given package is only ever published -to a speciic registry (for example, an internal registry), +to a specific registry (for example, an internal registry), then use the `publishConfig` hash described below to override the `registry` config param at publish-time. diff --git a/deps/npm/html/api/bin.html b/deps/npm/html/api/bin.html index b8937d7c7..c5d56c12e 100644 --- a/deps/npm/html/api/bin.html +++ b/deps/npm/html/api/bin.html @@ -19,7 +19,7 @@ <p>This function should not be used programmatically. Instead, just refer to the <code>npm.bin</code> member.</p> </div> -<p id="footer">bin — npm@1.1.12</p> +<p id="footer">bin — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/bugs.html b/deps/npm/html/api/bugs.html index b45fe7c17..dda6be2af 100644 --- a/deps/npm/html/api/bugs.html +++ b/deps/npm/html/api/bugs.html @@ -25,7 +25,7 @@ optional version number.</p> <p>This command will launch a browser, so this command may not be the most friendly for programmatic use.</p> </div> -<p id="footer">bugs — npm@1.1.12</p> +<p id="footer">bugs — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/commands.html b/deps/npm/html/api/commands.html index c47f09a78..23232a460 100644 --- a/deps/npm/html/api/commands.html +++ b/deps/npm/html/api/commands.html @@ -28,7 +28,7 @@ usage, or <code>man 3 npm-<command></code> for programmatic usage.</p> <ul><li><a href="../doc/index.html">index(1)</a></li></ul> </div> -<p id="footer">commands — npm@1.1.12</p> +<p id="footer">commands — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/config.html b/deps/npm/html/api/config.html index 4b4682497..0e86fb0bb 100644 --- a/deps/npm/html/api/config.html +++ b/deps/npm/html/api/config.html @@ -33,7 +33,7 @@ functions instead.</p> <ul><li><a href="../api/npm.html">npm(3)</a></li></ul> </div> -<p id="footer">config — npm@1.1.12</p> +<p id="footer">config — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/deprecate.html b/deps/npm/html/api/deprecate.html index 8e040d3f0..487eed75e 100644 --- a/deps/npm/html/api/deprecate.html +++ b/deps/npm/html/api/deprecate.html @@ -30,7 +30,7 @@ install the package.</p></li></ul> <ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../api/unpublish.html">unpublish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul> </div> -<p id="footer">deprecate — npm@1.1.12</p> +<p id="footer">deprecate — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/docs.html b/deps/npm/html/api/docs.html index 8f6f4dcf6..52b1684e9 100644 --- a/deps/npm/html/api/docs.html +++ b/deps/npm/html/api/docs.html @@ -25,7 +25,7 @@ optional version number.</p> <p>This command will launch a browser, so this command may not be the most friendly for programmatic use.</p> </div> -<p id="footer">docs — npm@1.1.12</p> +<p id="footer">docs — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/edit.html b/deps/npm/html/api/edit.html index 63657d305..54fc61dba 100644 --- a/deps/npm/html/api/edit.html +++ b/deps/npm/html/api/edit.html @@ -30,7 +30,7 @@ to open. The package can optionally have a version number attached.</p> <p>Since this command opens an editor in a new process, be careful about where and how this is used.</p> </div> -<p id="footer">edit — npm@1.1.12</p> +<p id="footer">edit — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/explore.html b/deps/npm/html/api/explore.html index 5755e6f9f..8dcdf98a3 100644 --- a/deps/npm/html/api/explore.html +++ b/deps/npm/html/api/explore.html @@ -24,7 +24,7 @@ sure to use <code>npm rebuild <pkg></code> if you make any changes.</p> <p>The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p> </div> -<p id="footer">explore — npm@1.1.12</p> +<p id="footer">explore — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/help-search.html b/deps/npm/html/api/help-search.html index 9726af629..93a8aa495 100644 --- a/deps/npm/html/api/help-search.html +++ b/deps/npm/html/api/help-search.html @@ -32,7 +32,7 @@ Name of the file that matched</li></ul> <p>The silent parameter is not neccessary not used, but it may in the future.</p> </div> -<p id="footer">help-search — npm@1.1.12</p> +<p id="footer">help-search — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/init.html b/deps/npm/html/api/init.html index ab94cfa70..94610f0e7 100644 --- a/deps/npm/html/api/init.html +++ b/deps/npm/html/api/init.html @@ -35,7 +35,7 @@ then go ahead and use this programmatically.</p> <p><a href="../doc/json.html">json(1)</a></p> </div> -<p id="footer">init — npm@1.1.12</p> +<p id="footer">init — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/install.html b/deps/npm/html/api/install.html index bf50d7053..89289779d 100644 --- a/deps/npm/html/api/install.html +++ b/deps/npm/html/api/install.html @@ -25,7 +25,7 @@ the name of a package to be installed.</p> <p>Finally, 'callback' is a function that will be called when all packages have been installed or when an error has been encountered.</p> </div> -<p id="footer">install — npm@1.1.12</p> +<p id="footer">install — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/link.html b/deps/npm/html/api/link.html index 27fb67aaa..3efed3a1c 100644 --- a/deps/npm/html/api/link.html +++ b/deps/npm/html/api/link.html @@ -39,7 +39,7 @@ npm.commands.link('redis', cb) # link-install the package</code></pre> <p>Now, any changes to the redis package will be reflected in the package in the current working directory</p> </div> -<p id="footer">link — npm@1.1.12</p> +<p id="footer">link — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/load.html b/deps/npm/html/api/load.html index 2e69c98e9..a50e1d232 100644 --- a/deps/npm/html/api/load.html +++ b/deps/npm/html/api/load.html @@ -32,7 +32,7 @@ config object.</p> <p>For a list of all the available command-line configs, see <code>npm help config</code></p> </div> -<p id="footer">load — npm@1.1.12</p> +<p id="footer">load — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/ls.html b/deps/npm/html/api/ls.html index 3ab93effb..4d16c7c5f 100644 --- a/deps/npm/html/api/ls.html +++ b/deps/npm/html/api/ls.html @@ -59,7 +59,7 @@ project.</p> This means that if a submodule a same dependency as a parent module, then the dependency will only be output once.</p> </div> -<p id="footer">ls — npm@1.1.12</p> +<p id="footer">ls — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/npm.html b/deps/npm/html/api/npm.html index de961ca51..e735e41e4 100644 --- a/deps/npm/html/api/npm.html +++ b/deps/npm/html/api/npm.html @@ -24,7 +24,7 @@ npm.load(configObject, function (er, npm) { <h2 id="VERSION">VERSION</h2> -<p>1.1.12</p> +<p>1.1.16</p> <h2 id="DESCRIPTION">DESCRIPTION</h2> @@ -91,7 +91,7 @@ method names. Use the <code>npm.deref</code> method to find the real name.</p> <pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre> </div> -<p id="footer">npm — npm@1.1.12</p> +<p id="footer">npm — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/outdated.html b/deps/npm/html/api/outdated.html index bb58058bc..1d317a4bc 100644 --- a/deps/npm/html/api/outdated.html +++ b/deps/npm/html/api/outdated.html @@ -19,7 +19,7 @@ currently outdated.</p> <p>If the 'packages' parameter is left out, npm will check all packages.</p> </div> -<p id="footer">outdated — npm@1.1.12</p> +<p id="footer">outdated — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/owner.html b/deps/npm/html/api/owner.html index 0ccb7c701..4704db628 100644 --- a/deps/npm/html/api/owner.html +++ b/deps/npm/html/api/owner.html @@ -34,7 +34,7 @@ that is not implemented at this time.</p> <ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul> </div> -<p id="footer">owner — npm@1.1.12</p> +<p id="footer">owner — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/pack.html b/deps/npm/html/api/pack.html index e2befcbb2..933e0fd94 100644 --- a/deps/npm/html/api/pack.html +++ b/deps/npm/html/api/pack.html @@ -25,7 +25,7 @@ overwritten the second time.</p> <p>If no arguments are supplied, then npm packs the current package folder.</p> </div> -<p id="footer">pack — npm@1.1.12</p> +<p id="footer">pack — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/prefix.html b/deps/npm/html/api/prefix.html index b15691a8b..3c2697dc4 100644 --- a/deps/npm/html/api/prefix.html +++ b/deps/npm/html/api/prefix.html @@ -21,7 +21,7 @@ <p>This function is not useful programmatically</p> </div> -<p id="footer">prefix — npm@1.1.12</p> +<p id="footer">prefix — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/prune.html b/deps/npm/html/api/prune.html index cd327084f..c178d5216 100644 --- a/deps/npm/html/api/prune.html +++ b/deps/npm/html/api/prune.html @@ -23,7 +23,7 @@ <p>Extraneous packages are packages that are not listed on the parent package's dependencies list.</p> </div> -<p id="footer">prune — npm@1.1.12</p> +<p id="footer">prune — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/publish.html b/deps/npm/html/api/publish.html index 5949910e9..cacb9e42f 100644 --- a/deps/npm/html/api/publish.html +++ b/deps/npm/html/api/publish.html @@ -32,7 +32,7 @@ the registry. Overwrites when the "force" environment variable is set.</p> <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../api/owner.html">owner(3)</a></li></ul> </div> -<p id="footer">publish — npm@1.1.12</p> +<p id="footer">publish — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/rebuild.html b/deps/npm/html/api/rebuild.html index eddee5d10..26182e325 100644 --- a/deps/npm/html/api/rebuild.html +++ b/deps/npm/html/api/rebuild.html @@ -22,7 +22,7 @@ the new binary. If no 'packages' parameter is specify, every package will be reb <p>See <code>npm help build</code></p> </div> -<p id="footer">rebuild — npm@1.1.12</p> +<p id="footer">rebuild — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/restart.html b/deps/npm/html/api/restart.html index 0fed5e895..7a90c9006 100644 --- a/deps/npm/html/api/restart.html +++ b/deps/npm/html/api/restart.html @@ -27,7 +27,7 @@ in the <code>packages</code> parameter.</p> <ul><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul> </div> -<p id="footer">restart — npm@1.1.12</p> +<p id="footer">restart — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/root.html b/deps/npm/html/api/root.html index 6cda77721..1b530312c 100644 --- a/deps/npm/html/api/root.html +++ b/deps/npm/html/api/root.html @@ -21,7 +21,7 @@ <p>This function is not useful programmatically.</p> </div> -<p id="footer">root — npm@1.1.12</p> +<p id="footer">root — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/run-script.html b/deps/npm/html/api/run-script.html index 54f2b8088..4d35498e8 100644 --- a/deps/npm/html/api/run-script.html +++ b/deps/npm/html/api/run-script.html @@ -29,7 +29,7 @@ assumed to be the command to run. All other elements are ignored.</p> <ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../api/test.html">test(3)</a></li><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/restart.html">restart(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul> </div> -<p id="footer">run-script — npm@1.1.12</p> +<p id="footer">run-script — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/search.html b/deps/npm/html/api/search.html index 9b66c9ede..a32fd94c5 100644 --- a/deps/npm/html/api/search.html +++ b/deps/npm/html/api/search.html @@ -32,7 +32,7 @@ excluded term (the "searchexclude" config). The search is case insensitive and doesn't try to read your mind (it doesn't do any verb tense matching or the like).</p> </div> -<p id="footer">search — npm@1.1.12</p> +<p id="footer">search — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/shrinkwrap.html b/deps/npm/html/api/shrinkwrap.html index 631f2ca3a..fb9d91fc4 100644 --- a/deps/npm/html/api/shrinkwrap.html +++ b/deps/npm/html/api/shrinkwrap.html @@ -26,7 +26,7 @@ but the shrinkwrap file will still be written.</p> <p>Finally, 'callback' is a function that will be called when the shrinkwrap has been saved.</p> </div> -<p id="footer">shrinkwrap — npm@1.1.12</p> +<p id="footer">shrinkwrap — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/start.html b/deps/npm/html/api/start.html index 6d3bc8b2a..e82992201 100644 --- a/deps/npm/html/api/start.html +++ b/deps/npm/html/api/start.html @@ -19,7 +19,7 @@ <p>npm can run tests on multiple packages. Just specify multiple packages in the <code>packages</code> parameter.</p> </div> -<p id="footer">start — npm@1.1.12</p> +<p id="footer">start — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/stop.html b/deps/npm/html/api/stop.html index 69d005a51..4515c5e3d 100644 --- a/deps/npm/html/api/stop.html +++ b/deps/npm/html/api/stop.html @@ -19,7 +19,7 @@ <p>npm can run stop on multiple packages. Just specify multiple packages in the <code>packages</code> parameter.</p> </div> -<p id="footer">stop — npm@1.1.12</p> +<p id="footer">stop — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/submodule.html b/deps/npm/html/api/submodule.html index 4a4d01c98..7d5cdd22b 100644 --- a/deps/npm/html/api/submodule.html +++ b/deps/npm/html/api/submodule.html @@ -33,7 +33,7 @@ dependencies into the submodule folder.</p> <ul><li>npm help json</li><li>git help submodule</li></ul> </div> -<p id="footer">submodule — npm@1.1.12</p> +<p id="footer">submodule — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/tag.html b/deps/npm/html/api/tag.html index 3dfb01295..11c039dc2 100644 --- a/deps/npm/html/api/tag.html +++ b/deps/npm/html/api/tag.html @@ -29,7 +29,7 @@ parameter is missing or falsey (empty), the default froom the config will be used. For more information about how to set this config, check <code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p> </div> -<p id="footer">tag — npm@1.1.12</p> +<p id="footer">tag — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/test.html b/deps/npm/html/api/test.html index efce99599..acab6fb88 100644 --- a/deps/npm/html/api/test.html +++ b/deps/npm/html/api/test.html @@ -22,7 +22,7 @@ true.</p> <p>npm can run tests on multiple packages. Just specify multiple packages in the <code>packages</code> parameter.</p> </div> -<p id="footer">test — npm@1.1.12</p> +<p id="footer">test — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/uninstall.html b/deps/npm/html/api/uninstall.html index 6dc721ea1..daa244ecc 100644 --- a/deps/npm/html/api/uninstall.html +++ b/deps/npm/html/api/uninstall.html @@ -22,7 +22,7 @@ the name of a package to be uninstalled.</p> <p>Finally, 'callback' is a function that will be called when all packages have been uninstalled or when an error has been encountered.</p> </div> -<p id="footer">uninstall — npm@1.1.12</p> +<p id="footer">uninstall — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/unpublish.html b/deps/npm/html/api/unpublish.html index 2a2558fc8..cf2a3a625 100644 --- a/deps/npm/html/api/unpublish.html +++ b/deps/npm/html/api/unpublish.html @@ -26,7 +26,7 @@ is what is meant.</p> <p>If no version is specified, or if all versions are removed then the root package entry is removed from the registry entirely.</p> </div> -<p id="footer">unpublish — npm@1.1.12</p> +<p id="footer">unpublish — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/update.html b/deps/npm/html/api/update.html index d994b90a9..1b4a2125f 100644 --- a/deps/npm/html/api/update.html +++ b/deps/npm/html/api/update.html @@ -18,7 +18,7 @@ <p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p> </div> -<p id="footer">update — npm@1.1.12</p> +<p id="footer">update — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/version.html b/deps/npm/html/api/version.html index 1193aff45..39dd6d319 100644 --- a/deps/npm/html/api/version.html +++ b/deps/npm/html/api/version.html @@ -24,7 +24,7 @@ fail if the repo is not clean.</p> parameter. The difference, however, is this function will fail if it does not have exactly one element. The only element should be a version number.</p> </div> -<p id="footer">version — npm@1.1.12</p> +<p id="footer">version — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/view.html b/deps/npm/html/api/view.html index 1ea983ba8..a7558a97a 100644 --- a/deps/npm/html/api/view.html +++ b/deps/npm/html/api/view.html @@ -99,7 +99,7 @@ the field name.</p> <p>corresponding to the list of fields selected.</p> </div> -<p id="footer">view — npm@1.1.12</p> +<p id="footer">view — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/api/whoami.html b/deps/npm/html/api/whoami.html index 4d6cf50e0..672ed6c51 100644 --- a/deps/npm/html/api/whoami.html +++ b/deps/npm/html/api/whoami.html @@ -21,7 +21,7 @@ <p>This function is not useful programmatically</p> </div> -<p id="footer">whoami — npm@1.1.12</p> +<p id="footer">whoami — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html index 570c378d1..71350ac5a 100644 --- a/deps/npm/html/doc/README.html +++ b/deps/npm/html/doc/README.html @@ -267,7 +267,7 @@ will no doubt tell you to put the output in a gist or email.</p> <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul> </div> -<p id="footer"><a href="../doc/README.html">README</a> — npm@1.1.12</p> +<p id="footer"><a href="../doc/README.html">README</a> — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/adduser.html b/deps/npm/html/doc/adduser.html index 1ff19bfe0..c67b9e2b0 100644 --- a/deps/npm/html/doc/adduser.html +++ b/deps/npm/html/doc/adduser.html @@ -39,7 +39,7 @@ authorize on a new machine.</p> <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li></ul> </div> -<p id="footer">adduser — npm@1.1.12</p> +<p id="footer">adduser — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/bin.html b/deps/npm/html/doc/bin.html index bad7f3488..ce60934e1 100644 --- a/deps/npm/html/doc/bin.html +++ b/deps/npm/html/doc/bin.html @@ -20,7 +20,7 @@ <ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">bin — npm@1.1.12</p> +<p id="footer">bin — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/bugs.html b/deps/npm/html/doc/bugs.html index 4f0a0cb27..77d549f40 100644 --- a/deps/npm/html/doc/bugs.html +++ b/deps/npm/html/doc/bugs.html @@ -36,7 +36,7 @@ config param.</p> <ul><li><a href="../doc/docs.html">docs(1)</a></li><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul> </div> -<p id="footer">bugs — npm@1.1.12</p> +<p id="footer">bugs — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/build.html b/deps/npm/html/doc/build.html index 099831663..381c92eaa 100644 --- a/deps/npm/html/doc/build.html +++ b/deps/npm/html/doc/build.html @@ -25,7 +25,7 @@ A folder containing a <code>package.json</code> file in its root.</li></ul> <ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul> </div> -<p id="footer">build — npm@1.1.12</p> +<p id="footer">build — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/bundle.html b/deps/npm/html/doc/bundle.html index 8c1741a80..efd320201 100644 --- a/deps/npm/html/doc/bundle.html +++ b/deps/npm/html/doc/bundle.html @@ -20,7 +20,7 @@ install packages into the local space.</p> <ul><li><a href="../doc/install.html">install(1)</a></li></ul> </div> -<p id="footer">bundle — npm@1.1.12</p> +<p id="footer">bundle — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/cache.html b/deps/npm/html/doc/cache.html index fc234a5f5..40571367a 100644 --- a/deps/npm/html/doc/cache.html +++ b/deps/npm/html/doc/cache.html @@ -66,7 +66,7 @@ they do not make an HTTP request to the registry.</p> <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li></ul> </div> -<p id="footer">cache — npm@1.1.12</p> +<p id="footer">cache — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/changelog.html b/deps/npm/html/doc/changelog.html index 10ca5e06e..1a5d0e8b4 100644 --- a/deps/npm/html/doc/changelog.html +++ b/deps/npm/html/doc/changelog.html @@ -65,7 +65,7 @@ <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li></ul> </div> -<p id="footer">changelog — npm@1.1.12</p> +<p id="footer">changelog — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/coding-style.html b/deps/npm/html/doc/coding-style.html index 8da29d371..a33b02cce 100644 --- a/deps/npm/html/doc/coding-style.html +++ b/deps/npm/html/doc/coding-style.html @@ -191,7 +191,7 @@ set to anything."</p> <ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">coding-style — npm@1.1.12</p> +<p id="footer">coding-style — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/completion.html b/deps/npm/html/doc/completion.html index cc05c02e1..bfa863e12 100644 --- a/deps/npm/html/doc/completion.html +++ b/deps/npm/html/doc/completion.html @@ -33,7 +33,7 @@ completions based on the arguments.</p> <ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">completion — npm@1.1.12</p> +<p id="footer">completion — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/config.html b/deps/npm/html/doc/config.html index f7d4c0bb7..f5e4c5b32 100644 --- a/deps/npm/html/doc/config.html +++ b/deps/npm/html/doc/config.html @@ -320,6 +320,12 @@ user.</p> <p>A proxy to use for outgoing https requests.</p> +<h3 id="user-agent">user-agent</h3> + +<ul><li>Default: npm/{npm.version} node/{process.version}</li><li>Type: String</li></ul> + +<p>Sets a User-Agent to the request header</p> + <h3 id="ignore">ignore</h3> <ul><li>Default: ""</li><li>Type: string</li></ul> @@ -662,7 +668,7 @@ then answer "no" to any prompt.</p> <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li></ul> </div> -<p id="footer">config — npm@1.1.12</p> +<p id="footer">config — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/deprecate.html b/deps/npm/html/doc/deprecate.html index 71e5a6156..bc4d557f8 100644 --- a/deps/npm/html/doc/deprecate.html +++ b/deps/npm/html/doc/deprecate.html @@ -29,7 +29,7 @@ something like this:</p> <ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul> </div> -<p id="footer">deprecate — npm@1.1.12</p> +<p id="footer">deprecate — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/developers.html b/deps/npm/html/doc/developers.html index 9a77cf9fd..069d65b82 100644 --- a/deps/npm/html/doc/developers.html +++ b/deps/npm/html/doc/developers.html @@ -160,7 +160,7 @@ from a fresh checkout.</p> <ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul> </div> -<p id="footer">developers — npm@1.1.12</p> +<p id="footer">developers — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/disputes.html b/deps/npm/html/doc/disputes.html index 00dcee63a..e0fdf1847 100644 --- a/deps/npm/html/doc/disputes.html +++ b/deps/npm/html/doc/disputes.html @@ -80,7 +80,7 @@ license statement)</li><li>Illegal content.</li></ol> <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul> </div> -<p id="footer">disputes — npm@1.1.12</p> +<p id="footer">disputes — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/docs.html b/deps/npm/html/doc/docs.html index a8344d60a..f01e600aa 100644 --- a/deps/npm/html/doc/docs.html +++ b/deps/npm/html/doc/docs.html @@ -37,7 +37,7 @@ config param.</p> <ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li></ul> </div> -<p id="footer">docs — npm@1.1.12</p> +<p id="footer">docs — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/edit.html b/deps/npm/html/doc/edit.html index 243efb29c..b1220eb1d 100644 --- a/deps/npm/html/doc/edit.html +++ b/deps/npm/html/doc/edit.html @@ -37,7 +37,7 @@ or <code>"notepad"</code> on Windows.</li><li>Type: path</li></ul> <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/explore.html">explore(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">edit — npm@1.1.12</p> +<p id="footer">edit — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/explore.html b/deps/npm/html/doc/explore.html index dd9f9e330..1fa730ff9 100644 --- a/deps/npm/html/doc/explore.html +++ b/deps/npm/html/doc/explore.html @@ -40,7 +40,7 @@ Windows</li><li>Type: path</li></ul> <ul><li><a href="../doc/submodule.html">submodule(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/edit.html">edit(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul> </div> -<p id="footer">explore — npm@1.1.12</p> +<p id="footer">explore — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/faq.html b/deps/npm/html/doc/faq.html index 75eacd264..ace492838 100644 --- a/deps/npm/html/doc/faq.html +++ b/deps/npm/html/doc/faq.html @@ -241,7 +241,7 @@ We'll have someone kick it or something.</p> <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul> </div> -<p id="footer">faq — npm@1.1.12</p> +<p id="footer">faq — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/folders.html b/deps/npm/html/doc/folders.html index f942afd35..731dbe45c 100644 --- a/deps/npm/html/doc/folders.html +++ b/deps/npm/html/doc/folders.html @@ -205,7 +205,7 @@ cannot be found elsewhere. See <code><a href="../doc/json.html">json(1)</a></co <ul><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/pack.html">pack(1)</a></li><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li></ul> </div> -<p id="footer">folders — npm@1.1.12</p> +<p id="footer">folders — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/help-search.html b/deps/npm/html/doc/help-search.html index 5b3a5984b..f203e4307 100644 --- a/deps/npm/html/doc/help-search.html +++ b/deps/npm/html/doc/help-search.html @@ -38,7 +38,7 @@ where the terms were found in the documentation.</p> <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/help.html">help(1)</a></li></ul> </div> -<p id="footer">help-search — npm@1.1.12</p> +<p id="footer">help-search — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/help.html b/deps/npm/html/doc/help.html index dba716922..455cafaab 100644 --- a/deps/npm/html/doc/help.html +++ b/deps/npm/html/doc/help.html @@ -36,7 +36,7 @@ matches are equivalent to specifying a topic name.</p> <ul><li><a href="../doc/npm.html">npm(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/help-search.html">help-search(1)</a></li><li><a href="../doc/index.html">index(1)</a></li></ul> </div> -<p id="footer">help — npm@1.1.12</p> +<p id="footer">help — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html index 0befbcfa7..55672a532 100644 --- a/deps/npm/html/doc/index.html +++ b/deps/npm/html/doc/index.html @@ -384,7 +384,7 @@ <p> Display npm username</p> </div> -<p id="footer">index — npm@1.1.12</p> +<p id="footer">index — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/init.html b/deps/npm/html/doc/init.html index 2ac81776a..f3215e5b5 100644 --- a/deps/npm/html/doc/init.html +++ b/deps/npm/html/doc/init.html @@ -29,7 +29,7 @@ without a really good reason to do so.</p> <ul><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/version.html">version(1)</a></li></ul> </div> -<p id="footer">init — npm@1.1.12</p> +<p id="footer">init — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/install.html b/deps/npm/html/doc/install.html index 426f5b10a..ffff9d36b 100644 --- a/deps/npm/html/doc/install.html +++ b/deps/npm/html/doc/install.html @@ -136,7 +136,7 @@ affects a real use-case, it will be investigated.</p> <ul><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/rebuild.html">rebuild(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/shrinkwrap.html">shrinkwrap(1)</a></li></ul> </div> -<p id="footer">install — npm@1.1.12</p> +<p id="footer">install — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/json.html b/deps/npm/html/doc/json.html index a8ef8c0ec..1695739a0 100644 --- a/deps/npm/html/doc/json.html +++ b/deps/npm/html/doc/json.html @@ -457,7 +457,7 @@ to publish it.</p> <p>This is a way to prevent accidental publication of private repositories. If you would like to ensure that a given package is only ever published -to a speciic registry (for example, an internal registry), +to a specific registry (for example, an internal registry), then use the <code>publishConfig</code> hash described below to override the <code>registry</code> config param at publish-time.</p> @@ -478,7 +478,7 @@ overridden.</p> <ul><li><a href="../doc/semver.html">semver(1)</a></li><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/version.html">version(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/rm.html">rm(1)</a></li></ul> </div> -<p id="footer">json — npm@1.1.12</p> +<p id="footer">json — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/link.html b/deps/npm/html/doc/link.html index 8ae0d1e9a..27221066a 100644 --- a/deps/npm/html/doc/link.html +++ b/deps/npm/html/doc/link.html @@ -58,7 +58,7 @@ installation target into your project's <code>node_modules</code> folder.</p> <ul><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">link — npm@1.1.12</p> +<p id="footer">link — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/list.html b/deps/npm/html/doc/list.html index fdcaa6f83..a316573db 100644 --- a/deps/npm/html/doc/list.html +++ b/deps/npm/html/doc/list.html @@ -58,7 +58,7 @@ project.</p> <ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/link.html">link(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/update.html">update(1)</a></li></ul> </div> -<p id="footer">list — npm@1.1.12</p> +<p id="footer">list — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/npm.html b/deps/npm/html/doc/npm.html index 5854a4790..44eb74d36 100644 --- a/deps/npm/html/doc/npm.html +++ b/deps/npm/html/doc/npm.html @@ -14,7 +14,7 @@ <h2 id="VERSION">VERSION</h2> -<p>1.1.12</p> +<p>1.1.16</p> <h2 id="DESCRIPTION">DESCRIPTION</h2> @@ -135,7 +135,7 @@ will no doubt tell you to put the output in a gist or email.</p> <ul><li><a href="../doc/help.html">help(1)</a></li><li><a href="../doc/faq.html">faq(1)</a></li><li><a href="../doc/README.html">README</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/index.html">index(1)</a></li><li><a href="../api/npm.html">npm(3)</a></li></ul> </div> -<p id="footer">npm — npm@1.1.12</p> +<p id="footer">npm — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/outdated.html b/deps/npm/html/doc/outdated.html index 0c9d4349d..980017b2c 100644 --- a/deps/npm/html/doc/outdated.html +++ b/deps/npm/html/doc/outdated.html @@ -21,7 +21,7 @@ packages are currently outdated.</p> <ul><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li></ul> </div> -<p id="footer">outdated — npm@1.1.12</p> +<p id="footer">outdated — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/owner.html b/deps/npm/html/doc/owner.html index 78773a18a..e9d2dca62 100644 --- a/deps/npm/html/doc/owner.html +++ b/deps/npm/html/doc/owner.html @@ -34,7 +34,7 @@ that is not implemented at this time.</p> <ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul> </div> -<p id="footer">owner — npm@1.1.12</p> +<p id="footer">owner — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/pack.html b/deps/npm/html/doc/pack.html index 829f3f171..177d63eda 100644 --- a/deps/npm/html/doc/pack.html +++ b/deps/npm/html/doc/pack.html @@ -29,7 +29,7 @@ overwritten the second time.</p> <ul><li><a href="../doc/cache.html">cache(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">pack — npm@1.1.12</p> +<p id="footer">pack — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/prefix.html b/deps/npm/html/doc/prefix.html index cd5273d0b..3ca892057 100644 --- a/deps/npm/html/doc/prefix.html +++ b/deps/npm/html/doc/prefix.html @@ -20,7 +20,7 @@ <ul><li><a href="../doc/root.html">root(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">prefix — npm@1.1.12</p> +<p id="footer">prefix — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/prune.html b/deps/npm/html/doc/prune.html index 31a860b9f..852fab02e 100644 --- a/deps/npm/html/doc/prune.html +++ b/deps/npm/html/doc/prune.html @@ -25,7 +25,7 @@ package's dependencies list.</p> <ul><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul> </div> -<p id="footer">prune — npm@1.1.12</p> +<p id="footer">prune — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/publish.html b/deps/npm/html/doc/publish.html index 0d64e535a..9be501527 100644 --- a/deps/npm/html/doc/publish.html +++ b/deps/npm/html/doc/publish.html @@ -29,7 +29,7 @@ the registry. Overwrites when the "--force" flag is set.</p> <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/tag.html">tag(1)</a></li></ul> </div> -<p id="footer">publish — npm@1.1.12</p> +<p id="footer">publish — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/rebuild.html b/deps/npm/html/doc/rebuild.html index 5ee54b555..cd60c3c4e 100644 --- a/deps/npm/html/doc/rebuild.html +++ b/deps/npm/html/doc/rebuild.html @@ -25,7 +25,7 @@ the new binary.</p> <ul><li><a href="../doc/build.html">build(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul> </div> -<p id="footer">rebuild — npm@1.1.12</p> +<p id="footer">rebuild — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/registry.html b/deps/npm/html/doc/registry.html index 2aa163569..b88470ede 100644 --- a/deps/npm/html/doc/registry.html +++ b/deps/npm/html/doc/registry.html @@ -97,7 +97,7 @@ ask for help on the <a href="mailto:npm-@googlegroups.com">npm-@googlegroups.com <ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/disputes.html">disputes(1)</a></li></ul> </div> -<p id="footer">registry — npm@1.1.12</p> +<p id="footer">registry — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/removing-npm.html b/deps/npm/html/doc/removing-npm.html index f32b402c2..99b4079b6 100644 --- a/deps/npm/html/doc/removing-npm.html +++ b/deps/npm/html/doc/removing-npm.html @@ -58,7 +58,7 @@ modules. To track those down, you can do the following:</p> <ul><li><a href="../doc/README.html">README</a></li><li><a href="../doc/rm.html">rm(1)</a></li><li><a href="../doc/prune.html">prune(1)</a></li></ul> </div> -<p id="footer">removing-npm — npm@1.1.12</p> +<p id="footer">removing-npm — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/restart.html b/deps/npm/html/doc/restart.html index d7864c0ef..d9e510fc5 100644 --- a/deps/npm/html/doc/restart.html +++ b/deps/npm/html/doc/restart.html @@ -24,7 +24,7 @@ the "start" script.</p> <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul> </div> -<p id="footer">restart — npm@1.1.12</p> +<p id="footer">restart — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/root.html b/deps/npm/html/doc/root.html index 93cfa5b02..3d568a94f 100644 --- a/deps/npm/html/doc/root.html +++ b/deps/npm/html/doc/root.html @@ -20,7 +20,7 @@ <ul><li><a href="../doc/prefix.html">prefix(1)</a></li><li><a href="../doc/bin.html">bin(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">root — npm@1.1.12</p> +<p id="footer">root — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/run-script.html b/deps/npm/html/doc/run-script.html index 7dfa85322..16d60bf75 100644 --- a/deps/npm/html/doc/run-script.html +++ b/deps/npm/html/doc/run-script.html @@ -23,7 +23,7 @@ called directly, as well.</p> <ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul> </div> -<p id="footer">run-script — npm@1.1.12</p> +<p id="footer">run-script — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/scripts.html b/deps/npm/html/doc/scripts.html index c04dd9179..e95f7f3ec 100644 --- a/deps/npm/html/doc/scripts.html +++ b/deps/npm/html/doc/scripts.html @@ -177,7 +177,7 @@ will sudo the npm command in question.</li></ul> <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/developers.html">developers(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul> </div> -<p id="footer">scripts — npm@1.1.12</p> +<p id="footer">scripts — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/search.html b/deps/npm/html/doc/search.html index 589f5c906..6e5cde876 100644 --- a/deps/npm/html/doc/search.html +++ b/deps/npm/html/doc/search.html @@ -24,7 +24,7 @@ expression characters must be escaped or quoted in most shells.)</p> <ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/view.html">view(1)</a></li></ul> </div> -<p id="footer">search — npm@1.1.12</p> +<p id="footer">search — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/semver.html b/deps/npm/html/doc/semver.html index 43aa640bf..79003cec4 100644 --- a/deps/npm/html/doc/semver.html +++ b/deps/npm/html/doc/semver.html @@ -104,7 +104,7 @@ that satisfies the range, or null if none of them do.</li></ul> <ul><li><a href="../doc/json.html">json(1)</a></li></ul> </div> -<p id="footer">semver — npm@1.1.12</p> +<p id="footer">semver — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/shrinkwrap.html b/deps/npm/html/doc/shrinkwrap.html index bd1eee748..a146e2256 100644 --- a/deps/npm/html/doc/shrinkwrap.html +++ b/deps/npm/html/doc/shrinkwrap.html @@ -169,7 +169,7 @@ versions.</p> <ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul> </div> -<p id="footer">shrinkwrap — npm@1.1.12</p> +<p id="footer">shrinkwrap — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/star.html b/deps/npm/html/doc/star.html index 4e8081bae..ce76b9639 100644 --- a/deps/npm/html/doc/star.html +++ b/deps/npm/html/doc/star.html @@ -26,7 +26,7 @@ a vaguely positive way to show that you care.</p> <ul><li><a href="../doc/view.html">view(1)</a></li><li><a href="../doc/whoami.html">whoami(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul> </div> -<p id="footer">star — npm@1.1.12</p> +<p id="footer">star — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/start.html b/deps/npm/html/doc/start.html index 775f2515b..f35b6d628 100644 --- a/deps/npm/html/doc/start.html +++ b/deps/npm/html/doc/start.html @@ -20,7 +20,7 @@ <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul> </div> -<p id="footer">start — npm@1.1.12</p> +<p id="footer">start — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/stop.html b/deps/npm/html/doc/stop.html index c4eec8984..d3780c301 100644 --- a/deps/npm/html/doc/stop.html +++ b/deps/npm/html/doc/stop.html @@ -20,7 +20,7 @@ <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/test.html">test(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li></ul> </div> -<p id="footer">stop — npm@1.1.12</p> +<p id="footer">stop — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/submodule.html b/deps/npm/html/doc/submodule.html index 32cc4f6ca..bcd2b5dd8 100644 --- a/deps/npm/html/doc/submodule.html +++ b/deps/npm/html/doc/submodule.html @@ -33,7 +33,7 @@ dependencies into the submodule folder.</p> <ul><li><a href="../doc/json.html">json(1)</a></li><li>git help submodule</li></ul> </div> -<p id="footer">submodule — npm@1.1.12</p> +<p id="footer">submodule — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/tag.html b/deps/npm/html/doc/tag.html index e8ce6576d..562858b16 100644 --- a/deps/npm/html/doc/tag.html +++ b/deps/npm/html/doc/tag.html @@ -21,7 +21,7 @@ <ul><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">tag — npm@1.1.12</p> +<p id="footer">tag — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/test.html b/deps/npm/html/doc/test.html index 2eb22df06..a1547facf 100644 --- a/deps/npm/html/doc/test.html +++ b/deps/npm/html/doc/test.html @@ -23,7 +23,7 @@ true.</p> <ul><li><a href="../doc/run-script.html">run-script(1)</a></li><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../doc/start.html">start(1)</a></li><li><a href="../doc/restart.html">restart(1)</a></li><li><a href="../doc/stop.html">stop(1)</a></li></ul> </div> -<p id="footer">test — npm@1.1.12</p> +<p id="footer">test — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/uninstall.html b/deps/npm/html/doc/uninstall.html index 023e7f075..c95cca96d 100644 --- a/deps/npm/html/doc/uninstall.html +++ b/deps/npm/html/doc/uninstall.html @@ -22,7 +22,7 @@ on its behalf.</p> <ul><li><a href="../doc/prune.html">prune(1)</a></li><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/config.html">config(1)</a></li></ul> </div> -<p id="footer">uninstall — npm@1.1.12</p> +<p id="footer">uninstall — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/unpublish.html b/deps/npm/html/doc/unpublish.html index b00e69481..aded4d6e5 100644 --- a/deps/npm/html/doc/unpublish.html +++ b/deps/npm/html/doc/unpublish.html @@ -34,7 +34,7 @@ the root package entry is removed from the registry entirely.</p> <ul><li><a href="../doc/deprecate.html">deprecate(1)</a></li><li><a href="../doc/publish.html">publish(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../doc/owner.html">owner(1)</a></li></ul> </div> -<p id="footer">unpublish — npm@1.1.12</p> +<p id="footer">unpublish — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/update.html b/deps/npm/html/doc/update.html index f97efed41..b512451bf 100644 --- a/deps/npm/html/doc/update.html +++ b/deps/npm/html/doc/update.html @@ -23,7 +23,7 @@ <ul><li><a href="../doc/install.html">install(1)</a></li><li><a href="../doc/outdated.html">outdated(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/folders.html">folders(1)</a></li><li><a href="../doc/list.html">list(1)</a></li></ul> </div> -<p id="footer">update — npm@1.1.12</p> +<p id="footer">update — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/version.html b/deps/npm/html/doc/version.html index cba58815a..846709a8f 100644 --- a/deps/npm/html/doc/version.html +++ b/deps/npm/html/doc/version.html @@ -31,7 +31,7 @@ will use it as a commit message when creating a version commit.</p> <ul><li><a href="../doc/init.html">init(1)</a></li><li><a href="../doc/json.html">json(1)</a></li><li><a href="../doc/semver.html">semver(1)</a></li></ul> </div> -<p id="footer">version — npm@1.1.12</p> +<p id="footer">version — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/view.html b/deps/npm/html/doc/view.html index af7dbb175..c88830a71 100644 --- a/deps/npm/html/doc/view.html +++ b/deps/npm/html/doc/view.html @@ -88,7 +88,7 @@ the field name.</p> <ul><li><a href="../doc/search.html">search(1)</a></li><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/docs.html">docs(1)</a></li></ul> </div> -<p id="footer">view — npm@1.1.12</p> +<p id="footer">view — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/html/doc/whoami.html b/deps/npm/html/doc/whoami.html index e0f33e85e..f63d142bc 100644 --- a/deps/npm/html/doc/whoami.html +++ b/deps/npm/html/doc/whoami.html @@ -20,7 +20,7 @@ <ul><li><a href="../doc/config.html">config(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li></ul> </div> -<p id="footer">whoami — npm@1.1.12</p> +<p id="footer">whoami — npm@1.1.16</p> <script> ;(function () { var wrapper = document.getElementById("wrapper") diff --git a/deps/npm/lib/bugs.js b/deps/npm/lib/bugs.js index a3a017cc0..7982746cf 100644 --- a/deps/npm/lib/bugs.js +++ b/deps/npm/lib/bugs.js @@ -28,7 +28,7 @@ function bugs (args, cb) { } if (repo) { if (Array.isArray(repo)) repo = repo.shift() - if (repo.url) repo = repo.url + if (repo.hasOwnProperty("url")) repo = repo.url log.verbose(repo, "repository") if (repo && repo.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) { return open(repo.replace(/^git(@|:\/\/)/, "http://") diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js index e0a72ed18..b62e82dd1 100644 --- a/deps/npm/lib/cache.js +++ b/deps/npm/lib/cache.js @@ -3,11 +3,10 @@ /* adding a folder: 1. tar into tmp/random/package.tgz -2. untar into tmp/random/contents/{blah} -3. rename {blah} to "package" -4. tar tmp/random/contents/package to cache/n/v/package.tgz -5. untar cache/n/v/package.tgz into cache/n/v/package -6. rm tmp/random +2. untar into tmp/random/contents/package, stripping one dir piece +3. tar tmp/random/contents/package to cache/n/v/package.tgz +4. untar cache/n/v/package.tgz into cache/n/v/package +5. rm tmp/random Adding a url: 1. fetch to tmp/random/package.tgz @@ -32,7 +31,7 @@ exports.read = read exports.clean = clean exports.unpack = unpack -var mkdir = require("./utils/mkdir-p.js") +var mkdir = require("mkdirp") , exec = require("./utils/exec.js") , fetch = require("./utils/fetch.js") , npm = require("./npm.js") @@ -50,6 +49,7 @@ var mkdir = require("./utils/mkdir-p.js") , tar = require("./utils/tar.js") , fileCompletion = require("./utils/completion/file-completion.js") , url = require("url") + , chownr = require("chownr") cache.usage = "npm cache add <tarball file>" + "\nnpm cache add <folder>" @@ -634,7 +634,7 @@ function getCacheStat (cb) { } function makeCacheDir (cb) { - if (!process.getuid) return mkdir(npm.cache, npm.modes.exec, cb) + if (!process.getuid) return mkdir(npm.cache, cb) var uid = +process.getuid() , gid = +process.getgid() @@ -645,18 +645,28 @@ function makeCacheDir (cb) { } if (uid !== 0 || !process.env.HOME) { cacheStat = {uid: uid, gid: gid} - return mkdir(npm.cache, npm.modes.exec, uid, gid, function (er) { - return cb(er, cacheStat) - }) + return mkdir(npm.cache, afterMkdir) } + fs.stat(process.env.HOME, function (er, st) { if (er) return log.er(cb, "homeless?")(er) cacheStat = st log.silly([st.uid, st.gid], "uid, gid for cache dir") - return mkdir(npm.cache, npm.modes.exec, st.uid, st.gid, function (er) { + return mkdir(npm.cache, afterMkdir) + }) + + function afterMkdir (er, made) { + if (er || !cacheStat || isNaN(cacheStat.uid) || isNaN(cacheStat.gid)) { + return cb(er, cacheStat) + } + + if (!made) return cb(er, cacheStat) + + // ensure that the ownership is correct. + chownr(made, cacheStat.uid, cacheStat.gid, function (er) { return cb(er, cacheStat) }) - }) + } } @@ -734,9 +744,20 @@ function addLocalDirectory (p, name, cb) { , tgz = placeDirect ? placed : tmptgz , doFancyCrap = p.indexOf(npm.tmp) !== 0 && p.indexOf(npm.cache) !== 0 - tar.pack(tgz, p, data, doFancyCrap, function (er) { - if (er) return log.er(cb,"couldn't pack "+p+ " to "+tgz)(er) - addLocalTarball(tgz, name, cb) + getCacheStat(function (er, cs) { + mkdir(path.dirname(tgz), function (er, made) { + if (er) return cb(er) + tar.pack(tgz, p, data, doFancyCrap, function (er) { + if (er) return log.er(cb,"couldn't pack "+p+ " to "+tgz)(er) + + if (er || !cs || isNaN(cs.uid) || isNaN(cs.gid)) return cb() + + chownr(made || tgz, cs.uid, cs.gid, function (er) { + if (er) return cb(er) + addLocalTarball(tgz, name, cb) + }) + }) + }) }) }) } @@ -745,38 +766,15 @@ function addTmpTarball (tgz, name, cb) { if (!cb) cb = name, name = "" getCacheStat(function (er, cs) { if (er) return cb(er) - return addTmpTarball_(tgz, name, cs.uid, cs.gid, cb) - }) -} - -function addTmpTarball_ (tgz, name, uid, gid, cb) { - var contents = path.dirname(tgz) - tar.unpack( tgz, path.resolve(contents, "package") - , null, null - , uid, gid - , function (er) { - if (er) { - return cb(er) - } - fs.readdir(contents, function (er, folder) { - if (er) return log.er(cb, "couldn't readdir "+contents)(er) - log.verbose(folder, "tarball contents") - if (folder.length > 1) { - folder = folder.filter(function (f) { - return !f.match(/^\.|^tmp\.tgz$/) - }) - } - if (folder.length > 1) { - log.warn(folder.slice(1).join("\n") - ,"extra junk in folder, ignoring") + var contents = path.dirname(tgz) + tar.unpack( tgz, path.resolve(contents, "package") + , null, null + , cs.uid, cs.gid + , function (er) { + if (er) { + return cb(er) } - if (!folder.length) return cb(new Error("Empty package tarball")) - folder = path.join(contents, folder[0]) - var newName = path.join(contents, "package") - fs.rename(folder, newName, function (er) { - if (er) return log.er(cb, "couldn't rename "+folder+" to package")(er) - addLocalDirectory(newName, name, cb) - }) + addLocalDirectory(path.resolve(contents, "package"), name, cb) }) }) } diff --git a/deps/npm/lib/docs.js b/deps/npm/lib/docs.js index de9f71c65..8af4c1bb6 100644 --- a/deps/npm/lib/docs.js +++ b/deps/npm/lib/docs.js @@ -25,7 +25,7 @@ function docs (args, cb) { if (homepage) return open(homepage, cb) if (repo) { if (Array.isArray(repo)) repo = repo.shift() - if (repo.url) repo = repo.url + if (repo.hasOwnProperty("url")) repo = repo.url log.verbose(repo, "repository") if (repo) { return open(repo.replace(/^git(@|:\/\/)/, 'http://') diff --git a/deps/npm/lib/init.js b/deps/npm/lib/init.js index 1c64d9760..7cd7da8e2 100644 --- a/deps/npm/lib/init.js +++ b/deps/npm/lib/init.js @@ -99,7 +99,10 @@ function init_ (data, folder, cb) { , function (er, r) { if (er) return cb(er) if (r !== "none") { - data.repository = (data.repository || {}).url = r + data.repository = (data.repository || {}) + data.repository.url = r + } else { + delete data.repository } cb() } diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js index 3288d436b..4da66d338 100644 --- a/deps/npm/lib/install.js +++ b/deps/npm/lib/install.js @@ -1,4 +1,3 @@ - // npm install <pkg> <pkg> <pkg> // // See doc/install.md for more description @@ -68,8 +67,9 @@ var npm = require("./npm.js") , relativize = require("./utils/relativize.js") , output , url = require("url") - , mkdir = require("./utils/mkdir-p.js") + , mkdir = require("mkdirp") , lifecycle = require("./utils/lifecycle.js") + , archy = require("archy") function install (args, cb_) { @@ -107,7 +107,7 @@ function install (args, cb_) { }) } - mkdir(where, function (er) { + mkdir(where, function (er, made) { if (er) return cb(er) // install dependencies locally by default, // or install current folder globally @@ -278,26 +278,46 @@ function save (where, installed, tree, pretty, cb) { // that the submodules are not immediately require()able. // TODO: Show the complete tree, ls-style, but only if --long is provided function prettify (tree, installed) { - // XXX This should match the data structure provided by npm ls --json - if (npm.config.get("json")) return JSON.stringify(tree, null, 2) - if (npm.config.get("parseable")) return parseable(installed) - return Object.keys(tree).map(function (p) { - p = tree[p] - var c = "" - if (p.children && p.children.length) { - pref = "\n" - var l = p.children.pop() - c = p.children.map(function (c) { - var gc = c.children && c.children.length - ? " (" + c.children.map(function (gc) { - return gc.what - }).join(" ") + ")" - : "" - return "\n├── " + c.what + gc - }).join("") + "\n└── " + l.what + if (npm.config.get("json")) { + function red (set, kv) { + set[kv[0]] = kv[1] + return set } - return [p.what, p.where, c].join(" ") + tree = Object.keys(tree).map(function (p) { + if (!tree[p]) return null + var what = tree[p].what.split("@") + , name = what.shift() + , version = what.join("@") + , o = { name: name, version: version, from: tree[p].from } + o.dependencies = tree[p].children.map(function P (dep) { + var what = dep.what.split("@") + , name = what.shift() + , version = what.join("@") + , o = { version: version, from: dep.from } + o.dependencies = dep.children.map(P).reduce(red, {}) + return [name, o] + }).reduce(red, {}) + return o + }) + + return JSON.stringify(tree, null, 2) + } + if (npm.config.get("parseable")) return parseable(installed) + + return Object.keys(tree).map(function (p) { + return archy({ label: tree[p].what + " " + p + , nodes: (tree[p].children || []).map(function P (c) { + if (npm.config.get("long")) { + return { label: c.what, nodes: c.children.map(P) } + } + var g = c.children.map(function (g) { + return g.what + }).join(", ") + if (g) g = " (" + g + ")" + return c.what + g + }) + }) }).join("\n") } diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js index 274d0f22b..276530c35 100644 --- a/deps/npm/lib/ls.js +++ b/deps/npm/lib/ls.js @@ -13,6 +13,7 @@ var npm = require("./npm.js") , log = require("./utils/log.js") , relativize = require("./utils/relativize.js") , path = require("path") + , archy = require("archy") ls.usage = "npm ls" @@ -43,13 +44,22 @@ function ls (args, silent, cb) { } return o }, 2) - } else { - out = makePretty(bfsify(data), long, dir).join("\n") + } else if (npm.config.get("parseable")) { + out = makeParseable(bfsify(data), long, dir) + } else if (data) { + out = makeArchy(bfsify(data), long, dir) } output.write(out, function (er) { cb(er, data, lite) }) }) } +function alphasort (a, b) { + a = a.toLowerCase() + b = b.toLowerCase() + return a > b ? 1 + : a < b ? -1 : 0 +} + function getLite (data, noname) { var lite = {} , maxDepth = npm.config.get("depth") @@ -147,103 +157,115 @@ function bfsify (root, current, queue, seen) { } -function makePretty (data, long, dir, prefix, list) { - var top = !list - list = list || [] - prefix = prefix || "" - list.push(format(data, long, prefix, dir)) - var deps = data.dependencies || {} - , childPref = prefix.split("├─").join("│ ") - .split("└─").join(" ") - , depList = Object.keys(deps) - , depLast = depList.length - 1 - , maxDepth = npm.config.get("depth") - Object.keys(deps).sort(function (a, b) { - return a > b ? 1 : -1 - }).forEach(function (d, i) { - var depData = deps[d] - if (typeof depData === "string") { - if (data.depth < maxDepth) { - var p = data.link || data.path - log.warn("Unmet dependency in "+p, d+" "+deps[d]) - depData = npm.config.get("parseable") - ? ( npm.config.get("long") - ? path.resolve(data.path, "node_modules", d) - + ":"+d+"@"+JSON.stringify(depData)+":INVALID:MISSING" - : "" ) - : "─ \033[31;40mUNMET DEPENDENCY\033[0m "+d+" "+depData - } else { - if (npm.config.get("parseable")) { - depData = path.resolve(data.path, "node_modules", d) - + (npm.config.get("long") - ? ":" + d + "@" + JSON.stringify(depData) - + ":" // no realpath resolved - + ":MAXDEPTH" - : "") - } else { - depData = "─ "+d+"@'"+depData +"' (max depth reached)" - } - } - } - var c = i === depLast ? "└─" : "├─" - makePretty(depData, long, dir, childPref + c, list) - }) - if (top && list.length === 1 && !data._id) { - if (!npm.config.get("parseable")) { - list.push("(empty)") - } else if (npm.config.get("long")) list[0] += ":EMPTY" - } - return list.filter(function (l) { return l && l.trim() }) +function makeArchy (data, long, dir) { + var out = makeArchy_(data, long, dir, 0) + return archy(out, "", { unicode: npm.config.get("unicode") }) } -function ugly (data) { +function makeArchy_ (data, long, dir, depth, parent, d) { if (typeof data === "string") { + if (depth < npm.config.get("depth")) { + // just missing + var p = parent.link || parent.path + log.warn("Unmet dependency in "+p, d+" "+data) + data = "\033[31;40mUNMET DEPENDENCY\033[0m " + d + " " + data + } else { + data = d+"@'"+ data +"' (max depth reached)" + } return data } - if (!npm.config.get("long")) return data.path - return data.path - + ":" + (data._id || "") - + ":" + (data.realPath !== data.path ? data.realPath : "") - + (data.extraneous ? ":EXTRANEOUS" : "") - + (data.invalid ? ":INVALID" : "") -} + var out = {} + // the top level is a bit special. + out.label = data._id ? data._id + " " : "" + if (data.link) out.label += "-> " + data.link -function format (data, long, prefix, dir) { - if (npm.config.get("parseable")) return ugly(data) - if (typeof data === "string") { - return prefix + data - } -// console.log([data.path, dir], "relativize") - var depLen = Object.keys(data.dependencies).length - , space = prefix.split("├─").join("│ ") - .split("└─").join(" ") - + (depLen ? "" : " ") - , rel = relativize(data.path || "", dir) - , l = prefix - + (rel === "." ? "" : depLen ? "┬ " : "─ ") - + (data._id ? data._id + " " : "") - + (data.link ? "-> " + data.link : "") + "" - + (rel === "." && !(long && data._id) ? dir : "") if (data.invalid) { - if (data.realName !== data.name) l += " ("+data.realName+")" - l += " \033[31;40minvalid\033[0m" + if (data.realName !== data.name) out.label += " ("+data.realName+")" + out.label += " \033[31;40minvalid\033[0m" } - if (data.extraneous && rel !== ".") { - l += " \033[32;40mextraneous\033[0m" + + if (data.extraneous && data.path !== dir) { + out.label += " \033[32;40mextraneous\033[0m" } - if (!long || !data._id) return l + + if (long) { + if (dir === data.path) out.label += "\n" + dir + out.label += "\n" + getExtras(data, dir) + } else if (dir === data.path) { + out.label += dir + } + + // now all the children. + out.nodes = Object.keys(data.dependencies || {}) + .sort(alphasort).map(function (d) { + return makeArchy_(data.dependencies[d], long, dir, depth + 1, data, d) + }) + + if (out.nodes.length === 0 && data.path === dir) { + out.nodes = ["(empty)"] + } + + return out +} + +function getExtras (data, dir) { var extras = [] - if (rel !== ".") extras.push(rel) - else extras.push(dir) + , rel = relativize(data.path || "", dir) + , url = require("url") + if (data.description) extras.push(data.description) if (data.repository) extras.push(data.repository.url) if (data.homepage) extras.push(data.homepage) - extras = extras.filter(function (e) { return e }) - var lastExtra = !depLen && extras.length - 1 - l += extras.map(function (e, i) { - var indent = !depLen ? " " : "│ " - return "\n" + space + indent + e - }).join("") - return l + if (data._from) { + var from = data._from + if (from.indexOf(data.name + "@") === 0) { + from = from.substr(data.name.length + 1) + } + var u = url.parse(from) + if (u.protocol) extras.push(from) + } + return extras.join("\n") +} + + +function makeParseable (data, long, dir, depth, parent, d) { + depth = depth || 0 + + return [ makeParseable_(data, long, dir, depth, parent, d) ] + .concat(Object.keys(data.dependencies || {}) + .sort(alphasort).map(function (d) { + return makeParseable(data.dependencies[d], long, dir, depth + 1, data, d) + })) + .join("\n") +} + +function makeParseable_ (data, long, dir, depth, parent, d) { + if (typeof data === "string") { + if (data.depth < npm.config.get("depth")) { + var p = parent.link || parent.path + log.warn("Unmet dependency in "+p, d+" "+data) + data = npm.config.get("long") + ? path.resolve(parent.path, "node_modules", d) + + ":"+d+"@"+JSON.stringify(data)+":INVALID:MISSING" + : "" + } else { + data = path.resolve(data.path, "node_modules", d) + + (npm.config.get("long") + ? ":" + d + "@" + JSON.stringify(data) + + ":" // no realpath resolved + + ":MAXDEPTH" + : "") + } + + return data + } + + if (!npm.config.get("long")) return data.path + + return data.path + + ":" + (data._id || "") + + ":" + (data.realPath !== data.path ? data.realPath : "") + + (data.extraneous ? ":EXTRANEOUS" : "") + + (data.invalid ? ":INVALID" : "") } diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js index afce0f9f2..456948a29 100644 --- a/deps/npm/lib/npm.js +++ b/deps/npm/lib/npm.js @@ -25,8 +25,8 @@ var EventEmitter = require("events").EventEmitter , which = require("which") , semver = require("semver") , findPrefix = require("./utils/find-prefix.js") - , getUid = require("./utils/uid-number.js") - , mkdir = require("./utils/mkdir-p.js") + , getUid = require("uid-number") + , mkdir = require("mkdirp") , slide = require("slide") , chain = slide.chain @@ -40,30 +40,6 @@ npm.ECYCLE = {} npm.ENOTSUP = {} npm.EBADPLATFORM = {} -// HACK for windows -if (process.platform === "win32") { - // stub in unavailable methods from process and fs binding - if (!process.getuid) process.getuid = function() {} - if (!process.getgid) process.getgid = function() {} - var fsBinding = process.binding("fs") - if (!fsBinding.chown) fsBinding.chown = function() { - var cb = arguments[arguments.length - 1] - if (typeof cb == "function") cb() - } - - // patch rename/renameSync, but this should really be fixed in node - var _fsRename = fs.rename - , _fsPathPatch - _fsPathPatch = function(p) { - return p && p.replace(/\\/g, "/") || p; - } - fs.rename = function(p1, p2) { - arguments[0] = _fsPathPatch(p1) - arguments[1] = _fsPathPatch(p2) - return _fsRename.apply(fs, arguments); - } -} - try { // startup, ok to do this synchronously var j = JSON.parse(fs.readFileSync( @@ -310,7 +286,7 @@ function loadPrefix (npm, conf, cb) { }) // the prefix MUST exist, or else nothing works. if (!npm.config.get("global")) { - mkdir(p, npm.modes.exec, null, null, true, next) + mkdir(p, next) } else { next(er) } @@ -323,7 +299,7 @@ function loadPrefix (npm, conf, cb) { , enumerable : true }) // the prefix MUST exist, or else nothing works. - mkdir(gp, npm.modes.exec, null, null, true, next) + mkdir(gp, next) }) var i = 2 diff --git a/deps/npm/lib/utils/cmd-shim.js b/deps/npm/lib/utils/cmd-shim.js index f53ab3cf8..e24da36f6 100644 --- a/deps/npm/lib/utils/cmd-shim.js +++ b/deps/npm/lib/utils/cmd-shim.js @@ -14,7 +14,7 @@ cmdShim.ifExists = cmdShimIfExists var fs = require("graceful-fs") , chain = require("slide").chain - , mkdir = require("./mkdir-p.js") + , mkdir = require("mkdirp") , rm = require("rimraf") , log = require("./log.js") , path = require("path") diff --git a/deps/npm/lib/utils/completion/file-completion.js b/deps/npm/lib/utils/completion/file-completion.js index 427efefb4..c1c241d68 100644 --- a/deps/npm/lib/utils/completion/file-completion.js +++ b/deps/npm/lib/utils/completion/file-completion.js @@ -1,7 +1,7 @@ module.exports = fileCompletion var find = require("../find.js") - , mkdir = require("../mkdir-p.js") + , mkdir = require("mkdirp") , path = require("path") function fileCompletion (root, req, depth, cb) { diff --git a/deps/npm/lib/utils/config-defs.js b/deps/npm/lib/utils/config-defs.js index 39df42f91..0b36afdc1 100644 --- a/deps/npm/lib/utils/config-defs.js +++ b/deps/npm/lib/utils/config-defs.js @@ -9,6 +9,7 @@ var path = require("path") , os = require("os") , nopt = require("nopt") , log = require("./log.js") + , npm = require("../npm.js") function Octal () {} function validateOctal (data, k, val) { @@ -183,6 +184,7 @@ Object.defineProperty(exports, "defaults", {get: function () { , proxy : process.env.HTTP_PROXY || process.env.http_proxy || null , "https-proxy" : process.env.HTTPS_PROXY || process.env.https_proxy || process.env.HTTP_PROXY || process.env.http_proxy || null + , "user-agent" : "npm/" + npm.version + " node/" + process.version , "rebuild-bundle" : true , registry : "http" + (httpsOk ? "s" : "") + "://registry.npmjs.org/" , rollback : true @@ -239,6 +241,7 @@ exports.types = , globalignorefile: path , group : [Number, String] , "https-proxy" : [null, url] + , "user-agent" : String , ignore : String , "init.version" : [null, semver] , "init.author.name" : String diff --git a/deps/npm/lib/utils/excludes.js b/deps/npm/lib/utils/excludes.js deleted file mode 100644 index 83935ee35..000000000 --- a/deps/npm/lib/utils/excludes.js +++ /dev/null @@ -1,159 +0,0 @@ -// build up a set of exclude lists in order of precedence: -// [ ["!foo", "bar"] -// , ["foo", "!bar"] ] -// being *included* will override a previous exclusion, -// and being excluded will override a previous inclusion. -// -// Each time the tar file-list generator thingie enters a new directory, -// it calls "addIgnoreFile(dir, list, cb)". If an ignore file is found, -// then it is added to the list and the cb() is called with an -// child of the original list, so that we don't have -// to worry about popping it off at the right time, since other -// directories will continue to use the original parent list. -// -// If no ignore file is found, then the original list is returned. -// -// To start off with, ~/.{npm,git}ignore is added, as is -// prefix/{npm,git}ignore, effectively treated as if they were in the -// base package directory. - -exports.addIgnoreFile = addIgnoreFile -exports.readIgnoreFile = readIgnoreFile -exports.parseIgnoreFile = parseIgnoreFile -exports.test = test -exports.filter = filter - -var path = require("path") - , fs = require("graceful-fs") - , minimatch = require("minimatch") - , relativize = require("./relativize.js") - , log = require("./log.js") - -// todo: memoize - -// read an ignore file, or fall back to the -// "gitBase" file in the same directory. -function readIgnoreFile (file, gitBase, cb) { - //log.warn(file, "ignoreFile") - if (!file) return cb(null, "") - fs.readFile(file, function (er, data) { - if (!er || !gitBase) return cb(null, data || "") - var gitFile = path.resolve(path.dirname(file), gitBase) - fs.readFile(gitFile, function (er, data) { - return cb(null, data || "") - }) - }) -} - -// read a file, and then return the list of patterns -function parseIgnoreFile (file, gitBase, dir, cb) { - readIgnoreFile(file, gitBase, function (er, data) { - data = data ? data.toString("utf8") : "" - - data = data.split(/[\r\n]+/).map(function (p) { - return p.trim() - }).filter(function (p) { - return p.length && p.charAt(0) !== "#" - }) - data.dir = dir - return cb(er, data) - }) -} - -// add an ignore file to an existing list which can -// then be passed to the test() function. If the ignore -// file doesn't exist, then the list is unmodified. If -// it is, then a concat-child of the original is returned, -// so that this is suitable for walking a directory tree. -function addIgnoreFile (file, gitBase, list, dir, cb) { - if (typeof cb !== "function") cb = dir, dir = path.dirname(file) - if (typeof cb !== "function") cb = list, list = [] - parseIgnoreFile(file, gitBase, dir, function (er, data) { - if (!er && data) { - // package.json "files" array trumps everything - // Make sure it's always last. - if (list.length && list[list.length-1].packageFiles) { - list = list.concat([data, list.pop()]) - } else { - list = list.concat([data]) - } - } - cb(er, list) - }) -} - - -// no IO -// loop through the lists created in the functions above, and test to -// see if a file should be included or not, given those exclude lists. -function test (file, excludeList) { - if (path.basename(file) === "package.json") return true - // log.warn(file, "test file") - // log.warn(excludeList, "test list") - var incRe = /^\!(\!\!)*/ - , excluded = false - , mmconf = { matchBase: true, dot: true } - for (var i = 0, l = excludeList.length; i < l; i ++) { - var excludes = excludeList[i] - , dir = excludes.dir - - // chop the filename down to be relative to excludeDir - var rf = relativize(file, dir, true) - rf = rf.replace(/^\.?\//, "") - if (file.slice(-1) === "/") rf += "/" - - // log.warn([file, rf], "rf") - - for (var ii = 0, ll = excludes.length; ii < ll; ii ++) { - var ex = excludes[ii].replace(/^(!*)\//, "$1") - , inc = !!ex.match(incRe) - - // log.warn([ex, rf], "ex, rf") - // excluding/including a dir excludes/includes all the files in it. - if (ex.slice(-1) === "/") ex += "**" - - // if this is not an inclusion attempt, and someone else - // excluded it, then just continue, because there's nothing - // that can be done here to change the exclusion. - if (!inc && excluded) continue - - // if it's an inclusion attempt, and the file has not been - // excluded, then skip it, because there's no need to try again. - if (inc && !excluded) continue - - // if it matches the pattern, then it should be excluded. - excluded = !!minimatch(rf, ex, mmconf) - // log.error([rf, ex, excluded], "rf, ex, excluded") - - // if you include foo, then it also includes foo/bar.js - if (inc && excluded && ex.slice(-3) !== "/**") { - excluded = minimatch(rf, ex + "/**", mmconf) - // log.warn([rf, ex + "/**", inc, excluded], "dir without /") - } - - // if you exclude foo, then it also excludes foo/bar.js - if (!inc - && excluded - && ex.slice(-3) !== "/**" - && rf.slice(-1) === "/" - && excludes.indexOf(ex + "/**") === -1) { - // log.warn(ex + "/**", "adding dir-matching exclude pattern") - excludes.splice(ii, 1, ex, ex + "/**") - ll ++ - } - } - - // log.warn([rf, excluded, excludes], "rf, excluded, excludes") - } - // true if it *should* be included - // log.warn([file, excludeList, excluded], "file, excluded") - return !excluded -} - -// returns a function suitable for Array#filter -function filter (dir, list) { return function (file) { - file = file.trim() - var testFile = path.resolve(dir, file) - if (file.slice(-1) === "/") testFile += "/" - return file && test(testFile, list) -}} diff --git a/deps/npm/lib/utils/fetch.js b/deps/npm/lib/utils/fetch.js index 935e82039..bc1c095cd 100644 --- a/deps/npm/lib/utils/fetch.js +++ b/deps/npm/lib/utils/fetch.js @@ -8,7 +8,8 @@ var request = require("request") , url = require("url") , log = require("./log.js") , path = require("path") - , mkdir = require("./mkdir-p.js") + , mkdir = require("mkdirp") + , chownr = require("chownr") , regHost module.exports = fetch @@ -16,7 +17,7 @@ module.exports = fetch function fetch (remote, local, headers, cb) { if (typeof cb !== "function") cb = headers, headers = {} log.verbose(local, "fetch to") - mkdir(path.dirname(local), function (er) { + mkdir(path.dirname(local), function (er, made) { if (er) return cb(er) fetch_(remote, local, headers, cb) }) @@ -58,6 +59,7 @@ function makeRequest (remote, fstr, headers) { , proxy: proxy , strictSSL: npm.config.get("strict-ssl") , ca: remote.host === regHost ? npm.config.get("ca") : undefined + , headers: { "user-agent": npm.config.get("user-agent") } , onResponse: onResponse }).pipe(fstr) function onResponse (er, res) { if (er) return fstr.emit("error", er) diff --git a/deps/npm/lib/utils/link.js b/deps/npm/lib/utils/link.js index 918481068..7fa80d5e1 100644 --- a/deps/npm/lib/utils/link.js +++ b/deps/npm/lib/utils/link.js @@ -4,7 +4,7 @@ link.ifExists = linkIfExists var fs = require("graceful-fs") , chain = require("slide").chain - , mkdir = require("./mkdir-p.js") + , mkdir = require("mkdirp") , rm = require("./gently-rm.js") , log = require("./log.js") , path = require("path") diff --git a/deps/npm/lib/utils/mkdir-p.js b/deps/npm/lib/utils/mkdir-p.js deleted file mode 100644 index cc2b465fb..000000000 --- a/deps/npm/lib/utils/mkdir-p.js +++ /dev/null @@ -1,191 +0,0 @@ - -var log = require("./log.js") - , fs = require("graceful-fs") - , path = require("path") - , npm = require("../npm.js") - , exec = require("./exec.js") - , uidNumber = require("./uid-number.js") - , umask = process.umask() - , umaskOrig = umask - , addedUmaskExit = false - , mkdirCache = {} - -module.exports = mkdir -function mkdir (ensure, mode, uid, gid, noChmod, cb_) { - if (typeof cb_ !== "function") cb_ = noChmod, noChmod = null - if (typeof cb_ !== "function") cb_ = gid, gid = null - if (typeof cb_ !== "function") cb_ = uid, uid = null - if (typeof cb_ !== "function") cb_ = mode, mode = npm.modes.exec - - if (mode & umask) { - log.verbose(mode.toString(8), "umasking from "+umask.toString(8)) - process.umask(umask = 0) - if (!addedUmaskExit) { - addedUmaskExit = true - process.on("exit", function () { process.umask(umask = umaskOrig) }) - } - } - - ensure = path.resolve(ensure).replace(/\/+$/, '') - - // mkdir("/") should not do anything, since that always exists. - if (!ensure - || ( process.platform === "win32" - && ensure.match(/^[a-zA-Z]:(\\|\/)?$/))) { - return cb_() - } - - if (mkdirCache.hasOwnProperty(ensure)) { - return mkdirCache[ensure].push(cb_) - } - mkdirCache[ensure] = [cb_] - - function cb (er) { - var cbs = mkdirCache[ensure] - delete mkdirCache[ensure] - cbs.forEach(function (c) { c(er) }) - } - - if (uid === null && gid === null) { - return mkdir_(ensure, mode, uid, gid, noChmod, cb) - } - - uidNumber(uid, gid, function (er, uid, gid) { - if (er) return cb(er) - mkdir_(ensure, mode, uid, gid, noChmod, cb) - }) -} - -function mkdir_ (ensure, mode, uid, gid, noChmod, cb) { - // if it's already a dir, then just check the bits and owner. - fs.stat(ensure, function (er, s) { - if (s && s.isDirectory()) { - // check mode, uid, and gid. - if ((noChmod || (s.mode & mode) === mode) - && (typeof uid !== "number" || s.uid === uid) - && (typeof gid !== "number" || s.gid === gid)) return cb() - return done(ensure, mode, uid, gid, noChmod, cb) - } - return walkDirs(ensure, mode, uid, gid, noChmod, cb) - }) -} - -function done (ensure, mode, uid, gid, noChmod, cb) { - // now the directory has been created. - // chown it to the desired uid/gid - // Don't chown the npm.root dir, though, in case we're - // in unsafe-perm mode. - log.verbose("done: "+ensure+" "+mode.toString(8), "mkdir") - - // only chmod if noChmod isn't set. - var d = done_(ensure, mode, uid, gid, cb) - if (noChmod) return d() - fs.chmod(ensure, mode, d) -} - -function done_ (ensure, mode, uid, gid, cb) { - return function (er) { - if (er - || ensure === npm.dir - || typeof uid !== "number" - || typeof gid !== "number" - || npm.config.get("unsafe-perm")) return cb(er) - uid = Math.floor(uid) - gid = Math.floor(gid) - fs.chown(ensure, uid, gid, cb) - } -} - -var pathSplit = process.platform === "win32" ? /\/|\\/ : "/" -function walkDirs (ensure, mode, uid, gid, noChmod, cb) { - var dirs = ensure.split(pathSplit) - , walker = [] - , foundUID = null - , foundGID = null - - // gobble the "/" or C: first - walker.push(dirs.shift()) - - // The loop that goes through and stats each dir. - ;(function S (d) { - // no more directory steps left. - if (d === undefined) { - // do the chown stuff - return done(ensure, mode, uid, gid, noChmod, cb) - } - - // get the absolute dir for the next piece being stat'd - walker.push(d) - var dir = walker.join(path.SPLIT_CHAR) - - // stat callback lambda - fs.stat(dir, function STATCB (er, s) { - if (er) { - // the stat failed - directory does not exist. - - log.verbose(er.message, "mkdir (expected) error") - - // use the same uid/gid as the nearest parent, if not set. - if (foundUID !== null) uid = foundUID - if (foundGID !== null) gid = foundGID - - // make the directory - fs.mkdir(dir, mode, function MKDIRCB (er) { - // since stat and mkdir are done as two separate syscalls, - // operating on a path rather than a file descriptor, it's - // possible that the directory didn't exist when we did - // the stat, but then *did* exist when we go to to the mkdir. - // If we didn't care about uid/gid, we could just mkdir - // repeatedly, failing on any error other than "EEXIST". - if (er && er.message.indexOf("EEXIST") === 0) { - return fs.stat(dir, STATCB) - } - - // any other kind of error is not saveable. - if (er) return cb(er) - - // at this point, we've just created a new directory successfully. - - // if we care about permissions - if (!npm.config.get("unsafe-perm") // care about permissions - // specified a uid and gid - && uid !== null - && gid !== null ) { - // set the proper ownership - return fs.chown(dir, uid, gid, function (er) { - if (er) return cb(er) - // attack the next portion of the path. - S(dirs.shift()) - }) - } else { - // either we don't care about ownership, or it's already right. - S(dirs.shift()) - } - }) // mkdir - - } else { - // the stat succeeded. - if (s.isDirectory()) { - // if it's a directory, that's good. - // if the uid and gid aren't already set, then try to preserve - // the ownership on up the tree. Things in ~ remain owned by - // the user, things in / remain owned by root, etc. - if (uid === null && typeof s.uid === "number") foundUID = s.uid - if (gid === null && typeof s.gid === "number") foundGID = s.gid - - // move onto next portion of path - S(dirs.shift()) - - } else { - // the stat succeeded, but it's not a directory - log.verbose(dir, "mkdir exists") - log.silly(s, "stat("+dir+")") - log.verbose(s.isDirectory(), "isDirectory()") - cb(new Error("Failed to mkdir "+dir+": File exists")) - }// if (isDirectory) else - } // if (stat failed) else - }) // stat - - // start the S function with the first item in the list of directories. - })(dirs.shift()) -} diff --git a/deps/npm/lib/utils/npm-registry-client/get.js b/deps/npm/lib/utils/npm-registry-client/get.js index 49a8b4cc0..e0902f027 100644 --- a/deps/npm/lib/utils/npm-registry-client/get.js +++ b/deps/npm/lib/utils/npm-registry-client/get.js @@ -6,8 +6,9 @@ var GET = require("./request.js").GET , npm = require("../../npm.js") , path = require("path") , log = require("../log.js") - , mkdir = require("../mkdir-p.js") + , mkdir = require("mkdirp") , cacheStat = null + , chownr = require("chownr") function get (project, version, timeout, nofollow, staleOk, cb) { if (typeof cb !== "function") cb = staleOk, staleOk = false @@ -173,13 +174,13 @@ function saveToCache (cache, data, saved) { } function saveToCache_ (cache, data, uid, gid, saved) { - mkdir(path.dirname(cache), npm.modes.exec, uid, gid, function (er) { + mkdir(path.dirname(cache), function (er, made) { if (er) return saved() fs.writeFile(cache, JSON.stringify(data), function (er) { if (er || uid === null || gid === null) { return saved() } - fs.chown(cache, uid, gid, saved) + chownr(made || cache, uid, gid, saved) }) }) } diff --git a/deps/npm/lib/utils/npm-registry-client/request.js b/deps/npm/lib/utils/npm-registry-client/request.js index 5213c7966..d5122629d 100644 --- a/deps/npm/lib/utils/npm-registry-client/request.js +++ b/deps/npm/lib/utils/npm-registry-client/request.js @@ -94,6 +94,8 @@ function makeRequest (method, remote, where, what, etag, nofollow, cb) { headers.accept = "application/json" + headers["user-agent"] = npm.config.get("user-agent") + opts.proxy = npm.config.get( remote.protocol === "https:" ? "https-proxy" : "proxy" ) diff --git a/deps/npm/lib/utils/read-json.js b/deps/npm/lib/utils/read-json.js index 9d76a16b8..d1bba10f5 100644 --- a/deps/npm/lib/utils/read-json.js +++ b/deps/npm/lib/utils/read-json.js @@ -52,27 +52,11 @@ function readJson (jsonFile, opts, cb) { if (er) return hasGyp(false) // see if there are any *.gyp files in there. - // If there are, then copy them to binding.gyp - // if there are not, then just proceed without gf = gf.filter(function (f) { return f.match(/\.gyp$/) }) gf = gf[0] - if (!gf) return hasGyp(false) - if (gf === "binding.gyp") return hasGyp(true) - - // need to rename. windows is annoying. - // why not fs.rename? because we just saw the file, so it'll - // be cached for potentially several seconds on a network share. - return fs.readFile(path.resolve(pkgdir, gf), function (er, d) { - if (er) return hasGyp(false) - fs.writeFile(path.resolve(pkgdir, "binding.gyp"), d, function (er) { - if (er) return hasGyp(false) - fs.unlink(path.resolve(pkgdir, gf), function (er) { - return hasGyp(!er) - }) - }) - }) + return hasGyp(!!gf) }) } diff --git a/deps/npm/lib/utils/tar.js b/deps/npm/lib/utils/tar.js index 906913fe1..415eb7f9e 100644 --- a/deps/npm/lib/utils/tar.js +++ b/deps/npm/lib/utils/tar.js @@ -1,27 +1,21 @@ -// XXX lib/cache.js and this file need to be rewritten. - // commands for packing and unpacking tarballs // this file is used by lib/cache.js var npm = require("../npm.js") , fs = require("graceful-fs") - , exec = require("./exec.js") - , find = require("./find.js") - , mkdir = require("./mkdir-p.js") - , asyncMap = require("slide").asyncMap , path = require("path") , log = require("./log.js") - , uidNumber = require("./uid-number.js") + , uidNumber = require("uid-number") , rm = require("rimraf") , readJson = require("./read-json.js") , relativize = require("./relativize.js") , cache = require("../cache.js") - , excludes = require("./excludes.js") , myUid = process.getuid && process.getuid() , myGid = process.getgid && process.getgid() , tar = require("tar") , zlib = require("zlib") , fstream = require("fstream") + , Packer = require("fstream-npm") if (process.env.SUDO_UID && myUid === 0) { if (!isNaN(process.env.SUDO_UID)) myUid = +process.env.SUDO_UID @@ -30,100 +24,16 @@ if (process.env.SUDO_UID && myUid === 0) { exports.pack = pack exports.unpack = unpack -exports.makeList = makeList function pack (targetTarball, folder, pkg, dfc, cb) { + log.verbose([targetTarball, folder], "tar.pack") if (typeof cb !== "function") cb = dfc, dfc = true - folder = path.resolve(folder) - - log.verbose(folder, "pack") - - if (typeof pkg === "function") { - cb = pkg, pkg = null - return readJson(path.resolve(folder, "package.json"), function (er, pkg) { - if (er) return log.er(cb, "Couldn't find package.json in "+folder)(er) - pack(targetTarball, folder, pkg, dfc, cb) - }) - } - log.verbose(folder+" "+targetTarball, "pack") - var parent = path.dirname(folder) - , addFolder = path.basename(folder) - - var confEx = npm.config.get("ignore") - log.silly(folder, "makeList") - makeList(folder, pkg, dfc, function (er, files, cleanup) { - if (er) return cb(er) - // log.silly(files, "files") - return packFiles(targetTarball, parent, files, pkg, function (er) { - if (!cleanup || !cleanup.length) return cb(er) - // try to be a good citizen, even/especially in the event of failure. - cleanupResolveLinkDep(cleanup, function (er2) { - if (er || er2) { - if (er) log(er, "packing tarball") - if (er2) log(er2, "while cleaning up resolved deps") - } - return cb(er || er2) - }) - }) - }) -} - -function packFiles (targetTarball, parent, files, pkg, cb_) { - - var p - - files = files.map(function (f) { - p = f.split(/\/|\\/)[0] - return path.resolve(parent, f) - }) - - parent = path.resolve(parent, p) - - var called = false - function cb (er) { - if (called) return - called = true - cb_(er) - } log.verbose(targetTarball, "tarball") - log.verbose(parent, "parent") - fstream.Reader({ type: "Directory" - , path: parent - , filter: function () { - // files should *always* get into tarballs - // in a user-writable state, even if they're - // being installed from some wackey vm-mounted - // read-only filesystem. - this.props.mode = this.props.mode | 0200 - var inc = -1 !== files.indexOf(this.path) + log.verbose(folder, "folder") + new Packer({ path: folder, type: "Directory", isDirectory: true }) + .on("error", log.er(cb, "error reading "+folder)) - // symbolic links are not allowed in packages. - if (this.type.match(/^.*Link$/)) { - log.warn( this.path.substr(parent.length + 1) - + ' -> ' + this.linkpath - , "excluding symbolic link") - return false - } - - // WARNING! Hackety hack! - // XXX Fix this in a better way. - // Rename .gitignore to .npmignore if there is not a - // .npmignore file there already, the better to lock - // down installed packages with git for deployment. - if (this.basename === ".gitignore") { - if (this.parent._entries.indexOf(".npmignore") !== -1) { - return false - } - var d = path.dirname(this.path) - this.basename = ".npmignore" - this.path = path.join(d, ".npmignore") - } - - return inc - } - }) - .on("error", log.er(cb, "error reading "+parent)) // By default, npm includes some proprietary attributes in the // package tarball. This is sane, and allowed by the spec. // However, npm *itself* excludes these from its own package, @@ -135,11 +45,14 @@ function packFiles (targetTarball, parent, files, pkg, cb_) { .on("error", log.er(cb, "gzip error "+targetTarball)) .pipe(fstream.Writer({ type: "File", path: targetTarball })) .on("error", log.er(cb, "Could not write "+targetTarball)) - .on("close", cb) + .on("close", function () { + cb() + }) } function unpack (tarball, unpackTarget, dMode, fMode, uid, gid, cb) { + log.verbose(tarball, "unpack") if (typeof cb !== "function") cb = gid, gid = null if (typeof cb !== "function") cb = uid, uid = null if (typeof cb !== "function") cb = fMode, fMode = npm.modes.file @@ -152,31 +65,20 @@ function unpack (tarball, unpackTarget, dMode, fMode, uid, gid, cb) { } function unpack_ ( tarball, unpackTarget, dMode, fMode, uid, gid, cb ) { - // If the desired target is /path/to/foo, - // then unpack into /path/to/.foo.npm/{something} - // rename that to /path/to/foo, and delete /path/to/.foo.npm var parent = path.dirname(unpackTarget) , base = path.basename(unpackTarget) rm(unpackTarget, function (er) { if (er) return cb(er) - mkdir(unpackTarget, dMode || npm.modes.exec, uid, gid, function (er) { - log.verbose([uid, gid], "unpack_ uid, gid") - log.verbose(unpackTarget, "unpackTarget") + // gzip {tarball} --decompress --stdout \ + // | tar -mvxpf - --strip-components=1 -C {unpackTarget} + gunzTarPerm( tarball, unpackTarget + , dMode, fMode + , uid, gid + , function (er, folder) { if (er) return cb(er) - - // cp the gzip of the tarball, pipe the stdout into tar's stdin - // gzip {tarball} --decompress --stdout \ - // | tar -mvxpf - --strip-components=1 -C {unpackTarget} - gunzTarPerm( tarball, unpackTarget - , dMode, fMode - , uid, gid - , function (er, folder) { - if (er) return cb(er) - log.verbose(folder, "gunzed") - readJson(path.resolve(folder, "package.json"), cb) - }) + readJson(path.resolve(folder, "package.json"), cb) }) }) } @@ -204,6 +106,7 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) { } function extractEntry (entry) { + log.silly(entry.path, "extracting entry") // never create things that are user-unreadable, // or dirs that are user-un-listable. Only leads to headaches. var originalMode = entry.mode = entry.mode || entry.props.mode @@ -225,6 +128,13 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) { var extractOpts = { type: "Directory", path: target, strip: 1 } + if (process.platform !== "win32" && + typeof uid === "number" && + typeof gid === "number") { + extractOpts.uid = uid + extractOpts.gid = gid + } + extractOpts.filter = function () { // symbolic links are not allowed in packages. if (this.type.match(/^.*Link$/)) { @@ -246,7 +156,6 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) { if (c[0] === 0x1F && c[1] === 0x8B && c[2] === 0x08) { - var extracter = tar.Extract(extractOpts) fst .pipe(zlib.Unzip()) .on("error", log.er(cb, "unzip error "+tarball)) @@ -263,8 +172,17 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) { .on("close", cb) } else { // naked js file + var jsOpts = { path: path.resolve(target, "index.js") } + + if (process.platform !== "win32" && + typeof uid === "number" && + typeof gid === "number") { + jsOpts.uid = uid + jsOpts.gid = gid + } + fst - .pipe(fstream.Writer({ path: path.resolve(target, "index.js") })) + .pipe(fstream.Writer(jsOpts)) .on("error", log.er(cb, "copy error "+tarball)) .on("close", function () { var j = path.resolve(target, "package.json") @@ -283,327 +201,3 @@ function gunzTarPerm (tarball, target, dMode, fMode, uid, gid, cb_) { fst.emit("data", c) }) } - -function makeList (dir, pkg, dfc, cb) { - if (typeof cb !== "function") cb = dfc, dfc = true - if (typeof cb !== "function") cb = pkg, pkg = null - dir = path.resolve(dir) - - if (!pkg.path) pkg.path = dir - - var name = path.basename(dir) - - // since this is a top-level traversal, get the user and global - // exclude files, as well as the "ignore" config setting. - var confIgnore = npm.config.get("ignore").trim() - .split(/[\n\r\s\t]+/) - .filter(function (i) { return i.trim() }) - , userIgnore = npm.config.get("userignorefile") - , globalIgnore = npm.config.get("globalignorefile") - , userExclude - , globalExclude - - confIgnore.dir = dir - confIgnore.name = "confIgnore" - - var defIgnore = ["build/"] - defIgnore.dir = dir - - // TODO: only look these up once, and cache outside this function - excludes.parseIgnoreFile( userIgnore, null, dir - , function (er, uex) { - if (er) return cb(er) - userExclude = uex - next() - }) - - excludes.parseIgnoreFile( globalIgnore, null, dir - , function (er, gex) { - if (er) return cb(er) - globalExclude = gex - next() - }) - - function next () { - if (!globalExclude || !userExclude) return - var exList = [ defIgnore, confIgnore, globalExclude, userExclude ] - - makeList_(dir, pkg, exList, dfc, function (er, files, cleanup) { - if (er) return cb(er) - var dirLen = dir.replace(/(\/|\\)$/, "").length + 1 - log.silly([dir, dirLen], "dir, dirLen") - files = files.map(function (file) { - return path.join(name, file.substr(dirLen)) - }) - return cb(null, files, cleanup) - }) - } -} - -// Patterns ending in slashes will only match targets -// ending in slashes. To implement this, add a / to -// the filename iff it lstats isDirectory() -function readDir (dir, pkg, dfc, cb) { - fs.readdir(dir, function (er, files) { - if (er) return cb(er) - files = files.filter(function (f) { - return f && f.charAt(0) !== "/" && f.indexOf("\0") === -1 - }) - asyncMap(files, function (file, cb) { - fs.lstat(path.resolve(dir, file), function (er, st) { - if (er) return cb(null, []) - // if it's a directory, then tack "/" onto the name - // so that it can match dir-only patterns in the - // include/exclude logic later. - if (st.isDirectory()) return cb(null, file + "/") - - // if it's a symlink, then we need to do some more - // complex stuff for GH-691 - if (st.isSymbolicLink()) return readSymlink(dir, file, pkg, dfc, cb) - - // otherwise, just let it on through. - return cb(null, file) - }) - }, cb) - }) -} - -// just see where this link is pointing, and resolve relative paths. -function shallowReal (link, cb) { - link = path.resolve(link) - fs.readlink(link, function (er, t) { - if (er) return cb(er) - return cb(null, path.resolve(path.dirname(link), t), t) - }) -} - -function readSymlink (dir, file, pkg, dfc, cb) { - var isNM = dfc - && path.basename(dir) === "node_modules" - && path.dirname(dir) === pkg.path - // see if this thing is pointing outside of the package. - // external symlinks are resolved for deps, ignored for other things. - // internal symlinks are allowed through. - var df = path.resolve(dir, file) - shallowReal(df, function (er, r, target) { - if (er) return cb(null, []) // wtf? exclude file. - if (r.indexOf(dir) === 0) return cb(null, file) // internal - if (!isNM) return cb(null, []) // external non-dep - // now the fun stuff! - fs.realpath(df, function (er, resolved) { - if (er) return cb(null, []) // can't add it. - readJson(path.resolve(resolved, "package.json"), function (er) { - if (er) return cb(null, []) // not a package - resolveLinkDep(dir, file, resolved, target, pkg, function (er, f, c) { - cb(er, f, c) - }) - }) - }) - }) -} - -// put the link back the way it was. -function cleanupResolveLinkDep (cleanup, cb) { - // cut it out of the list, so that cycles will be broken. - if (!cleanup) return cb() - - asyncMap(cleanup, function (d, cb) { - rm(d[1], function (er) { - if (er) return cb(er) - fs.symlink(d[0], d[1], cb) - }) - }, cb) -} - -function resolveLinkDep (dir, file, resolved, target, pkg, cb) { - // we've already decided that this is a dep that will be bundled. - // make sure the data reflects this. - var bd = pkg.bundleDependencies || pkg.bundledDependencies || [] - delete pkg.bundledDependencies - pkg.bundleDependencies = bd - var f = path.resolve(dir, file) - , cleanup = [[target, f, resolved]] - - if (bd.indexOf(file) === -1) { - // then we don't do this one. - // just move the symlink out of the way. - return rm(f, function (er) { - cb(er, file, cleanup) - }) - } - - rm(f, function (er) { - if (er) return cb(er) - cache.add(resolved, function (er, data) { - if (er) return cb(er) - cache.unpack(data.name, data.version, f, function (er, data) { - if (er) return cb(er) - // now clear out the cache entry, since it's weird, probably. - // pass the cleanup object along so that the thing getting the - // list of files knows what to clean up afterwards. - cache.clean([data._id], function (er) { cb(er, file, cleanup) }) - }) - }) - }) -} - -// exList is a list of ignore lists. -// Each exList item is an array of patterns of files to ignore -// -function makeList_ (dir, pkg, exList, dfc, cb) { - var files = null - , cleanup = null - - readDir(dir, pkg, dfc, function (er, f, c) { - if (er) return cb(er) - cleanup = c - files = f.map(function (f) { - // no nulls in paths! - return f.split(/\0/)[0] - }).filter(function (f) { - // always remove all source control folders and - // waf/vim/OSX garbage. this is a firm requirement. - return !( f === ".git/" - || f === ".lock-wscript" - || f.match(/^\.wafpickle-[0-9]+$/) - || f === "CVS/" - || f === ".svn/" - || f === ".hg/" - || f.match(/^\..*\.swp/) - || f === ".DS_Store" - || f.match(/^\._/) - || f === "npm-debug.log" - || f === "" - || f.charAt(0) === "/" - ) - }) - - // if (files.length > 0) files.push(".") - - if (files.indexOf("package.json") !== -1 && dir !== pkg.path) { - // a package.json file starts the whole exclude/include - // logic all over. Otherwise, a parent could break its - // deps with its files list or .npmignore file. - readJson(path.resolve(dir, "package.json"), function (er, data) { - if (!er && typeof data === "object") { - data.path = dir - return makeList(dir, data, dfc, function (er, files) { - // these need to be mounted onto the directory now. - cb(er, files && files.map(function (f) { - return path.resolve(path.dirname(dir), f) - })) - }) - } - next() - }) - //next() - } else next() - - // add a local ignore file, if found. - if (files.indexOf(".npmignore") === -1 - && files.indexOf(".gitignore") === -1) next() - else { - excludes.addIgnoreFile( path.resolve(dir, ".npmignore") - , ".gitignore" - , exList - , dir - , function (er, list) { - if (!er) exList = list - next(er) - }) - } - }) - - var n = 2 - , errState = null - function next (er) { - if (errState) return - if (er) return cb(errState = er, [], cleanup) - if (-- n > 0) return - - if (!pkg) return cb(new Error("No package.json file in "+dir)) - if (pkg.path === dir && pkg.files) { - pkg.files = pkg.files.filter(function (f) { - f = f.trim() - return f && f.charAt(0) !== "#" - }) - if (!pkg.files.length) pkg.files = null - } - if (pkg.path === dir && pkg.files) { - // stuff on the files list MUST be there. - // ignore everything, then include the stuff on the files list. - var pkgFiles = ["*"].concat(pkg.files.map(function (f) { - return "!" + f - })) - pkgFiles.dir = dir - pkgFiles.packageFiles = true - exList.push(pkgFiles) - } - - if (path.basename(dir) === "node_modules" - && pkg.path === path.dirname(dir) - // do fancy crap - && dfc - // not already part of a bundled dependency - && (path.basename(path.dirname(pkg.path)) !== "node_modules" - // unless it's the root - || pkg.path === npm.prefix)) { - log.verbose(dir, "doing fancy crap") - files = filterNodeModules(files, pkg) - } else { - // If a directory is excluded, we still need to be - // able to *include* a file within it, and have that override - // the prior exclusion. - // - // This whole makeList thing probably needs to be rewritten - files = files.filter(function (f) { - return excludes.filter(dir, exList)(f) || f.slice(-1) === "/" - }) - } - - - asyncMap(files, function (file, cb) { - // if this is a dir, then dive into it. - // otherwise, don't. - file = path.resolve(dir, file) - - // in 0.6.0, fs.readdir can produce some really odd results. - // XXX: remove this and make the engines hash exclude 0.6.0 - if (file.indexOf(dir) !== 0) { - return cb(null, []) - } - - fs.lstat(file, function (er, st) { - if (er) return cb(er) - if (st.isDirectory()) { - return makeList_(file, pkg, exList, dfc, cb) - } - return cb(null, file) - }) - }, function (er, files, c) { - if (c) cleanup = (cleanup || []).concat(c) - if (files.length > 0) files.push(dir) - return cb(er, files, cleanup) - }) - } -} - -// only include node_modules folder that are: -// 1. not on the dependencies list or -// 2. on the "bundleDependencies" list. -function filterNodeModules (files, pkg) { - var bd = pkg.bundleDependencies || pkg.bundledDependencies || [] - , deps = Object.keys(pkg.dependencies || {}) - .filter(function (key) { return !pkg.dependencies[key].extraneous }) - .concat(Object.keys(pkg.devDependencies || {})) - - delete pkg.bundledDependencies - pkg.bundleDependencies = bd - - return files.filter(function (f) { - f = f.replace(/\/$/, "") - return f.charAt(0) !== "." - && f.charAt(0) !== "_" - && bd.indexOf(f) !== -1 - }) -} diff --git a/deps/npm/lib/utils/uid-number.js b/deps/npm/lib/utils/uid-number.js deleted file mode 100644 index 375627553..000000000 --- a/deps/npm/lib/utils/uid-number.js +++ /dev/null @@ -1,55 +0,0 @@ -module.exports = uidNumber - -// This module calls into bin/npm-get-uid-gid.js, which sets the -// uid and gid to the supplied argument, in order to find out their -// numeric value. This can't be done in the main node process, -// because otherwise npm would be running as that user. - -var exec = require("./exec.js") - , path = require("path") - , log = require("./log.js") - , constants = require("constants") - , npm = require("../npm.js") - , uidSupport = process.getuid && process.setuid - , uidCache = {} - , gidCache = {} - -function uidNumber (uid, gid, cb) { - if (!uidSupport || npm.config.get("unsafe-perm")) return cb() - if (typeof cb !== "function") cb = gid, gid = null - if (typeof cb !== "function") cb = uid, uid = null - if (gid == null) gid = process.getgid() - if (uid == null) uid = process.getuid() - if (!isNaN(gid)) gid = +gid - if (!isNaN(uid)) uid = +uid - - if (uidCache[uid]) uid = uidCache[uid] - if (gidCache[gid]) gid = gidCache[gid] - - if (typeof gid === "number" && typeof uid === "number") { - return cb(null, uid, gid) - } - - var getter = path.join(__dirname, "..", "..", "bin", "npm-get-uid-gid.js") - return exec( process.execPath, [getter, uid, gid], process.env, false - , null, process.getuid(), process.getgid() - , function (er, code, out, err) { - if (er) return log.er(cb, "Could not get uid/gid "+err)(er) - log.silly(out, "output from getuid/gid") - out = JSON.parse(out+"") - if (out.error) { - if (!npm.config.get("unsafe-perm")) { - var er = new Error(out.error) - er.errno = out.errno - return cb(er) - } else { - return cb(null, +process.getuid(), +process.getgid()) - } - } - if (isNaN(out.uid) || isNaN(out.gid)) return cb(new Error( - "Could not get uid/gid: "+JSON.stringify(out))) - uidCache[uid] = out.uid - uidCache[gid] = out.gid - cb(null, out.uid, out.gid) - }) -} diff --git a/deps/npm/man/man1/README.1 b/deps/npm/man/man1/README.1 index 7815aecf4..d3c019dab 100644 --- a/deps/npm/man/man1/README.1 +++ b/deps/npm/man/man1/README.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM" "1" "March 2012" "" "" +.TH "NPM" "1" "April 2012" "" "" . .SH "NAME" \fBnpm\fR \-\- node package manager diff --git a/deps/npm/man/man1/adduser.1 b/deps/npm/man/man1/adduser.1 index 40082f955..082812cc5 100644 --- a/deps/npm/man/man1/adduser.1 +++ b/deps/npm/man/man1/adduser.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-ADDUSER" "1" "March 2012" "" "" +.TH "NPM\-ADDUSER" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-adduser\fR \-\- Add a registry user account diff --git a/deps/npm/man/man1/bin.1 b/deps/npm/man/man1/bin.1 index 1f0701493..3f62258d1 100644 --- a/deps/npm/man/man1/bin.1 +++ b/deps/npm/man/man1/bin.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-BIN" "1" "March 2012" "" "" +.TH "NPM\-BIN" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-bin\fR \-\- Display npm bin folder diff --git a/deps/npm/man/man1/bugs.1 b/deps/npm/man/man1/bugs.1 index 01e01d63d..384384511 100644 --- a/deps/npm/man/man1/bugs.1 +++ b/deps/npm/man/man1/bugs.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-BUGS" "1" "March 2012" "" "" +.TH "NPM\-BUGS" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe diff --git a/deps/npm/man/man1/build.1 b/deps/npm/man/man1/build.1 index 541dd494a..897781a48 100644 --- a/deps/npm/man/man1/build.1 +++ b/deps/npm/man/man1/build.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-BUILD" "1" "March 2012" "" "" +.TH "NPM\-BUILD" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-build\fR \-\- Build a package diff --git a/deps/npm/man/man1/bundle.1 b/deps/npm/man/man1/bundle.1 index 6ff090817..3fbe951c9 100644 --- a/deps/npm/man/man1/bundle.1 +++ b/deps/npm/man/man1/bundle.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-BUNDLE" "1" "March 2012" "" "" +.TH "NPM\-BUNDLE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-bundle\fR \-\- REMOVED diff --git a/deps/npm/man/man1/cache.1 b/deps/npm/man/man1/cache.1 index f185ea970..6168b5097 100644 --- a/deps/npm/man/man1/cache.1 +++ b/deps/npm/man/man1/cache.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-CACHE" "1" "March 2012" "" "" +.TH "NPM\-CACHE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-cache\fR \-\- Manipulates packages cache diff --git a/deps/npm/man/man1/changelog.1 b/deps/npm/man/man1/changelog.1 index 1e5d89587..d972a2955 100644 --- a/deps/npm/man/man1/changelog.1 +++ b/deps/npm/man/man1/changelog.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-CHANGELOG" "1" "March 2012" "" "" +.TH "NPM\-CHANGELOG" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-changelog\fR \-\- Changes diff --git a/deps/npm/man/man1/coding-style.1 b/deps/npm/man/man1/coding-style.1 index 25d53aa77..8d5c60b3d 100644 --- a/deps/npm/man/man1/coding-style.1 +++ b/deps/npm/man/man1/coding-style.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-CODING\-STYLE" "1" "March 2012" "" "" +.TH "NPM\-CODING\-STYLE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-coding-style\fR \-\- npm\'s "funny" coding style diff --git a/deps/npm/man/man1/completion.1 b/deps/npm/man/man1/completion.1 index 4acded61a..3f4589333 100644 --- a/deps/npm/man/man1/completion.1 +++ b/deps/npm/man/man1/completion.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-COMPLETION" "1" "March 2012" "" "" +.TH "NPM\-COMPLETION" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-completion\fR \-\- Tab Completion for npm diff --git a/deps/npm/man/man1/config.1 b/deps/npm/man/man1/config.1 index f1ed9949d..f39d7ff70 100644 --- a/deps/npm/man/man1/config.1 +++ b/deps/npm/man/man1/config.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-CONFIG" "1" "March 2012" "" "" +.TH "NPM\-CONFIG" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-config\fR \-\- Manage the npm configuration file @@ -603,6 +603,19 @@ Type: url .P A proxy to use for outgoing https requests\. . +.SS "user\-agent" +. +.IP "\(bu" 4 +Default: npm/{npm\.version} node/{process\.version} +. +.IP "\(bu" 4 +Type: String +. +.IP "" 0 +. +.P +Sets a User\-Agent to the request header +. .SS "ignore" . .IP "\(bu" 4 diff --git a/deps/npm/man/man1/deprecate.1 b/deps/npm/man/man1/deprecate.1 index 46670bcd0..918fd2324 100644 --- a/deps/npm/man/man1/deprecate.1 +++ b/deps/npm/man/man1/deprecate.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-DEPRECATE" "1" "March 2012" "" "" +.TH "NPM\-DEPRECATE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-deprecate\fR \-\- Deprecate a version of a package diff --git a/deps/npm/man/man1/developers.1 b/deps/npm/man/man1/developers.1 index 465b03812..9d2e75941 100644 --- a/deps/npm/man/man1/developers.1 +++ b/deps/npm/man/man1/developers.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-DEVELOPERS" "1" "March 2012" "" "" +.TH "NPM\-DEVELOPERS" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-developers\fR \-\- Developer Guide diff --git a/deps/npm/man/man1/disputes.1 b/deps/npm/man/man1/disputes.1 index eb1427644..b74865f10 100644 --- a/deps/npm/man/man1/disputes.1 +++ b/deps/npm/man/man1/disputes.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-DISPUTES" "1" "March 2012" "" "" +.TH "NPM\-DISPUTES" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-disputes\fR \-\- Handling Module Name Disputes diff --git a/deps/npm/man/man1/docs.1 b/deps/npm/man/man1/docs.1 index 292042dcf..00fa39153 100644 --- a/deps/npm/man/man1/docs.1 +++ b/deps/npm/man/man1/docs.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-DOCS" "1" "March 2012" "" "" +.TH "NPM\-DOCS" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe diff --git a/deps/npm/man/man1/edit.1 b/deps/npm/man/man1/edit.1 index b64f80af8..742353d9a 100644 --- a/deps/npm/man/man1/edit.1 +++ b/deps/npm/man/man1/edit.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-EDIT" "1" "March 2012" "" "" +.TH "NPM\-EDIT" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-edit\fR \-\- Edit an installed package diff --git a/deps/npm/man/man1/explore.1 b/deps/npm/man/man1/explore.1 index 8aa212cb2..8b24eea66 100644 --- a/deps/npm/man/man1/explore.1 +++ b/deps/npm/man/man1/explore.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-EXPLORE" "1" "March 2012" "" "" +.TH "NPM\-EXPLORE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-explore\fR \-\- Browse an installed package diff --git a/deps/npm/man/man1/faq.1 b/deps/npm/man/man1/faq.1 index 1443fd784..1d68c0496 100644 --- a/deps/npm/man/man1/faq.1 +++ b/deps/npm/man/man1/faq.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-FAQ" "1" "March 2012" "" "" +.TH "NPM\-FAQ" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-faq\fR \-\- Frequently Asked Questions diff --git a/deps/npm/man/man1/folders.1 b/deps/npm/man/man1/folders.1 index f043ce287..bebd033ed 100644 --- a/deps/npm/man/man1/folders.1 +++ b/deps/npm/man/man1/folders.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-FOLDERS" "1" "March 2012" "" "" +.TH "NPM\-FOLDERS" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-folders\fR \-\- Folder Structures Used by npm diff --git a/deps/npm/man/man1/help-search.1 b/deps/npm/man/man1/help-search.1 index 2dbc63416..da5889bc8 100644 --- a/deps/npm/man/man1/help-search.1 +++ b/deps/npm/man/man1/help-search.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-HELP\-SEARCH" "1" "March 2012" "" "" +.TH "NPM\-HELP\-SEARCH" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-help-search\fR \-\- Search npm help documentation diff --git a/deps/npm/man/man1/help.1 b/deps/npm/man/man1/help.1 index ce2dd995d..247122183 100644 --- a/deps/npm/man/man1/help.1 +++ b/deps/npm/man/man1/help.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-HELP" "1" "March 2012" "" "" +.TH "NPM\-HELP" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-help\fR \-\- Get help on npm diff --git a/deps/npm/man/man1/index.1 b/deps/npm/man/man1/index.1 index 5dc7acbe0..419652ced 100644 --- a/deps/npm/man/man1/index.1 +++ b/deps/npm/man/man1/index.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-INDEX" "1" "March 2012" "" "" +.TH "NPM\-INDEX" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-index\fR \-\- Index of all npm documentation diff --git a/deps/npm/man/man1/init.1 b/deps/npm/man/man1/init.1 index c7c3e211b..ff4d537cb 100644 --- a/deps/npm/man/man1/init.1 +++ b/deps/npm/man/man1/init.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-INIT" "1" "March 2012" "" "" +.TH "NPM\-INIT" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-init\fR \-\- Interactively create a package\.json file diff --git a/deps/npm/man/man1/install.1 b/deps/npm/man/man1/install.1 index c0069f230..054172efc 100644 --- a/deps/npm/man/man1/install.1 +++ b/deps/npm/man/man1/install.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-INSTALL" "1" "March 2012" "" "" +.TH "NPM\-INSTALL" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-install\fR \-\- Install a package diff --git a/deps/npm/man/man1/json.1 b/deps/npm/man/man1/json.1 index 7d242a4f4..a2384ac33 100644 --- a/deps/npm/man/man1/json.1 +++ b/deps/npm/man/man1/json.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-JSON" "1" "March 2012" "" "" +.TH "NPM\-JSON" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-json\fR \-\- Specifics of npm\'s package\.json handling @@ -708,7 +708,7 @@ to publish it\. .P This is a way to prevent accidental publication of private repositories\. If you would like to ensure that a given package is only ever published -to a speciic registry (for example, an internal registry), +to a specific registry (for example, an internal registry), then use the \fBpublishConfig\fR hash described below to override the \fBregistry\fR config param at publish\-time\. . diff --git a/deps/npm/man/man1/link.1 b/deps/npm/man/man1/link.1 index 374d5a853..1e4ac176f 100644 --- a/deps/npm/man/man1/link.1 +++ b/deps/npm/man/man1/link.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-LINK" "1" "March 2012" "" "" +.TH "NPM\-LINK" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-link\fR \-\- Symlink a package folder diff --git a/deps/npm/man/man1/list.1 b/deps/npm/man/man1/list.1 index df6aae0ae..a629f7eef 100644 --- a/deps/npm/man/man1/list.1 +++ b/deps/npm/man/man1/list.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-LS" "1" "March 2012" "" "" +.TH "NPM\-LS" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-ls\fR \-\- List installed packages diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1 index f3718f4ec..9c5669303 100644 --- a/deps/npm/man/man1/npm.1 +++ b/deps/npm/man/man1/npm.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM" "1" "March 2012" "" "" +.TH "NPM" "1" "April 2012" "" "" . .SH "NAME" \fBnpm\fR \-\- node package manager @@ -14,7 +14,7 @@ npm <command> [args] .fi . .SH "VERSION" -1.1.12 +1.1.16 . .SH "DESCRIPTION" npm is the package manager for the Node JavaScript platform\. It puts diff --git a/deps/npm/man/man1/outdated.1 b/deps/npm/man/man1/outdated.1 index b693c7ece..a30dce9a1 100644 --- a/deps/npm/man/man1/outdated.1 +++ b/deps/npm/man/man1/outdated.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-OUTDATED" "1" "March 2012" "" "" +.TH "NPM\-OUTDATED" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-outdated\fR \-\- Check for outdated packages diff --git a/deps/npm/man/man1/owner.1 b/deps/npm/man/man1/owner.1 index 017e0b77c..b91d38231 100644 --- a/deps/npm/man/man1/owner.1 +++ b/deps/npm/man/man1/owner.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-OWNER" "1" "March 2012" "" "" +.TH "NPM\-OWNER" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-owner\fR \-\- Manage package owners diff --git a/deps/npm/man/man1/pack.1 b/deps/npm/man/man1/pack.1 index 77928f9d6..56eb667a8 100644 --- a/deps/npm/man/man1/pack.1 +++ b/deps/npm/man/man1/pack.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PACK" "1" "March 2012" "" "" +.TH "NPM\-PACK" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-pack\fR \-\- Create a tarball from a package diff --git a/deps/npm/man/man1/prefix.1 b/deps/npm/man/man1/prefix.1 index c8989a5a8..6284d683c 100644 --- a/deps/npm/man/man1/prefix.1 +++ b/deps/npm/man/man1/prefix.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PREFIX" "1" "March 2012" "" "" +.TH "NPM\-PREFIX" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-prefix\fR \-\- Display prefix diff --git a/deps/npm/man/man1/prune.1 b/deps/npm/man/man1/prune.1 index adcc29df1..53fa1aeba 100644 --- a/deps/npm/man/man1/prune.1 +++ b/deps/npm/man/man1/prune.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PRUNE" "1" "March 2012" "" "" +.TH "NPM\-PRUNE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-prune\fR \-\- Remove extraneous packages diff --git a/deps/npm/man/man1/publish.1 b/deps/npm/man/man1/publish.1 index 8b16883c4..ef16486f5 100644 --- a/deps/npm/man/man1/publish.1 +++ b/deps/npm/man/man1/publish.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PUBLISH" "1" "March 2012" "" "" +.TH "NPM\-PUBLISH" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-publish\fR \-\- Publish a package diff --git a/deps/npm/man/man1/rebuild.1 b/deps/npm/man/man1/rebuild.1 index fe3fe77b1..4824951c4 100644 --- a/deps/npm/man/man1/rebuild.1 +++ b/deps/npm/man/man1/rebuild.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-REBUILD" "1" "March 2012" "" "" +.TH "NPM\-REBUILD" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-rebuild\fR \-\- Rebuild a package diff --git a/deps/npm/man/man1/registry.1 b/deps/npm/man/man1/registry.1 index 92324896c..757cd4748 100644 --- a/deps/npm/man/man1/registry.1 +++ b/deps/npm/man/man1/registry.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-REGISTRY" "1" "March 2012" "" "" +.TH "NPM\-REGISTRY" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-registry\fR \-\- The JavaScript Package Registry diff --git a/deps/npm/man/man1/removing-npm.1 b/deps/npm/man/man1/removing-npm.1 index 9d855060d..ff8412a9e 100644 --- a/deps/npm/man/man1/removing-npm.1 +++ b/deps/npm/man/man1/removing-npm.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-REMOVAL" "1" "March 2012" "" "" +.TH "NPM\-REMOVAL" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-removal\fR \-\- Cleaning the Slate diff --git a/deps/npm/man/man1/restart.1 b/deps/npm/man/man1/restart.1 index cd5d11e88..804593c5c 100644 --- a/deps/npm/man/man1/restart.1 +++ b/deps/npm/man/man1/restart.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-RESTART" "1" "March 2012" "" "" +.TH "NPM\-RESTART" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-restart\fR \-\- Start a package diff --git a/deps/npm/man/man1/root.1 b/deps/npm/man/man1/root.1 index 28fbc5271..25ba27e7a 100644 --- a/deps/npm/man/man1/root.1 +++ b/deps/npm/man/man1/root.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-ROOT" "1" "March 2012" "" "" +.TH "NPM\-ROOT" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-root\fR \-\- Display npm root diff --git a/deps/npm/man/man1/run-script.1 b/deps/npm/man/man1/run-script.1 index 747461026..041b7018e 100644 --- a/deps/npm/man/man1/run-script.1 +++ b/deps/npm/man/man1/run-script.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-RUN\-SCRIPT" "1" "March 2012" "" "" +.TH "NPM\-RUN\-SCRIPT" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-run-script\fR \-\- Run arbitrary package scripts diff --git a/deps/npm/man/man1/scripts.1 b/deps/npm/man/man1/scripts.1 index d8c5b66b0..4f0b38516 100644 --- a/deps/npm/man/man1/scripts.1 +++ b/deps/npm/man/man1/scripts.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SCRIPTS" "1" "March 2012" "" "" +.TH "NPM\-SCRIPTS" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-scripts\fR \-\- How npm handles the "scripts" field diff --git a/deps/npm/man/man1/search.1 b/deps/npm/man/man1/search.1 index 815452c60..c2015ed6f 100644 --- a/deps/npm/man/man1/search.1 +++ b/deps/npm/man/man1/search.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SEARCH" "1" "March 2012" "" "" +.TH "NPM\-SEARCH" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-search\fR \-\- Search for packages diff --git a/deps/npm/man/man1/semver.1 b/deps/npm/man/man1/semver.1 index 3cd98ff2c..6cb1be072 100644 --- a/deps/npm/man/man1/semver.1 +++ b/deps/npm/man/man1/semver.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SEMVER" "1" "March 2012" "" "" +.TH "NPM\-SEMVER" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-semver\fR \-\- The semantic versioner for npm diff --git a/deps/npm/man/man1/shrinkwrap.1 b/deps/npm/man/man1/shrinkwrap.1 index 37630d9ee..7dab32420 100644 --- a/deps/npm/man/man1/shrinkwrap.1 +++ b/deps/npm/man/man1/shrinkwrap.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SHRINKWRAP" "1" "March 2012" "" "" +.TH "NPM\-SHRINKWRAP" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-shrinkwrap\fR \-\- Lock down dependency versions diff --git a/deps/npm/man/man1/star.1 b/deps/npm/man/man1/star.1 index cd9204e36..9dd32b7fb 100644 --- a/deps/npm/man/man1/star.1 +++ b/deps/npm/man/man1/star.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-STAR" "1" "March 2012" "" "" +.TH "NPM\-STAR" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-star\fR \-\- Mark your favorite packages diff --git a/deps/npm/man/man1/start.1 b/deps/npm/man/man1/start.1 index 13077070b..83b075100 100644 --- a/deps/npm/man/man1/start.1 +++ b/deps/npm/man/man1/start.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-START" "1" "March 2012" "" "" +.TH "NPM\-START" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-start\fR \-\- Start a package diff --git a/deps/npm/man/man1/stop.1 b/deps/npm/man/man1/stop.1 index 188af6749..aace69a70 100644 --- a/deps/npm/man/man1/stop.1 +++ b/deps/npm/man/man1/stop.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-STOP" "1" "March 2012" "" "" +.TH "NPM\-STOP" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-stop\fR \-\- Stop a package diff --git a/deps/npm/man/man1/submodule.1 b/deps/npm/man/man1/submodule.1 index cee5f334e..26a1bd350 100644 --- a/deps/npm/man/man1/submodule.1 +++ b/deps/npm/man/man1/submodule.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SUBMODULE" "1" "March 2012" "" "" +.TH "NPM\-SUBMODULE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-submodule\fR \-\- Add a package as a git submodule diff --git a/deps/npm/man/man1/tag.1 b/deps/npm/man/man1/tag.1 index e5ac51922..48e23d4d1 100644 --- a/deps/npm/man/man1/tag.1 +++ b/deps/npm/man/man1/tag.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-TAG" "1" "March 2012" "" "" +.TH "NPM\-TAG" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-tag\fR \-\- Tag a published version diff --git a/deps/npm/man/man1/test.1 b/deps/npm/man/man1/test.1 index a24e2d0dd..c09f456dd 100644 --- a/deps/npm/man/man1/test.1 +++ b/deps/npm/man/man1/test.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-TEST" "1" "March 2012" "" "" +.TH "NPM\-TEST" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-test\fR \-\- Test a package diff --git a/deps/npm/man/man1/uninstall.1 b/deps/npm/man/man1/uninstall.1 index 7005ba1e3..d779b0bf4 100644 --- a/deps/npm/man/man1/uninstall.1 +++ b/deps/npm/man/man1/uninstall.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-RM" "1" "March 2012" "" "" +.TH "NPM\-RM" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-rm\fR \-\- Remove a package diff --git a/deps/npm/man/man1/unpublish.1 b/deps/npm/man/man1/unpublish.1 index 4b8bc86df..4a7b96e89 100644 --- a/deps/npm/man/man1/unpublish.1 +++ b/deps/npm/man/man1/unpublish.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-UNPUBLISH" "1" "March 2012" "" "" +.TH "NPM\-UNPUBLISH" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-unpublish\fR \-\- Remove a package from the registry diff --git a/deps/npm/man/man1/update.1 b/deps/npm/man/man1/update.1 index ba3e8b653..bdb703633 100644 --- a/deps/npm/man/man1/update.1 +++ b/deps/npm/man/man1/update.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-UPDATE" "1" "March 2012" "" "" +.TH "NPM\-UPDATE" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-update\fR \-\- Update a package diff --git a/deps/npm/man/man1/version.1 b/deps/npm/man/man1/version.1 index 139559191..80acf696f 100644 --- a/deps/npm/man/man1/version.1 +++ b/deps/npm/man/man1/version.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-VERSION" "1" "March 2012" "" "" +.TH "NPM\-VERSION" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-version\fR \-\- Bump a package version diff --git a/deps/npm/man/man1/view.1 b/deps/npm/man/man1/view.1 index c874ff47f..0ecd6da51 100644 --- a/deps/npm/man/man1/view.1 +++ b/deps/npm/man/man1/view.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-VIEW" "1" "March 2012" "" "" +.TH "NPM\-VIEW" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-view\fR \-\- View registry info diff --git a/deps/npm/man/man1/whoami.1 b/deps/npm/man/man1/whoami.1 index 06d221d03..f47a0e84a 100644 --- a/deps/npm/man/man1/whoami.1 +++ b/deps/npm/man/man1/whoami.1 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-WHOAMI" "1" "March 2012" "" "" +.TH "NPM\-WHOAMI" "1" "April 2012" "" "" . .SH "NAME" \fBnpm-whoami\fR \-\- Display npm username diff --git a/deps/npm/man/man3/bin.3 b/deps/npm/man/man3/bin.3 index 7aaa11b2a..268f75e6e 100644 --- a/deps/npm/man/man3/bin.3 +++ b/deps/npm/man/man3/bin.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-BIN" "3" "March 2012" "" "" +.TH "NPM\-BIN" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-bin\fR \-\- Display npm bin folder diff --git a/deps/npm/man/man3/bugs.3 b/deps/npm/man/man3/bugs.3 index 6d61dcd46..38ee6a1ca 100644 --- a/deps/npm/man/man3/bugs.3 +++ b/deps/npm/man/man3/bugs.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-BUGS" "3" "March 2012" "" "" +.TH "NPM\-BUGS" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe diff --git a/deps/npm/man/man3/commands.3 b/deps/npm/man/man3/commands.3 index c23016df3..e8b8260e6 100644 --- a/deps/npm/man/man3/commands.3 +++ b/deps/npm/man/man3/commands.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-COMMANDS" "3" "March 2012" "" "" +.TH "NPM\-COMMANDS" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-commands\fR \-\- npm commands diff --git a/deps/npm/man/man3/config.3 b/deps/npm/man/man3/config.3 index d18739b50..6debd412e 100644 --- a/deps/npm/man/man3/config.3 +++ b/deps/npm/man/man3/config.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-CONFIG" "3" "March 2012" "" "" +.TH "NPM\-CONFIG" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-config\fR \-\- Manage the npm configuration files diff --git a/deps/npm/man/man3/deprecate.3 b/deps/npm/man/man3/deprecate.3 index 2448ab3c7..b4b91612e 100644 --- a/deps/npm/man/man3/deprecate.3 +++ b/deps/npm/man/man3/deprecate.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-DEPRECATE" "3" "March 2012" "" "" +.TH "NPM\-DEPRECATE" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-deprecate\fR \-\- Deprecate a version of a package diff --git a/deps/npm/man/man3/docs.3 b/deps/npm/man/man3/docs.3 index 8373f6d05..a61b0df6c 100644 --- a/deps/npm/man/man3/docs.3 +++ b/deps/npm/man/man3/docs.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-DOCS" "3" "March 2012" "" "" +.TH "NPM\-DOCS" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe diff --git a/deps/npm/man/man3/edit.3 b/deps/npm/man/man3/edit.3 index 3f790229e..dc4b183e9 100644 --- a/deps/npm/man/man3/edit.3 +++ b/deps/npm/man/man3/edit.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-EDIT" "3" "March 2012" "" "" +.TH "NPM\-EDIT" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-edit\fR \-\- Edit an installed package diff --git a/deps/npm/man/man3/explore.3 b/deps/npm/man/man3/explore.3 index 0d4ee62fe..8817ce008 100644 --- a/deps/npm/man/man3/explore.3 +++ b/deps/npm/man/man3/explore.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-EXPLORE" "3" "March 2012" "" "" +.TH "NPM\-EXPLORE" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-explore\fR \-\- Browse an installed package diff --git a/deps/npm/man/man3/help-search.3 b/deps/npm/man/man3/help-search.3 index 291037a1c..d42d68e55 100644 --- a/deps/npm/man/man3/help-search.3 +++ b/deps/npm/man/man3/help-search.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-HELP\-SEARCH" "3" "March 2012" "" "" +.TH "NPM\-HELP\-SEARCH" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-help-search\fR \-\- Search the help pages diff --git a/deps/npm/man/man3/init.3 b/deps/npm/man/man3/init.3 index 3a4434c50..f751030a6 100644 --- a/deps/npm/man/man3/init.3 +++ b/deps/npm/man/man3/init.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "INIT" "3" "March 2012" "" "" +.TH "INIT" "3" "April 2012" "" "" . .SH "NAME" \fBinit\fR \-\- Interactively create a package\.json file diff --git a/deps/npm/man/man3/install.3 b/deps/npm/man/man3/install.3 index 0c0ee9769..6a9cea4f1 100644 --- a/deps/npm/man/man3/install.3 +++ b/deps/npm/man/man3/install.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-INSTALL" "3" "March 2012" "" "" +.TH "NPM\-INSTALL" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-install\fR \-\- install a package programmatically diff --git a/deps/npm/man/man3/link.3 b/deps/npm/man/man3/link.3 index 45c15dc23..edc3905a9 100644 --- a/deps/npm/man/man3/link.3 +++ b/deps/npm/man/man3/link.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-LINK" "3" "March 2012" "" "" +.TH "NPM\-LINK" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-link\fR \-\- Symlink a package folder diff --git a/deps/npm/man/man3/load.3 b/deps/npm/man/man3/load.3 index 9d9df2c3a..c44d9f116 100644 --- a/deps/npm/man/man3/load.3 +++ b/deps/npm/man/man3/load.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-LOAD" "3" "March 2012" "" "" +.TH "NPM\-LOAD" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-load\fR \-\- Load config settings diff --git a/deps/npm/man/man3/ls.3 b/deps/npm/man/man3/ls.3 index 74736d453..2d45dde31 100644 --- a/deps/npm/man/man3/ls.3 +++ b/deps/npm/man/man3/ls.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-LS" "3" "March 2012" "" "" +.TH "NPM\-LS" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-ls\fR \-\- List installed packages diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3 index 257b87618..5cc2a3efa 100644 --- a/deps/npm/man/man3/npm.3 +++ b/deps/npm/man/man3/npm.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM" "3" "March 2012" "" "" +.TH "NPM" "3" "April 2012" "" "" . .SH "NAME" \fBnpm\fR \-\- node package manager @@ -21,7 +21,7 @@ npm\.load(configObject, function (er, npm) { .fi . .SH "VERSION" -1.1.12 +1.1.16 . .SH "DESCRIPTION" This is the API documentation for npm\. diff --git a/deps/npm/man/man3/outdated.3 b/deps/npm/man/man3/outdated.3 index 258db10e7..4c0bd4dbe 100644 --- a/deps/npm/man/man3/outdated.3 +++ b/deps/npm/man/man3/outdated.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-OUTDATED" "3" "March 2012" "" "" +.TH "NPM\-OUTDATED" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-outdated\fR \-\- Check for outdated packages diff --git a/deps/npm/man/man3/owner.3 b/deps/npm/man/man3/owner.3 index edb734ece..922769f76 100644 --- a/deps/npm/man/man3/owner.3 +++ b/deps/npm/man/man3/owner.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-OWNER" "3" "March 2012" "" "" +.TH "NPM\-OWNER" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-owner\fR \-\- Manage package owners diff --git a/deps/npm/man/man3/pack.3 b/deps/npm/man/man3/pack.3 index e279d6171..5c0547996 100644 --- a/deps/npm/man/man3/pack.3 +++ b/deps/npm/man/man3/pack.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PACK" "3" "March 2012" "" "" +.TH "NPM\-PACK" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-pack\fR \-\- Create a tarball from a package diff --git a/deps/npm/man/man3/prefix.3 b/deps/npm/man/man3/prefix.3 index 8a01d637e..3ba398aa3 100644 --- a/deps/npm/man/man3/prefix.3 +++ b/deps/npm/man/man3/prefix.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PREFIX" "3" "March 2012" "" "" +.TH "NPM\-PREFIX" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-prefix\fR \-\- Display prefix diff --git a/deps/npm/man/man3/prune.3 b/deps/npm/man/man3/prune.3 index 1aec7d763..566f57e8a 100644 --- a/deps/npm/man/man3/prune.3 +++ b/deps/npm/man/man3/prune.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PRUNE" "3" "March 2012" "" "" +.TH "NPM\-PRUNE" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-prune\fR \-\- Remove extraneous packages diff --git a/deps/npm/man/man3/publish.3 b/deps/npm/man/man3/publish.3 index 060c31ebc..edddf21b9 100644 --- a/deps/npm/man/man3/publish.3 +++ b/deps/npm/man/man3/publish.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-PUBLISH" "3" "March 2012" "" "" +.TH "NPM\-PUBLISH" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-publish\fR \-\- Publish a package diff --git a/deps/npm/man/man3/rebuild.3 b/deps/npm/man/man3/rebuild.3 index 7cacbe9a6..a20d55ced 100644 --- a/deps/npm/man/man3/rebuild.3 +++ b/deps/npm/man/man3/rebuild.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-REBUILD" "3" "March 2012" "" "" +.TH "NPM\-REBUILD" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-rebuild\fR \-\- Rebuild a package diff --git a/deps/npm/man/man3/restart.3 b/deps/npm/man/man3/restart.3 index 2032a7c95..3530cf919 100644 --- a/deps/npm/man/man3/restart.3 +++ b/deps/npm/man/man3/restart.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-RESTART" "3" "March 2012" "" "" +.TH "NPM\-RESTART" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-restart\fR \-\- Start a package diff --git a/deps/npm/man/man3/root.3 b/deps/npm/man/man3/root.3 index a1d629559..8fa00a0f7 100644 --- a/deps/npm/man/man3/root.3 +++ b/deps/npm/man/man3/root.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-ROOT" "3" "March 2012" "" "" +.TH "NPM\-ROOT" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-root\fR \-\- Display npm root diff --git a/deps/npm/man/man3/run-script.3 b/deps/npm/man/man3/run-script.3 index 597f7d9a1..4ace64ed5 100644 --- a/deps/npm/man/man3/run-script.3 +++ b/deps/npm/man/man3/run-script.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-RUN\-SCRIPT" "3" "March 2012" "" "" +.TH "NPM\-RUN\-SCRIPT" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-run-script\fR \-\- Run arbitrary package scripts diff --git a/deps/npm/man/man3/search.3 b/deps/npm/man/man3/search.3 index 7626321ff..9afb739b7 100644 --- a/deps/npm/man/man3/search.3 +++ b/deps/npm/man/man3/search.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SEARCH" "3" "March 2012" "" "" +.TH "NPM\-SEARCH" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-search\fR \-\- Search for packages diff --git a/deps/npm/man/man3/shrinkwrap.3 b/deps/npm/man/man3/shrinkwrap.3 index 10354ed31..647e4a430 100644 --- a/deps/npm/man/man3/shrinkwrap.3 +++ b/deps/npm/man/man3/shrinkwrap.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SHRINKWRAP" "3" "March 2012" "" "" +.TH "NPM\-SHRINKWRAP" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file diff --git a/deps/npm/man/man3/start.3 b/deps/npm/man/man3/start.3 index 531dfa2c4..1d05cdee8 100644 --- a/deps/npm/man/man3/start.3 +++ b/deps/npm/man/man3/start.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-START" "3" "March 2012" "" "" +.TH "NPM\-START" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-start\fR \-\- Start a package diff --git a/deps/npm/man/man3/stop.3 b/deps/npm/man/man3/stop.3 index e139ee9a7..5514b4ee3 100644 --- a/deps/npm/man/man3/stop.3 +++ b/deps/npm/man/man3/stop.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-STOP" "3" "March 2012" "" "" +.TH "NPM\-STOP" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-stop\fR \-\- Stop a package diff --git a/deps/npm/man/man3/submodule.3 b/deps/npm/man/man3/submodule.3 index d691b7c63..24f4c14d4 100644 --- a/deps/npm/man/man3/submodule.3 +++ b/deps/npm/man/man3/submodule.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-SUBMODULE" "3" "March 2012" "" "" +.TH "NPM\-SUBMODULE" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-submodule\fR \-\- Add a package as a git submodule diff --git a/deps/npm/man/man3/tag.3 b/deps/npm/man/man3/tag.3 index 855c174e3..e3f7e4916 100644 --- a/deps/npm/man/man3/tag.3 +++ b/deps/npm/man/man3/tag.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-TAG" "3" "March 2012" "" "" +.TH "NPM\-TAG" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-tag\fR \-\- Tag a published version diff --git a/deps/npm/man/man3/test.3 b/deps/npm/man/man3/test.3 index 07be78228..9614b92e8 100644 --- a/deps/npm/man/man3/test.3 +++ b/deps/npm/man/man3/test.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-TEST" "3" "March 2012" "" "" +.TH "NPM\-TEST" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-test\fR \-\- Test a package diff --git a/deps/npm/man/man3/uninstall.3 b/deps/npm/man/man3/uninstall.3 index 756ddad40..acc26cde1 100644 --- a/deps/npm/man/man3/uninstall.3 +++ b/deps/npm/man/man3/uninstall.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-UNINSTALL" "3" "March 2012" "" "" +.TH "NPM\-UNINSTALL" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-uninstall\fR \-\- uninstall a package programmatically diff --git a/deps/npm/man/man3/unpublish.3 b/deps/npm/man/man3/unpublish.3 index d3e3a75bf..ac35cb83a 100644 --- a/deps/npm/man/man3/unpublish.3 +++ b/deps/npm/man/man3/unpublish.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-UNPUBLISH" "3" "March 2012" "" "" +.TH "NPM\-UNPUBLISH" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-unpublish\fR \-\- Remove a package from the registry diff --git a/deps/npm/man/man3/update.3 b/deps/npm/man/man3/update.3 index d8a096aba..ded33bd86 100644 --- a/deps/npm/man/man3/update.3 +++ b/deps/npm/man/man3/update.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-UPDATE" "3" "March 2012" "" "" +.TH "NPM\-UPDATE" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-update\fR \-\- Update a package diff --git a/deps/npm/man/man3/version.3 b/deps/npm/man/man3/version.3 index 20ee41507..b9015ebed 100644 --- a/deps/npm/man/man3/version.3 +++ b/deps/npm/man/man3/version.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-VERSION" "3" "March 2012" "" "" +.TH "NPM\-VERSION" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-version\fR \-\- Bump a package version diff --git a/deps/npm/man/man3/view.3 b/deps/npm/man/man3/view.3 index f9c253b23..3e8e4a60f 100644 --- a/deps/npm/man/man3/view.3 +++ b/deps/npm/man/man3/view.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-VIEW" "3" "March 2012" "" "" +.TH "NPM\-VIEW" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-view\fR \-\- View registry info diff --git a/deps/npm/man/man3/whoami.3 b/deps/npm/man/man3/whoami.3 index fd2ee1c7f..d4beb9ce4 100644 --- a/deps/npm/man/man3/whoami.3 +++ b/deps/npm/man/man3/whoami.3 @@ -1,7 +1,7 @@ .\" Generated with Ronnjs/v0.1 .\" http://github.com/kapouer/ronnjs/ . -.TH "NPM\-WHOAMI" "3" "March 2012" "" "" +.TH "NPM\-WHOAMI" "3" "April 2012" "" "" . .SH "NAME" \fBnpm-whoami\fR \-\- Display npm username diff --git a/deps/npm/node_modules/archy/README.markdown b/deps/npm/node_modules/archy/README.markdown new file mode 100644 index 000000000..deaba0fd1 --- /dev/null +++ b/deps/npm/node_modules/archy/README.markdown @@ -0,0 +1,92 @@ +archy +===== + +Render nested hierarchies `npm ls` style with unicode pipes. + +[](http://travis-ci.org/substack/node-archy) + +example +======= + +``` js +var archy = require('archy'); +var s = archy({ + label : 'beep', + nodes : [ + 'ity', + { + label : 'boop', + nodes : [ + { + label : 'o_O', + nodes : [ + { + label : 'oh', + nodes : [ 'hello', 'puny' ] + }, + 'human' + ] + }, + 'party\ntime!' + ] + } + ] +}); +console.log(s); +``` + +output + +``` +beep +├── ity +└─┬ boop + ├─┬ o_O + │ ├─┬ oh + │ │ ├── hello + │ │ └── puny + │ └── human + └── party + time! +``` + +methods +======= + +var archy = require('archy') + +archy(obj, prefix='', opts={}) +------------------------------ + +Return a string representation of `obj` with unicode pipe characters like how +`npm ls` looks. + +`obj` should be a tree of nested objects with `'label'` and `'nodes'` fields. +`'label'` is a string of text to display at a node level and `'nodes'` is an +array of the descendents of the current node. + +If a node is a string, that string will be used as the `'label'` and an empty +array of `'nodes'` will be used. + +`prefix` gets prepended to all the lines and is used by the algorithm to +recursively update. + +If `'label'` has newlines they will be indented at the present indentation level +with the current prefix. + +To disable unicode results in favor of all-ansi output set `opts.unicode` to +`false`. + +install +======= + +With [npm](http://npmjs.org) do: + +``` +npm install archy +``` + +license +======= + +MIT/X11 diff --git a/deps/npm/node_modules/archy/index.js b/deps/npm/node_modules/archy/index.js new file mode 100644 index 000000000..869d64e65 --- /dev/null +++ b/deps/npm/node_modules/archy/index.js @@ -0,0 +1,35 @@ +module.exports = function archy (obj, prefix, opts) { + if (prefix === undefined) prefix = ''; + if (!opts) opts = {}; + var chr = function (s) { + var chars = { + '│' : '|', + 'â””' : '`', + '├' : '+', + '─' : '-', + '┬' : '-' + }; + return opts.unicode === false ? chars[s] : s; + }; + + if (typeof obj === 'string') obj = { label : obj }; + + var nodes = obj.nodes || []; + var lines = (obj.label || '').split('\n'); + var splitter = '\n' + prefix + (nodes.length ? chr('│') : ' ') + ' '; + + return prefix + + lines.join(splitter) + '\n' + + nodes.map(function (node, ix) { + var last = ix === nodes.length - 1; + var more = node.nodes && node.nodes.length; + var prefix_ = prefix + (last ? ' ' : chr('│')) + ' '; + + return prefix + + (last ? chr('â””') : chr('├')) + chr('─') + + (more ? chr('┬') : chr('─')) + ' ' + + archy(node, prefix_, opts).slice(prefix.length + 2) + ; + }).join('') + ; +}; diff --git a/deps/npm/node_modules/archy/package.json b/deps/npm/node_modules/archy/package.json new file mode 100644 index 000000000..81c3e2669 --- /dev/null +++ b/deps/npm/node_modules/archy/package.json @@ -0,0 +1,52 @@ +{ + "name": "archy", + "version": "0.0.2", + "description": "render nested hierarchies `npm ls` style with unicode pipes", + "main": "index.js", + "directories": { + "lib": ".", + "example": "example", + "test": "test" + }, + "devDependencies": { + "tap": "~0.2.3" + }, + "scripts": { + "test": "tap test" + }, + "repository": { + "type": "git", + "url": "git://github.com/substack/node-archy.git" + }, + "keywords": [ + "hierarchy", + "npm ls", + "unicode", + "pretty", + "print" + ], + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "license": "MIT/X11", + "engine": { + "node": ">=0.4" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "archy@0.0.2", + "dependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "_engineSupported": true, + "_npmVersion": "1.1.13", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "_from": "archy@0.0.2" +} diff --git a/deps/npm/node_modules/chownr/README.md b/deps/npm/node_modules/chownr/README.md new file mode 100644 index 000000000..70e9a54a3 --- /dev/null +++ b/deps/npm/node_modules/chownr/README.md @@ -0,0 +1,3 @@ +Like `chown -R`. + +Takes the same arguments as `fs.chown()` diff --git a/deps/npm/node_modules/chownr/chownr.js b/deps/npm/node_modules/chownr/chownr.js new file mode 100644 index 000000000..598b8f844 --- /dev/null +++ b/deps/npm/node_modules/chownr/chownr.js @@ -0,0 +1,41 @@ +module.exports = chownr +chownr.sync = chownrSync + +var fs = require("fs") +, path = require("path") + +function chownr (p, uid, gid, cb) { + fs.readdir(p, function (er, children) { + // any error other than ENOTDIR means it's not readable, or + // doesn't exist. give up. + if (er && er.code !== "ENOTDIR") return cb(er) + if (er || !children.length) return fs.chown(p, uid, gid, cb) + + var len = children.length + , errState = null + children.forEach(function (child) { + chownr(path.resolve(p, child), uid, gid, then) + }) + function then (er) { + if (errState) return + if (er) return cb(errState = er) + if (-- len === 0) return fs.chown(p, uid, gid, cb) + } + }) +} + +function chownrSync (p, uid, gid) { + var children + try { + children = fs.readdirSync(p) + } catch (er) { + if (er && er.code === "ENOTDIR") return fs.chownSync(p, uid, gid) + throw er + } + if (!children.length) return fs.chownSync(p, uid, gid) + + children.forEach(function (child) { + chownrSync(path.resolve(p, child), uid, gid) + }) + return fs.chownSync(p, uid, gid) +} diff --git a/deps/npm/node_modules/chownr/package.json b/deps/npm/node_modules/chownr/package.json new file mode 100644 index 000000000..10e52c4dc --- /dev/null +++ b/deps/npm/node_modules/chownr/package.json @@ -0,0 +1,38 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "name": "chownr", + "description": "like `chown -R`", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/chownr.git" + }, + "main": "chownr.js", + "devDependencies": { + "tap": "0.2", + "mkdirp": "0.3", + "rimraf": "" + }, + "scripts": { + "test": "tap test/*.js" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "chownr@0.0.1", + "dependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "_engineSupported": true, + "_npmVersion": "1.1.13", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "_from": "chownr" +} diff --git a/deps/npm/node_modules/fstream-npm/.npmignore b/deps/npm/node_modules/fstream-npm/.npmignore new file mode 100644 index 000000000..06aea6917 --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/.npmignore @@ -0,0 +1,2 @@ +# ignore the output junk from the example scripts +example/output diff --git a/deps/npm/node_modules/fstream-npm/README.md b/deps/npm/node_modules/fstream-npm/README.md new file mode 100644 index 000000000..2c01e9073 --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/README.md @@ -0,0 +1,18 @@ +# fstream-npm + +This is an fstream DirReader class that will read a directory and filter +things according to the semantics of what goes in an npm package. + +For example: + +```javascript +// This will print out all the files that would be included +// by 'npm publish' or 'npm install' of this directory. + +var FN = require("fstream-npm") +FN({ path: "./" }) + .on("child", function (e) { + console.error(e.path.substr(e.root.path.length + 1)) + }) +``` + diff --git a/deps/npm/node_modules/fstream-npm/fstream-npm.js b/deps/npm/node_modules/fstream-npm/fstream-npm.js new file mode 100644 index 000000000..4ad001253 --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/fstream-npm.js @@ -0,0 +1,302 @@ +var Ignore = require("fstream-ignore") +, inherits = require("inherits") +, path = require("path") +, fs = require("fs") + +module.exports = Packer + +inherits(Packer, Ignore) + +function Packer (props) { + if (!(this instanceof Packer)) { + return new Packer(props) + } + + if (typeof props === "string") { + props = { path: props } + } + + props.ignoreFiles = [ ".npmignore", + ".gitignore", + "package.json" ] + + Ignore.call(this, props) + + this.bundled = props.bundled + this.bundleLinks = props.bundleLinks + this.package = props.package + + // in a node_modules folder, resolve symbolic links to + // bundled dependencies when creating the package. + props.follow = this.follow = this.basename === "node_modules" + // console.error("follow?", this.path, props.follow) + + if (this === this.root || + this.parent && + this.parent.basename === "node_modules" && + this.basename.charAt(0) !== ".") { + this.readBundledLinks() + } + + + this.on("entryStat", function (entry, props) { + // files should *always* get into tarballs + // in a user-writable state, even if they're + // being installed from some wackey vm-mounted + // read-only filesystem. + entry.mode = props.mode = props.mode | 0200 + }) +} + +Packer.prototype.readBundledLinks = function () { + if (this._paused) { + this.once("resume", this.addIgnoreFiles) + return + } + + this.pause() + fs.readdir(this.path + "/node_modules", function (er, list) { + // no harm if there's no bundle + var l = list && list.length + if (er || l === 0) return this.resume() + + var errState = null + , then = function then (er) { + if (errState) return + if (er) return errState = er, this.resume() + if (-- l === 0) return this.resume() + }.bind(this) + + list.forEach(function (pkg) { + if (pkg.charAt(0) === ".") return then() + var pd = this.path + "/node_modules/" + pkg + fs.realpath(pd, function (er, rp) { + if (er) return then() + this.bundleLinks = this.bundleLinks || {} + this.bundleLinks[pkg] = rp + then() + }.bind(this)) + }, this) + }.bind(this)) +} + +Packer.prototype.applyIgnores = function (entry, partial, entryObj) { + // package.json files can never be ignored. + if (entry === "package.json") return true + + // special rules. see below. + if (entry === "node_modules") return true + + // some files are *never* allowed under any circumstances + if (entry === ".git" || + entry === ".lock-wscript" || + entry.match(/^\.wafpickle-[0-9]+$/) || + entry === "CVS" || + entry === ".svn" || + entry === ".hg" || + entry.match(/^\..*\.swp$/) || + entry === ".DS_Store" || + entry.match(/^\._/) || + entry === "npm-debug.log" + ) { + return false + } + + // in a node_modules folder, we only include bundled dependencies + // also, prevent packages in node_modules from being affected + // by rules set in the containing package, so that + // bundles don't get busted. + // Also, once in a bundle, everything is installed as-is + // To prevent infinite cycles in the case of cyclic deps that are + // linked with npm link, even in a bundle, deps are only bundled + // if they're not already present at a higher level. + if (this.basename === "node_modules") { + // bubbling up. stop here and allow anything the bundled pkg allows + if (entry.indexOf("/") !== -1) return true + + // never include the .bin. It's typically full of platform-specific + // stuff like symlinks and .cmd files anyway. + if (entry === ".bin") return false + + var shouldBundle = false + // the package root. + var p = this.parent + // the package before this one. + var pp = p && p.parent + + // if this entry has already been bundled, and is a symlink, + // and it is the *same* symlink as this one, then exclude it. + if (pp && pp.bundleLinks && this.bundleLinks && + pp.bundleLinks[entry] === this.bundleLinks[entry]) { + return false + } + + // since it's *not* a symbolic link, if we're *already* in a bundle, + // then we should include everything. + if (pp && pp.package) { + return true + } + + // only include it at this point if it's a bundleDependency + var bd = this.package && this.package.bundleDependencies + var shouldBundle = bd && bd.indexOf(entry) !== -1 + // if we're not going to bundle it, then it doesn't count as a bundleLink + // if (this.bundleLinks && !shouldBundle) delete this.bundleLinks[entry] + return shouldBundle + } + // if (this.bundled) return true + + return Ignore.prototype.applyIgnores.call(this, entry, partial, entryObj) +} + +Packer.prototype.addIgnoreFiles = function () { + var entries = this.entries + // if there's a .npmignore, then we do *not* want to + // read the .gitignore. + if (-1 !== entries.indexOf(".npmignore")) { + var i = entries.indexOf(".gitignore") + if (i !== -1) { + entries.splice(i, 1) + } + } + + this.entries = entries + + Ignore.prototype.addIgnoreFiles.call(this) +} + + +Packer.prototype.readRules = function (buf, e) { + if (e !== "package.json") { + return Ignore.prototype.readRules.call(this, buf, e) + } + + var p = this.package = JSON.parse(buf.toString()) + + if (this === this.root) { + this.bundleLinks = this.bundleLinks || {} + this.bundleLinks[p.name] = this._path + } + + this.packageRoot = true + this.emit("package", p) + + // make bundle deps predictable + if (p.bundledDependencies && !p.bundleDependencies) { + p.bundleDependencies = p.bundledDependencies + delete p.bundledDependencies + } + + if (!p.files || !Array.isArray(p.files)) return [] + + // ignore everything except what's in the files array. + return ["*"].concat(p.files.map(function (f) { + return "!" + f + })).concat(p.files.map(function (f) { + return "!" + f.replace(/\/+$/, "") + "/**" + })) +} + +Packer.prototype.getChildProps = function (stat) { + var props = Ignore.prototype.getChildProps.call(this, stat) + + props.package = this.package + + props.bundled = this.bundled && this.bundled.slice(0) + props.bundleLinks = this.bundleLinks && + Object.create(this.bundleLinks) + + // Directories have to be read as Packers + // otherwise fstream.Reader will create a DirReader instead. + if (stat.isDirectory()) { + props.type = this.constructor + } + + // only follow symbolic links directly in the node_modules folder. + props.follow = false + return props +} + + +var order = + [ "package.json" + , ".npmignore" + , ".gitignore" + , /^README(\.md)?$/ + , "LICENCE" + , "LICENSE" + , /\.js$/ ] + +Packer.prototype.sort = function (a, b) { + for (var i = 0, l = order.length; i < l; i ++) { + var o = order[i] + if (typeof o === "string") { + if (a === o) return -1 + if (b === o) return 1 + } else { + if (a.match(o)) return -1 + if (b.match(o)) return 1 + } + } + + // deps go in the back + if (a === "node_modules") return 1 + if (b === "node_modules") return -1 + + return Ignore.prototype.sort.call(this, a, b) +} + + + +Packer.prototype.emitEntry = function (entry) { + if (this._paused) { + this.once("resume", this.emitEntry.bind(this, entry)) + return + } + + // if there is a .gitignore, then we're going to + // rename it to .npmignore in the output. + if (entry.basename === ".gitignore") { + entry.basename = ".npmignore" + entry.path = path.resolve(entry.dirname, entry.basename) + } + + // all *.gyp files are renamed to binding.gyp for node-gyp + if (entry.basename.match(/\.gyp$/)) { + entry.basename = "binding.gyp" + entry.path = path.resolve(entry.dirname, entry.basename) + } + + // skip over symbolic links + if (entry.type === "SymbolicLink") { + entry.abort() + return + } + + if (entry.type !== "Directory") { + // make it so that the folder in the tarball is named "package" + var h = path.dirname((entry.root || entry).path) + , t = entry.path.substr(h.length + 1).replace(/^[^\/\\]+/, "package") + , p = h + "/" + t + + entry.path = p + entry.dirname = path.dirname(p) + return Ignore.prototype.emitEntry.call(this, entry) + } + + // we don't want empty directories to show up in package + // tarballs. + // don't emit entry events for dirs, but still walk through + // and read them. This means that we need to proxy up their + // entry events so that those entries won't be missed, since + // .pipe() doesn't do anythign special with "child" events, on + // with "entry" events. + var me = this + entry.on("entry", function (e) { + if (e.parent === entry) { + e.parent = me + me.emit("entry", e) + } + }) + entry.on("package", this.emit.bind(this, "package")) +} diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/.npmignore b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/.npmignore new file mode 100644 index 000000000..a843dc44a --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/.npmignore @@ -0,0 +1 @@ +test/fixtures diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/README.md b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/README.md new file mode 100644 index 000000000..31170feae --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/README.md @@ -0,0 +1,22 @@ +# fstream-ignore + +A fstream DirReader that filters out files that match globs in `.ignore` +files throughout the tree, like how git ignores files based on a +`.gitignore` file. + +Here's an example: + +```javascript +var Ignore = require("fstream-ignore") +Ignore({ path: __dirname + , ignoreFiles: [".ignore", ".gitignore"] + }) + .on("child", function (c) { + console.error(c.path.substr(c.root.path.length + 1)) + }) + .pipe(tar.Pack()) + .pipe(fs.createWriteStream("foo.tar")) +``` + +This will tar up the files in __dirname into `foo.tar`, ignoring +anything matched by the globs in any .iginore or .gitignore file. diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/ignore.js b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/ignore.js new file mode 100644 index 000000000..0728f7c8f --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/ignore.js @@ -0,0 +1,275 @@ +// Essentially, this is a fstream.DirReader class, but with a +// bit of special logic to read the specified sort of ignore files, +// and a filter that prevents it from picking up anything excluded +// by those files. + +var Minimatch = require("minimatch").Minimatch +, fstream = require("fstream") +, DirReader = fstream.DirReader +, inherits = require("inherits") +, path = require("path") +, fs = require("fs") + +module.exports = IgnoreReader + +inherits(IgnoreReader, DirReader) + +function IgnoreReader (props) { + if (!(this instanceof IgnoreReader)) { + return new IgnoreReader(props) + } + + // must be a Directory type + if (typeof props === "string") { + props = { path: path.resolve(props) } + } + + props.type = "Directory" + props.Directory = true + + if (!props.ignoreFiles) props.ignoreFiles = [".ignore"] + this.ignoreFiles = props.ignoreFiles + + this.ignoreRules = null + + // ensure that .ignore files always show up at the top of the list + // that way, they can be read before proceeding to handle other + // entries in that same folder + if (props.sort) { + this._sort = props.sort === "alpha" ? alphasort : props.sort + props.sort = null + } + + this.on("entries", function () { + // if there are any ignore files in the list, then + // pause and add them. + // then, filter the list based on our ignoreRules + + var hasIg = this.entries.some(this.isIgnoreFile, this) + + if (!hasIg) return this.filterEntries() + + this.addIgnoreFiles() + }) + + // we filter entries before we know what they are. + // however, directories have to be re-tested against + // rules with a "/" appended, because "a/b/" will only + // match if "a/b" is a dir, and not otherwise. + this.on("_entryStat", function (entry, props) { + var t = entry.basename + if (!this.applyIgnores(entry.basename, + entry.type === "Directory", + entry)) { + entry.abort() + } + }.bind(this)) + + DirReader.call(this, props) +} + + +IgnoreReader.prototype.addIgnoreFiles = function () { + if (this._paused) { + this.once("resume", this.addIgnoreFiles) + return + } + if (this._ignoreFilesAdded) return + this._ignoreFilesAdded = true + + var newIg = this.entries.filter(this.isIgnoreFile, this) + , count = newIg.length + , errState = null + + if (!count) return + + this.pause() + + var then = function then (er) { + if (errState) return + if (er) return this.emit("error", errState = er) + if (-- count === 0) { + this.filterEntries() + this.resume() + } + }.bind(this) + + newIg.forEach(function (ig) { + this.addIgnoreFile(ig, then) + }, this) +} + + +IgnoreReader.prototype.isIgnoreFile = function (e) { + return e !== "." && + e !== ".." && + -1 !== this.ignoreFiles.indexOf(e) +} + + +IgnoreReader.prototype.getChildProps = function (stat) { + var props = DirReader.prototype.getChildProps.call(this, stat) + props.ignoreFiles = this.ignoreFiles + + // Directories have to be read as IgnoreReaders + // otherwise fstream.Reader will create a DirReader instead. + if (stat.isDirectory()) { + props.type = this.constructor + } + return props +} + + +IgnoreReader.prototype.addIgnoreFile = function (e, cb) { + // read the file, and then call addIgnoreRules + // if there's an error, then tell the cb about it. + + var ig = path.resolve(this.path, e) + fs.readFile(ig, function (er, data) { + if (er) return cb(er) + + this.emit("ignoreFile", e, data) + var rules = this.readRules(data, e) + this.addIgnoreRules(rules, e) + cb() + }.bind(this)) +} + + +IgnoreReader.prototype.readRules = function (buf, e) { + return buf.toString().split(/\r?\n/) +} + + +// Override this to do fancier things, like read the +// "files" array from a package.json file or something. +IgnoreReader.prototype.addIgnoreRules = function (set, e) { + // filter out anything obvious + set = set.filter(function (s) { + s = s.trim() + return s && !s.match(/^#/) + }) + + // no rules to add! + if (!set.length) return + + // now get a minimatch object for each one of these. + // Note that we need to allow dot files by default, and + // not switch the meaning of their exclusion + var mmopt = { matchBase: true, dot: true, flipNegate: true } + , mm = set.map(function (s) { + var m = new Minimatch(s, mmopt) + m.ignoreFile = e + return m + }) + + if (!this.ignoreRules) this.ignoreRules = [] + this.ignoreRules.push.apply(this.ignoreRules, mm) +} + + +IgnoreReader.prototype.filterEntries = function () { + // this exclusion is at the point where we know the list of + // entries in the dir, but don't know what they are. since + // some of them *might* be directories, we have to run the + // match in dir-mode as well, so that we'll pick up partials + // of files that will be included later. Anything included + // at this point will be checked again later once we know + // what it is. + this.entries = this.entries.filter(function (entry) { + // at this point, we don't know if it's a dir or not. + return this.applyIgnores(entry) || this.applyIgnores(entry, true) + }, this) +} + + +IgnoreReader.prototype.applyIgnores = function (entry, partial, obj) { + var included = true + + // this = /a/b/c + // entry = d + // parent /a/b sees c/d + if (this.parent && this.parent.applyIgnores) { + var pt = this.basename + "/" + entry + included = this.parent.applyIgnores(pt, partial) + } + + // Negated Rules + // Since we're *ignoring* things here, negating means that a file + // is re-included, if it would have been excluded by a previous + // rule. So, negated rules are only relevant if the file + // has been excluded. + // + // Similarly, if a file has been excluded, then there's no point + // trying it against rules that have already been applied + // + // We're using the "flipnegate" flag here, which tells minimatch + // to set the "negate" for our information, but still report + // whether the core pattern was a hit or a miss. + + if (!this.ignoreRules) { + return included + } + + this.ignoreRules.forEach(function (rule) { + // negation means inclusion + if (rule.negate && included || + !rule.negate && !included) { + // unnecessary + return + } + + // first, match against /foo/bar + var match = rule.match("/" + entry) + + if (!match) { + // try with the leading / trimmed off the test + // eg: foo/bar instead of /foo/bar + match = rule.match(entry) + } + + // if the entry is a directory, then it will match + // with a trailing slash. eg: /foo/bar/ or foo/bar/ + if (!match && partial) { + match = rule.match("/" + entry + "/") || + rule.match(entry + "/") + } + + // When including a file with a negated rule, it's + // relevant if a directory partially matches, since + // it may then match a file within it. + // Eg, if you ignore /a, but !/a/b/c + if (!match && rule.negate && partial) { + match = rule.match("/" + entry, true) || + rule.match(entry, true) + } + + if (match) { + included = rule.negate + } + }, this) + + return included +} + + +IgnoreReader.prototype.sort = function (a, b) { + var aig = this.ignoreFiles.indexOf(a) !== -1 + , big = this.ignoreFiles.indexOf(b) !== -1 + + if (aig && !big) return -1 + if (big && !aig) return 1 + return this._sort(a, b) +} + +IgnoreReader.prototype._sort = function (a, b) { + return 0 +} + +function alphasort (a, b) { + return a === b ? 0 + : a.toLowerCase() > b.toLowerCase() ? 1 + : a.toLowerCase() < b.toLowerCase() ? -1 + : a > b ? 1 + : -1 +} diff --git a/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json new file mode 100644 index 000000000..cc8cde03f --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/node_modules/fstream-ignore/package.json @@ -0,0 +1,42 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "name": "fstream-ignore", + "description": "A thing for ignoring files based on globs", + "version": "0.0.5", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/fstream-ignore.git" + }, + "main": "ignore.js", + "scripts": { + "test": "tap test/*.js" + }, + "dependencies": { + "minimatch": "~0.2.0", + "fstream": "~0.1.17", + "inherits": "~1.0.0" + }, + "devDependencies": { + "tap": "", + "rimraf": "", + "mkdirp": "" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "fstream-ignore@0.0.5", + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "_engineSupported": true, + "_npmVersion": "1.1.13", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "_from": "fstream-ignore@~0.0.5" +} diff --git a/deps/npm/node_modules/fstream-npm/package.json b/deps/npm/node_modules/fstream-npm/package.json new file mode 100644 index 000000000..66dc93290 --- /dev/null +++ b/deps/npm/node_modules/fstream-npm/package.json @@ -0,0 +1,34 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "name": "fstream-npm", + "description": "fstream class for creating npm packages", + "version": "0.0.4", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/fstream-npm.git" + }, + "main": "./fstream-npm.js", + "dependencies": { + "fstream-ignore": "~0.0.5", + "inherits": "" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "fstream-npm@0.0.4", + "devDependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "_engineSupported": true, + "_npmVersion": "1.1.13", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "_from": "fstream-npm@0 >=0.0.3" +} diff --git a/deps/npm/node_modules/fstream/lib/abstract.js b/deps/npm/node_modules/fstream/lib/abstract.js index add48b945..5675d4a1b 100644 --- a/deps/npm/node_modules/fstream/lib/abstract.js +++ b/deps/npm/node_modules/fstream/lib/abstract.js @@ -20,6 +20,11 @@ Abstract.prototype.on = function (ev, fn) { return this } +Abstract.prototype.abort = function () { + this._aborted = true + this.emit("abort") +} + Abstract.prototype.destroy = function () {} Abstract.prototype.warn = function (msg, code) { diff --git a/deps/npm/node_modules/fstream/lib/dir-reader.js b/deps/npm/node_modules/fstream/lib/dir-reader.js index ab990d150..6a418c0bc 100644 --- a/deps/npm/node_modules/fstream/lib/dir-reader.js +++ b/deps/npm/node_modules/fstream/lib/dir-reader.js @@ -11,6 +11,7 @@ var fs = require("graceful-fs") , mkdir = require("mkdirp") , path = require("path") , Reader = require("./reader.js") + , assert = require("assert").ok inherits(DirReader, Reader) @@ -24,25 +25,42 @@ function DirReader (props) { throw new Error("Non-directory type "+ props.type) } - me._entries = null + me.entries = null me._index = -1 me._paused = false me._length = -1 + if (props.sort) { + this.sort = props.sort + } + Reader.call(this, props) } DirReader.prototype._getEntries = function () { var me = this + + // race condition. might pause() before calling _getEntries, + // and then resume, and try to get them a second time. + if (me._gotEntries) return + me._gotEntries = true + fs.readdir(me._path, function (er, entries) { if (er) return me.error(er) - me._entries = entries - me._length = entries.length - // console.error("DR %s sort =", me.path, me.props.sort) - if (typeof me.props.sort === "function") { - me._entries.sort(me.props.sort) + + me.entries = entries + + me.emit("entries", entries) + if (me._paused) me.once("resume", processEntries) + else processEntries() + + function processEntries () { + me._length = me.entries.length + if (typeof me.sort === "function") { + me.entries = me.entries.sort(me.sort.bind(me)) + } + me._read() } - me._read() }) } @@ -50,7 +68,7 @@ DirReader.prototype._getEntries = function () { DirReader.prototype._read = function () { var me = this - if (!me._entries) return me._getEntries() + if (!me.entries) return me._getEntries() if (me._paused || me._currentEntry || me._aborted) { // console.error("DR paused=%j, current=%j, aborted=%j", me._paused, !!me._currentEntry, me._aborted) @@ -58,7 +76,7 @@ DirReader.prototype._read = function () { } me._index ++ - if (me._index >= me._length) { + if (me._index >= me.entries.length) { if (!me._ended) { me._ended = true me.emit("end") @@ -70,20 +88,26 @@ DirReader.prototype._read = function () { // ok, handle this one, then. // save creating a proxy, by stat'ing the thing now. - var p = path.resolve(me._path, me._entries[me._index]) + var p = path.resolve(me._path, me.entries[me._index]) + assert(p !== me._path) + assert(me.entries[me._index]) + // set this to prevent trying to _read() again in the stat time. me._currentEntry = p fs[ me.props.follow ? "stat" : "lstat" ](p, function (er, stat) { if (er) return me.error(er) - var entry = Reader({ path: p - , depth: me.depth + 1 - , root: me.root || me._proxy || me - , parent: me._proxy || me - , follow: me.follow - , filter: me.filter - , sort: me.props.sort - }, stat) + var who = me._proxy || me + + stat.path = p + stat.basename = path.basename(p) + stat.dirname = path.dirname(p) + var childProps = me.getChildProps.call(who, stat) + childProps.path = p + childProps.basename = path.basename(p) + childProps.dirname = path.dirname(p) + + var entry = Reader(childProps, stat) // console.error("DR Entry", p, stat.size) @@ -94,17 +118,25 @@ DirReader.prototype._read = function () { // This nomenclature is not completely final. entry.on("pause", function (who) { - if (!me._paused) { + if (!me._paused && !entry._disowned) { me.pause(who) } }) entry.on("resume", function (who) { - if (me._paused) { + if (me._paused && !entry._disowned) { me.resume(who) } }) + entry.on("stat", function (props) { + me.emit("_entryStat", entry, props) + if (entry._aborted) return + if (entry._paused) entry.once("resume", function () { + me.emit("entryStat", entry, props) + }) + }) + entry.on("ready", function EMITCHILD () { // console.error("DR emit child", entry._path) if (me._paused) { @@ -122,23 +154,25 @@ DirReader.prototype._read = function () { if (entry.type === "Socket") { me.emit("socket", entry) } else { - me.emit("entry", entry) - me.emit("child", entry) + me.emitEntry(entry) } }) var ended = false entry.on("close", onend) + entry.on("disown", onend) function onend () { if (ended) return ended = true me.emit("childEnd", entry) me.emit("entryEnd", entry) me._currentEntry = null - me._read() + if (!me._paused) { + me._read() + } } - // XXX Make this work in node. + // XXX Remove this. Works in node as of 0.6.2 or so. // Long filenames should not break stuff. entry.on("error", function (er) { if (entry._swallowErrors) { @@ -160,6 +194,26 @@ DirReader.prototype._read = function () { }) } +DirReader.prototype.disown = function (entry) { + entry.emit("beforeDisown") + entry._disowned = true + entry.parent = entry.root = null + if (entry === this._currentEntry) { + this._currentEntry = null + } + entry.emit("disown") +} + +DirReader.prototype.getChildProps = function (stat) { + return { depth: this.depth + 1 + , root: this.root || this + , parent: this + , follow: this.follow + , filter: this.filter + , sort: this.props.sort + } +} + DirReader.prototype.pause = function (who) { var me = this if (me._paused) return @@ -185,8 +239,11 @@ DirReader.prototype.resume = function (who) { } if (me._currentEntry) { - if (me._currentEntry.resume) { - me._currentEntry.resume(who) - } + if (me._currentEntry.resume) me._currentEntry.resume(who) } else me._read() } + +DirReader.prototype.emitEntry = function (entry) { + this.emit("entry", entry) + this.emit("child", entry) +} diff --git a/deps/npm/node_modules/fstream/lib/dir-writer.js b/deps/npm/node_modules/fstream/lib/dir-writer.js index 26338bd99..7073b883e 100644 --- a/deps/npm/node_modules/fstream/lib/dir-writer.js +++ b/deps/npm/node_modules/fstream/lib/dir-writer.js @@ -100,7 +100,9 @@ DirWriter.prototype._process = function () { // don't allow recursive copying var p = entry do { - if (p._path === me.root._path || p._path === me._path) { + var pp = p._path || p.path + if (pp === me.root._path || pp === me._path || + (pp && pp.indexOf(me._path) === 0)) { // console.error("DW Exit (recursive)", entry.basename, me._path) me._processing = false if (entry._collected) entry.pipe() diff --git a/deps/npm/node_modules/fstream/lib/link-writer.js b/deps/npm/node_modules/fstream/lib/link-writer.js index 8a9816380..5c8f1e701 100644 --- a/deps/npm/node_modules/fstream/lib/link-writer.js +++ b/deps/npm/node_modules/fstream/lib/link-writer.js @@ -4,7 +4,6 @@ module.exports = LinkWriter var fs = require("graceful-fs") , Writer = require("./writer.js") , inherits = require("inherits") - , collect = require("./collect.js") , path = require("path") , rimraf = require("rimraf") diff --git a/deps/npm/node_modules/fstream/lib/proxy-reader.js b/deps/npm/node_modules/fstream/lib/proxy-reader.js index f5ddfc3f5..a0ece34a2 100644 --- a/deps/npm/node_modules/fstream/lib/proxy-reader.js +++ b/deps/npm/node_modules/fstream/lib/proxy-reader.js @@ -63,6 +63,7 @@ ProxyReader.prototype._addProxy = function (proxy) { , "child" , "childEnd" , "warn" + , "stat" ].forEach(function (ev) { // console.error("~~ proxy event", ev, me.path) proxy.on(ev, me.emit.bind(me, ev)) diff --git a/deps/npm/node_modules/fstream/lib/reader.js b/deps/npm/node_modules/fstream/lib/reader.js index 6aa67ada7..e4e1b482c 100644 --- a/deps/npm/node_modules/fstream/lib/reader.js +++ b/deps/npm/node_modules/fstream/lib/reader.js @@ -187,19 +187,38 @@ Reader.prototype._stat = function (currentStat) { // if the filter doesn't pass, then just skip over this one. // still have to emit end so that dir-walking can move on. if (me.filter) { + var who = me._proxy || me // special handling for ProxyReaders - if (!me.filter.call(me._proxy || me)) { - me._aborted = true + if (!me.filter.call(who, who, props)) { + if (!me._disowned) { + me.abort() + me.emit("end") + me.emit("close") + } + return + } + } + + // last chance to abort or disown before the flow starts! + var events = ["_stat", "stat", "ready"] + var e = 0 + ;(function go () { + if (me._aborted) { me.emit("end") me.emit("close") return } - } - me.emit("ready", props) + if (me._paused) { + me.once("resume", go) + return + } - // if it's a directory, then we'll be emitting "entry" events. - me._read() + var ev = events[e ++] + if (!ev) return me._read() + me.emit(ev, props) + go() + })() } } diff --git a/deps/npm/node_modules/fstream/lib/writer.js b/deps/npm/node_modules/fstream/lib/writer.js index b7cd261bf..243f6b64e 100644 --- a/deps/npm/node_modules/fstream/lib/writer.js +++ b/deps/npm/node_modules/fstream/lib/writer.js @@ -123,12 +123,13 @@ Writer.prototype._stat = function (current) { var me = this , props = me.props , stat = props.follow ? "stat" : "lstat" + , who = me._proxy || me if (current) statCb(null, current) else fs[stat](me._path, statCb) function statCb (er, current) { - if (me.filter && !me.filter.call(me._proxy || me, current)) { + if (me.filter && !me.filter.call(who, who, current)) { me._aborted = true me.emit("end") me.emit("close") @@ -165,13 +166,83 @@ function create (me) { // XXX Need to clobber non-dirs that are in the way, // unless { clobber: false } in the props. - mkdir(path.dirname(me._path), Writer.dirmode, function (er) { + mkdir(path.dirname(me._path), Writer.dirmode, function (er, made) { // console.error("W created", path.dirname(me._path), er) if (er) return me.error(er) - me._create() + + // later on, we have to set the mode and owner for these + me._madeDir = made + return me._create() }) } +function endChmod (me, want, current, path, cb) { + var wantMode = want.mode + , chmod = want.follow || me.type !== "SymbolicLink" + ? "chmod" : "lchmod" + + if (!fs[chmod]) return cb() + if (typeof wantMode !== "number") return cb() + + var curMode = current.mode & 0777 + wantMode = wantMode & 0777 + if (wantMode === curMode) return cb() + + fs[chmod](path, wantMode, cb) +} + + +function endChown (me, want, current, path, cb) { + // Don't even try it unless root. Too easy to EPERM. + if (process.platform === "win32") return cb() + if (!process.getuid || !process.getuid() === 0) return cb() + if (typeof want.uid !== "number" && + typeof want.gid !== "number" ) return cb() + + if (current.uid === want.uid && + current.gid === want.gid) return cb() + + var chown = (me.props.follow || me.type !== "SymbolicLink") + ? "chown" : "lchown" + if (!fs[chown]) return cb() + + if (typeof want.uid !== "number") want.uid = current.uid + if (typeof want.gid !== "number") want.gid = current.gid + + fs[chown](path, want.uid, want.gid, cb) +} + +function endUtimes (me, want, current, path, cb) { + if (!fs.utimes || process.platform === "win32") return cb() + + var utimes = (want.follow || me.type !== "SymbolicLink") + ? "utimes" : "lutimes" + + if (utimes === "lutimes" && !fs[utimes]) { + utimes = "utimes" + } + + if (!fs[utimes]) return cb() + + var curA = current.atime + , curM = current.mtime + , meA = want.atime + , meM = want.mtime + + if (meA === undefined) meA = curA + if (meM === undefined) meM = curM + + if (!isDate(meA)) meA = new Date(meA) + if (!isDate(meM)) meA = new Date(meM) + + if (meA.getTime() === curA.getTime() && + meM.getTime() === curM.getTime()) return cb() + + fs[utimes](path, meA, meM, cb) +} + + +// XXX This function is beastly. Break it up! Writer.prototype._finish = function () { var me = this @@ -219,88 +290,82 @@ Writer.prototype._finish = function () { return function setProps (current) { - // console.error(" W setprops", me._path) - // mode - var wantMode = me.props.mode - , chmod = me.props.follow || me.type !== "SymbolicLink" - ? "chmod" : "lchmod" - - if (fs[chmod] && typeof wantMode === "number") { - wantMode = wantMode & 0777 - todo ++ - // console.error(" W chmod", wantMode.toString(8), me.basename, "\r") - fs[chmod](me._path, wantMode, next(chmod)) - } + endChmod(me, me.props, current, me._path, next("chmod")) + endChown(me, me.props, current, me._path, next("chown")) + endUtimes(me, me.props, current, me._path, next("chown")) + } - // uid, gid - // Don't even try it unless root. Too easy to EPERM. - if (process.platform !== "win32" && - process.getuid && process.getuid() === 0 && - ( typeof me.props.uid === "number" || - typeof me.props.gid === "number" )) { - var chown = (me.props.follow || me.type !== "SymbolicLink") - ? "chown" : "lchown" - if (fs[chown]) { - if (typeof me.props.uid !== "number") me.props.uid = current.uid - if (typeof me.props.gid !== "number") me.props.gid = current.gid - if (me.props.uid !== current.uid || me.props.gid !== current.gid) { - todo ++ - // console.error(" W chown", me.props.uid, me.props.gid, me.basename) - fs[chown](me._path, me.props.uid, me.props.gid, next("chown")) + function next (what) { + todo ++ + return function (er) { + // console.error(" W Finish", what, todo) + if (errState) return + if (er) { + er.fstream_finish_call = what + return me.error(errState = er) + } + if (--todo > 0) return + if (done) return + done = true + + // we may still need to set the mode/etc. on some parent dirs + // that were created previously. delay end/close until then. + if (!me._madeDir) return end() + else endMadeDir(me, me._path, end) + + function end (er) { + if (er) { + er.fstream_finish_call = "setupMadeDir" + return me.error(er) } + // all the props have been set, so we're completely done. + me.emit("end") + me.emit("close") } } + } +} - // atime, mtime. - if (fs.utimes && process.platform !== "win32") { - var utimes = (me.props.follow || me.type !== "SymbolicLink") - ? "utimes" : "lutimes" - - if (utimes === "lutimes" && !fs[utimes]) { - utimes = "utimes" - } - - var curA = current.atime - , curM = current.mtime - , meA = me.props.atime - , meM = me.props.mtime +function endMadeDir (me, p, cb) { + var made = me._madeDir + // everything *between* made and path.dirname(me._path) + // needs to be set up. Note that this may just be one dir. + var d = path.dirname(p) - if (meA === undefined) meA = curA - if (meM === undefined) meM = curM + endMadeDir_(me, d, function (er) { + if (er) return cb(er) + if (d === made) { + return cb() + } + endMadeDir(me, d, cb) + }) +} - if (!isDate(meA)) meA = new Date(meA) - if (!isDate(meM)) meA = new Date(meM) +function endMadeDir_ (me, p, cb) { + var dirProps = {} + Object.keys(me.props).forEach(function (k) { + dirProps[k] = me.props[k] - if (meA.getTime() !== curA.getTime() || - meM.getTime() !== curM.getTime()) { - todo ++ - // console.error(" W utimes", meA, meM, me.basename) - fs[utimes](me._path, meA, meM, next("utimes")) - } + // only make non-readable dirs if explicitly requested. + if (k === "mode" && me.type !== "Directory") { + dirProps[k] = dirProps[k] | 0111 } + }) - // finally, handle the case if there was nothing to do. - if (todo === 0) { - // console.error(" W nothing to do", me.basename) - next("nothing to do")() - } - } + var todo = 3 + , errState = null + fs.stat(p, function (er, current) { + if (er) return cb(errState = er) + endChmod(me, dirProps, current, p, next) + endChown(me, dirProps, current, p, next) + endUtimes(me, dirProps, current, p, next) + }) - function next (what) { return function (er) { - // console.error(" W Finish", what, todo) + function next (er) { if (errState) return - if (er) { - er.fstream_finish_call = what - return me.error(errState = er) - } - if (--todo > 0) return - if (done) return - done = true - - // all the props have been set, so we're completely done. - me.emit("end") - me.emit("close") - }} + if (er) return cb(errState = er) + if (-- todo === 0) return cb() + } } Writer.prototype.pipe = function () { diff --git a/deps/npm/node_modules/fstream/package.json b/deps/npm/node_modules/fstream/package.json index 2ad0c6cba..2be498e09 100644 --- a/deps/npm/node_modules/fstream/package.json +++ b/deps/npm/node_modules/fstream/package.json @@ -6,7 +6,7 @@ }, "name": "fstream", "description": "Advanced file system stream things", - "version": "0.1.14", + "version": "0.1.18", "repository": { "type": "git", "url": "git://github.com/isaacs/fstream.git" @@ -32,11 +32,11 @@ "name": "isaacs", "email": "i@izs.me" }, - "_id": "fstream@0.1.14", + "_id": "fstream@0.1.18", "optionalDependencies": {}, "_engineSupported": true, - "_npmVersion": "1.1.10", + "_npmVersion": "1.1.13", "_nodeVersion": "v0.7.7-pre", "_defaultsLoaded": true, - "_from": "fstream@~0.1.13" + "_from": "fstream@~0.1.17" } diff --git a/deps/npm/node_modules/minimatch/README.md b/deps/npm/node_modules/minimatch/README.md index d5f97234c..6fd07d2e9 100644 --- a/deps/npm/node_modules/minimatch/README.md +++ b/deps/npm/node_modules/minimatch/README.md @@ -60,11 +60,12 @@ thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but `a/**b` will not. **Note that this is different from the way that `**` is handled by ruby's `Dir` class.** -If an escaped pattern has no matches, and the `null` flag is not set, +If an escaped pattern has no matches, and the `nonull` flag is set, then minimatch.match returns the pattern as-provided, rather than interpreting the character escapes. For example, `minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. If brace expansion is not disabled, then it is performed before any other interpretation of the glob pattern. Thus, a pattern like @@ -147,8 +148,8 @@ var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) ### minimatch.match(list, pattern, options) Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, then -return the pattern (unless `{ null: true }` in the options.) +files, in the style of fnmatch or glob. If nothing is matched, and +options.nonull is set, then return a list containing the pattern itself. ```javascript var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) @@ -210,3 +211,8 @@ comment. ### nonegate Suppress the behavior of treating a leading `!` character as negation. + +### flipNegate + +Returns from negate expressions the same as if they were not negated. +(Ie, true on a hit, false on a miss.) diff --git a/deps/npm/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/minimatch/minimatch.js index 5ca6008f9..1ca08104e 100644 --- a/deps/npm/node_modules/minimatch/minimatch.js +++ b/deps/npm/node_modules/minimatch/minimatch.js @@ -4,7 +4,6 @@ minimatch.Minimatch = Minimatch var LRU = require("lru-cache") , cache = minimatch.cache = new LRU(100) , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - , pathSplit = process.platform === "win32" ? /\\|\// : "/" var path = require("path") // any single thing other than / @@ -130,7 +129,7 @@ function make () { this.parseNegate() // step 2: expand braces - var set = this.braceExpand() + var set = this.globSet = this.braceExpand() if (options.debug) console.error(this.pattern, set) @@ -139,7 +138,7 @@ function make () { // These will be regexps, except in the case of "**", which is // set to the GLOBSTAR object for globstar behavior, // and will not contain any / characters - set = set.map(function (s) { + set = this.globParts = set.map(function (s) { return s.split(slashSplit) }) @@ -159,36 +158,6 @@ function make () { if (options.debug) console.error(this.pattern, set) - // step 4: if we have a defined root, then patterns starting with "" - // get attached to that. If we have a defined cwd, then patterns - // *not* starting with "" get attached to that. - // Exception 1: on windows, a pattern like //\?/c:/ or c:/ will - // not get anything prefixed to it. - // Exception 2: If matchBase is set, and it's just a filename, - // then don't prefix anything onto it, since it'll only match - // files with that basename anyhow. - set = set.map(function (p) { - if (process.platform === "win32" && - ( (p[0] === "" && p[1] === "" && p[2] === "\\?") // unc - || (typeof p[0] === "string" && p[0].match(/^[a-zA-Z]:$/)) )) { - return p - } - if (options.matchBase && p.length === 1) return p - // do prefixing. - if (options.root && p[0] === "") { - var r = options.root.split(pathSplit) - if (r[r.length - 1] === "") r.pop() - r = r.concat(p.slice(1)) - r.absolute = true - return r - } - if (options.cwd && p[0] !== "") { - return options.cwd.split(pathSplit).concat(p) - } - return p - }) - - this.set = set } @@ -549,7 +518,8 @@ function parse (pattern, isSub) { patternListStack.push({ type: plType , start: i - 1 , reStart: re.length }) - re += stateChar === "!" ? "(?!" : "(?:" + // negation is (?:(?!js)[^/]*) + re += stateChar === "!" ? "(?:(?!" : "(?:" stateChar = false continue @@ -562,11 +532,15 @@ function parse (pattern, isSub) { hasMagic = true re += ")" plType = patternListStack.pop().type + // negation is (?:(?!js)[^/]*) + // The others are (?:<pattern>)<type> switch (plType) { + case "!": + re += "[^/]*?)" + break case "?": case "+": case "*": re += plType - case "!": // already handled by the start case "@": break // the default anyway } continue @@ -821,12 +795,14 @@ function match (f, partial) { var pattern = set[i] var hit = this.matchOne(f, pattern, partial) if (hit) { + if (options.flipNegate) return true return !this.negate } } // didn't get any hits. this is success if it's a negative // pattern, failure otherwise. + if (options.flipNegate) return false return this.negate } diff --git a/deps/npm/node_modules/minimatch/package.json b/deps/npm/node_modules/minimatch/package.json index 2816a8405..1bcb3d43e 100644 --- a/deps/npm/node_modules/minimatch/package.json +++ b/deps/npm/node_modules/minimatch/package.json @@ -1,8 +1,12 @@ { - "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, "name": "minimatch", "description": "a glob matcher in javascript", - "version": "0.1.5", + "version": "0.2.2", "repository": { "type": "git", "url": "git://github.com/isaacs/minimatch.git" @@ -18,12 +22,23 @@ "lru-cache": "~1.0.5" }, "devDependencies": { - "tap": "~0.1.3" + "tap": "" }, - "licenses" : [ + "licenses": [ { - "type" : "MIT", - "url" : "http://github.com/isaacs/minimatch/raw/master/LICENSE" + "type": "MIT", + "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" } - ] + ], + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "minimatch@0.2.2", + "optionalDependencies": {}, + "_engineSupported": true, + "_npmVersion": "1.1.12", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "_from": "minimatch@0" } diff --git a/deps/npm/node_modules/mkdirp/index.js b/deps/npm/node_modules/mkdirp/index.js index 25f43adfa..871488f63 100644 --- a/deps/npm/node_modules/mkdirp/index.js +++ b/deps/npm/node_modules/mkdirp/index.js @@ -8,18 +8,24 @@ function mkdirP (p, mode, f) { f = mode; mode = 0777 & (~process.umask()); } - + + // secret passalong argument. + var made = arguments[3] || null; + var cb = f || function () {}; if (typeof mode === 'string') mode = parseInt(mode, 8); p = path.resolve(p); fs.mkdir(p, mode, function (er) { - if (!er) return cb(); + if (!er) { + made = made || p; + return cb(null, made); + } switch (er.code) { case 'ENOENT': - mkdirP(path.dirname(p), mode, function (er) { - if (er) cb(er); - else mkdirP(p, mode, cb); + mkdirP(path.dirname(p), mode, function (er, made) { + if (er) cb(er, made); + else mkdirP(p, mode, cb, made); }); break; @@ -27,13 +33,13 @@ function mkdirP (p, mode, f) { fs.stat(p, function (er2, stat) { // if the stat fails, then that's super weird. // let the original EEXIST be the failure reason. - if (er2 || !stat.isDirectory()) cb(er) - else cb(); + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); }); break; default: - cb(er); + cb(er, made); break; } }); @@ -43,37 +49,39 @@ mkdirP.sync = function sync (p, mode) { if (mode === undefined) { mode = 0777 & (~process.umask()); } - + + // secret passalong argument + var made = arguments[2] || null; + if (typeof mode === 'string') mode = parseInt(mode, 8); p = path.resolve(p); - + try { - fs.mkdirSync(p, mode) + fs.mkdirSync(p, mode); + made = made || p; } catch (err0) { switch (err0.code) { case 'ENOENT' : - var err1 = sync(path.dirname(p), mode) - if (err1) throw err1; - else return sync(p, mode); + made = sync(path.dirname(p), mode, made); + sync(p, mode, made); break; - + case 'EEXIST' : var stat; try { stat = fs.statSync(p); } catch (err1) { - throw err0 + throw err0; } if (!stat.isDirectory()) throw err0; - else return null; break; default : throw err0 break; } } - - return null; + + return made; }; diff --git a/deps/npm/node_modules/mkdirp/package.json b/deps/npm/node_modules/mkdirp/package.json index 1bf9ac782..2a40503c5 100644 --- a/deps/npm/node_modules/mkdirp/package.json +++ b/deps/npm/node_modules/mkdirp/package.json @@ -1,23 +1,44 @@ { - "name" : "mkdirp", - "description" : "Recursively mkdir, like `mkdir -p`", - "version" : "0.3.0", - "author" : "James Halliday <mail@substack.net> (http://substack.net)", - "main" : "./index", - "keywords" : [ - "mkdir", - "directory" - ], - "repository" : { - "type" : "git", - "url" : "http://github.com/substack/node-mkdirp.git" - }, - "scripts" : { - "test" : "tap test/*.js" - }, - "devDependencies" : { - "tap" : "0.0.x" - }, - "license" : "MIT/X11", - "engines": { "node": "*" } + "name": "mkdirp", + "description": "Recursively mkdir, like `mkdir -p`", + "version": "0.3.0", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "main": "./index", + "keywords": [ + "mkdir", + "directory" + ], + "repository": { + "type": "git", + "url": "git://github.com/substack/node-mkdirp.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "devDependencies": { + "tap": "0.2" + }, + "license": "MIT/X11", + "engines": { + "node": "*" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "mkdirp@0.3.0", + "dependencies": {}, + "optionalDependencies": {}, + "_engineSupported": true, + "_npmVersion": "1.1.13", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "dist": { + "shasum": "a3cc6816e78b84f570caf9d95cb7368dc5d0bab8" + }, + "_from": "../mkdirp" } diff --git a/deps/npm/node_modules/node-gyp/README.md b/deps/npm/node_modules/node-gyp/README.md index 32b22a097..e796e6982 100644 --- a/deps/npm/node_modules/node-gyp/README.md +++ b/deps/npm/node_modules/node-gyp/README.md @@ -83,10 +83,10 @@ building a node addon looks like: ``` json { - 'targets': [ + "targets": [ { - 'target_name': 'binding', - 'sources': [ 'src/binding.cc' ] + "target_name": "binding", + "sources": [ "src/binding.cc" ] } ] } diff --git a/deps/npm/node_modules/node-gyp/bin/node-gyp.js b/deps/npm/node_modules/node-gyp/bin/node-gyp.js index 49c58c6c9..328e1a94e 100755 --- a/deps/npm/node_modules/node-gyp/bin/node-gyp.js +++ b/deps/npm/node_modules/node-gyp/bin/node-gyp.js @@ -10,7 +10,7 @@ process.title = 'node-gyp' * Module dependencies. */ -var gyp = require('../lib/node-gyp') +var gyp = require('../') , inspect = require('util').inspect , ansi = require('ansi') , cursor = ansi(process.stderr) diff --git a/deps/npm/node_modules/node-gyp/lib/install.js b/deps/npm/node_modules/node-gyp/lib/install.js index e9328a9cd..8ad484d4e 100644 --- a/deps/npm/node_modules/node-gyp/lib/install.js +++ b/deps/npm/node_modules/node-gyp/lib/install.js @@ -109,10 +109,16 @@ function install (gyp, argv, callback) { function download(url,onError) { gyp.info('downloading:', url) - requestOpts = { uri: url } + var requestOpts = { + uri: url + , onResponse: true + } // basic support for a proxy server - var proxyUrl = gyp.opts.proxy || process.env.http_proxy || process.env.HTTP_PROXY + var proxyUrl = gyp.opts.proxy + || process.env.http_proxy + || process.env.HTTP_PROXY + || process.env.npm_config_proxy if (proxyUrl) { gyp.verbose('using proxy:', proxyUrl) requestOpts.proxy = proxyUrl @@ -284,12 +290,10 @@ function install (gyp, argv, callback) { function valid (file) { // header files - return minimatch(file, 'src/*.h') - || minimatch(file, 'deps/**/*.h') + return minimatch(file, '*.h', { matchBase: true }) // non-legacy versions of node also extract the gyp build files || (!isLegacy && - (minimatch(file, '*.gypi') - || minimatch(file, 'tools/*.gypi') + (minimatch(file, '*.gypi', { matchBase: true }) || minimatch(file, 'tools/gyp_addon') || (minimatch(file, 'tools/gyp/**') && !minimatch(file, 'tools/gyp/test/**')) ) diff --git a/deps/npm/node_modules/node-gyp/lib/remove.js b/deps/npm/node_modules/node-gyp/lib/remove.js index e17279b59..a19404066 100644 --- a/deps/npm/node_modules/node-gyp/lib/remove.js +++ b/deps/npm/node_modules/node-gyp/lib/remove.js @@ -23,7 +23,7 @@ function remove (gyp, argv, callback) { var v = argv[0] || gyp.opts.target if (!v) { - return callback(new Error('You must specify a version number to remove. Ex: "0.6.12"')) + return callback(new Error('You must specify a version number to remove. Ex: "' + process.version + '"')) } // parse the version to normalize and make sure it's valid diff --git a/deps/npm/node_modules/node-gyp/node_modules/ansi/package.json b/deps/npm/node_modules/node-gyp/node_modules/ansi/package.json index b6dfe6fda..259382f82 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/ansi/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/ansi/package.json @@ -41,11 +41,8 @@ "dependencies": {}, "optionalDependencies": {}, "_engineSupported": true, - "_npmVersion": "1.1.11", + "_npmVersion": "1.1.13", "_nodeVersion": "v0.7.7-pre", "_defaultsLoaded": true, - "dist": { - "shasum": "926ed94f0865d5732789819999b432c57bbed0ec" - }, "_from": "ansi@0.0.x" } diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/.travis.yml b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/.travis.yml deleted file mode 100644 index f1d0f13c8..000000000 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE deleted file mode 100644 index 05a401094..000000000 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md deleted file mode 100644 index 6fd07d2e9..000000000 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/README.md +++ /dev/null @@ -1,218 +0,0 @@ -# minimatch - -A minimal matching utility. - -[](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -Eventually, it will replace the C binding in node-glob. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -### Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. **Note that this is different from the way that `**` is -handled by ruby's `Dir` class.** - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - - -## Minimatch Class - -Create a minimatch object by instanting the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -## Functions - -The top-level exported function has a `cache` property, which is an LRU -cache set to store 100 items. So, calling these methods repeatedly -with the same pattern and options will use the same Minimatch object, -saving the cost of parsing it multiple times. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself. When set, an empty list is returned if there are -no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js deleted file mode 100644 index 1ca08104e..000000000 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,986 +0,0 @@ -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var LRU = require("lru-cache") - , cache = minimatch.cache = new LRU(100) - , GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} - -var path = require("path") - // any single thing other than / - // don't need to escape / when using new RegExp() - , qmark = "[^/]" - - // * => any number of characters - , star = qmark + "*?" - - // ** when dots are allowed. Anything goes, except .. and . - // not (^ or / followed by one or two dots followed by $ or /), - // followed by anything, any number of times. - , twoStarDot = "(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?" - - // not a ^ or / followed by a dot, - // followed by anything, any number of times. - , twoStarNoDot = "(?:(?!(?:\\\/|^)\\.).)*?" - - // characters that need to be escaped in RegExp. - , reSpecials = charSet("().*{}+?[]^$\\!") - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split("").reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.monkeyPatch = monkeyPatch -function monkeyPatch () { - var desc = Object.getOwnPropertyDescriptor(String.prototype, "match") - var orig = desc.value - desc.value = function (p) { - if (p instanceof Minimatch) return p.match(this) - return orig.call(this, p) - } - Object.defineProperty(String.prototype, desc) -} - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - return false - } - - // "" only matches "" - if (pattern.trim() === "") return p === "" - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options, cache) - } - - if (typeof pattern !== "string") { - throw new TypeError("glob pattern string required") - } - - if (!options) options = {} - pattern = pattern.trim() - - // lru storage. - // these things aren't particularly big, but walking down the string - // and turning it into a regexp can get pretty costly. - var cacheKey = pattern + "\n" + Object.keys(options).filter(function (k) { - return options[k] - }).join(":") - var cached = minimatch.cache.get(cacheKey) - if (cached) return cached - minimatch.cache.set(cacheKey, this) - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === "#") { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) console.error(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - if (options.debug) console.error(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - if (options.debug) console.error(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return -1 === s.indexOf(false) - }) - - if (options.debug) console.error(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - , negate = false - , options = this.options - , negateOffset = 0 - - if (options.nonegate) return - - for ( var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === "!" - ; i ++) { - negate = !negate - negateOffset ++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return new Minimatch(pattern, options).braceExpand() -} - -Minimatch.prototype.braceExpand = braceExpand -function braceExpand (pattern, options) { - options = options || this.options - pattern = typeof pattern === "undefined" - ? this.pattern : pattern - - if (typeof pattern === "undefined") { - throw new Error("undefined pattern") - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - var escaping = false - - // examples and comments refer to this crazy pattern: - // a{b,c{d,e},{f,g}h}x{y,z} - // expected: - // abxy - // abxz - // acdxy - // acdxz - // acexy - // acexz - // afhxy - // afhxz - // aghxy - // aghxz - - // everything before the first \{ is just a prefix. - // So, we pluck that off, and work with the rest, - // and then prepend it to everything we find. - if (pattern.charAt(0) !== "{") { - // console.error(pattern) - var prefix = null - for (var i = 0, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - // console.error(i, c) - if (c === "\\") { - escaping = !escaping - } else if (c === "{" && !escaping) { - prefix = pattern.substr(0, i) - break - } - } - - // actually no sets, all { were escaped. - if (prefix === null) { - // console.error("no sets") - return [pattern] - } - - var tail = braceExpand(pattern.substr(i), options) - return tail.map(function (t) { - return prefix + t - }) - } - - // now we have something like: - // {b,c{d,e},{f,g}h}x{y,z} - // walk through the set, expanding each part, until - // the set ends. then, we'll expand the suffix. - // If the set only has a single member, then'll put the {} back - - // first, handle numeric sets, since they're easier - var numset = pattern.match(/^\{(-?[0-9]+)\.\.(-?[0-9]+)\}/) - if (numset) { - // console.error("numset", numset[1], numset[2]) - var suf = braceExpand(pattern.substr(numset[0].length), options) - , start = +numset[1] - , end = +numset[2] - , inc = start > end ? -1 : 1 - , set = [] - for (var i = start; i != (end + inc); i += inc) { - // append all the suffixes - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - set.push(i + suf[ii]) - } - } - return set - } - - // ok, walk through the set - // We hope, somewhat optimistically, that there - // will be a } at the end. - // If the closing brace isn't found, then the pattern is - // interpreted as braceExpand("\\" + pattern) so that - // the leading \{ will be interpreted literally. - var i = 1 // skip the \{ - , depth = 1 - , set = [] - , member = "" - , sawEnd = false - , escaping = false - - function addMember () { - set.push(member) - member = "" - } - - // console.error("Entering for") - FOR: for (i = 1, l = pattern.length; i < l; i ++) { - var c = pattern.charAt(i) - // console.error("", i, c) - - if (escaping) { - escaping = false - member += "\\" + c - } else { - switch (c) { - case "\\": - escaping = true - continue - - case "{": - depth ++ - member += "{" - continue - - case "}": - depth -- - // if this closes the actual set, then we're done - if (depth === 0) { - addMember() - // pluck off the close-brace - i ++ - break FOR - } else { - member += c - continue - } - - case ",": - if (depth === 1) { - addMember() - } else { - member += c - } - continue - - default: - member += c - continue - } // switch - } // else - } // for - - // now we've either finished the set, and the suffix is - // pattern.substr(i), or we have *not* closed the set, - // and need to escape the leading brace - if (depth !== 0) { - // console.error("didn't close", pattern) - return braceExpand("\\" + pattern, options) - } - - // x{y,z} -> ["xy", "xz"] - // console.error("set", set) - // console.error("suffix", pattern.substr(i)) - var suf = braceExpand(pattern.substr(i), options) - // ["b", "c{d,e}","{f,g}h"] -> - // [["b"], ["cd", "ce"], ["fh", "gh"]] - var addBraces = set.length === 1 - // console.error("set pre-expanded", set) - set = set.map(function (p) { - return braceExpand(p, options) - }) - // console.error("set expanded", set) - - - // [["b"], ["cd", "ce"], ["fh", "gh"]] -> - // ["b", "cd", "ce", "fh", "gh"] - set = set.reduce(function (l, r) { - return l.concat(r) - }) - - if (addBraces) { - set = set.map(function (s) { - return "{" + s + "}" - }) - } - - // now attach the suffixes. - var ret = [] - for (var i = 0, l = set.length; i < l; i ++) { - for (var ii = 0, ll = suf.length; ii < ll; ii ++) { - ret.push(set[i] + suf[ii]) - } - } - return ret -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === "**") return GLOBSTAR - if (pattern === "") return "" - - var re = "" - , hasMagic = false - , escaping = false - // ? => one single character - , patternListStack = [] - , plType - , stateChar - , inClass = false - , reClassStart = -1 - , classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - , patternStart = pattern.charAt(0) === "." ? "" // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? "(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))" - : "(?!\\.)" - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case "*": - re += star - hasMagic = true - break - case "?": - re += qmark - hasMagic = true - break - default: - re += "\\"+stateChar - break - } - stateChar = false - } - } - - for ( var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i ++ ) { - - if (options.debug) { - console.error("%s\t%s %s %j", pattern, i, re, c) - } - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += "\\" + c - escaping = false - continue - } - - SWITCH: switch (c) { - case "/": - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case "\\": - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case "?": - case "*": - case "+": - case "@": - case "!": - if (options.debug) { - console.error("%s\t%s %s %j <-- stateChar", pattern, i, re, c) - } - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - if (c === "!" && i === classStart + 1) c = "^" - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case "(": - if (inClass) { - re += "(" - continue - } - - if (!stateChar) { - re += "\\(" - continue - } - - plType = stateChar - patternListStack.push({ type: plType - , start: i - 1 - , reStart: re.length }) - // negation is (?:(?!js)[^/]*) - re += stateChar === "!" ? "(?:(?!" : "(?:" - stateChar = false - continue - - case ")": - if (inClass || !patternListStack.length) { - re += "\\)" - continue - } - - hasMagic = true - re += ")" - plType = patternListStack.pop().type - // negation is (?:(?!js)[^/]*) - // The others are (?:<pattern>)<type> - switch (plType) { - case "!": - re += "[^/]*?)" - break - case "?": - case "+": - case "*": re += plType - case "@": break // the default anyway - } - continue - - case "|": - if (inClass || !patternListStack.length || escaping) { - re += "\\|" - escaping = false - continue - } - - re += "|" - continue - - // these are mostly the same in regexp and glob - case "[": - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += "\\" + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case "]": - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += "\\" + c - escaping = false - continue - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === "^" && inClass)) { - re += "\\" - } - - re += c - - } // switch - } // for - - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - var cs = pattern.substr(classStart + 1) - , sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + "\\[" + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - var pl - while (pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = "\\" - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + "|" - }) - - // console.error("tail=%j\n %s", tail, tail) - var t = pl.type === "*" ? star - : pl.type === "?" ? qmark - : "\\" + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) - + t + "\\(" - + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += "\\\\" - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case ".": - case "[": - case "(": addPatternStart = true - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== "" && hasMagic) re = "(?=.)" + re - - if (addPatternStart) re = patternStart + re - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [ re, hasMagic ] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? "i" : "" - , regExp = new RegExp("^" + re + "$", flags) - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) return this.regexp = false - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - , flags = options.nocase ? "i" : "" - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === "string") ? regExpEscape(p) - : p._src - }).join("\\\/") - }).join("|") - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = "^" + re + "$" - - // can match anything, as long as it's not this. - if (this.negate) re = "^(?!" + re + ").*$" - - try { - return this.regexp = new RegExp(re, flags) - } catch (ex) { - return this.regexp = false - } -} - -minimatch.match = function (list, pattern, options) { - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - // console.error("match", f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === "" - - if (f === "/" && partial) return true - - var options = this.options - - // first, normalize any slash-separated path parts. - // f = path.normalize(f) - - // windows: need to use /, not \ - // On other platforms, \ is a valid (albeit bad) filename char. - if (process.platform === "win32") { - f = f.split("\\").join("/") - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - if (options.debug) { - console.error(this.pattern, "split", f) - } - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - // console.error(this.pattern, "set", set) - - for (var i = 0, l = set.length; i < l; i ++) { - var pattern = set[i] - var hit = this.matchOne(f, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - if (options.debug) { - console.error("matchOne", - { "this": this - , file: file - , pattern: pattern }) - } - - if (options.matchBase && pattern.length === 1) { - file = path.basename(file.join("/")).split("/") - } - - if (options.debug) { - console.error("matchOne", file.length, pattern.length) - } - - for ( var fi = 0 - , pi = 0 - , fl = file.length - , pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi ++, pi ++ ) { - - if (options.debug) { - console.error("matchOne loop") - } - var p = pattern[pi] - , f = file[fi] - - if (options.debug) { - console.error(pattern, p, f) - } - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - , pr = pi + 1 - if (pr === pl) { - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for ( ; fi < fl; fi ++) { - if (file[fi] === "." || file[fi] === ".." || - (!options.dot && file[fi].charAt(0) === ".")) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - WHILE: while (fr < fl) { - var swallowee = file[fr] - if (swallowee === "." || swallowee === ".." || - (!options.dot && swallowee.charAt(0) === ".")) { - // console.error("dot detected!") - break WHILE - } - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - // found a match. - return true - } else { - // ** swallows a segment, and continue. - fr ++ - } - } - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - // console.error("\n>>> no match, partial?", file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === "string") { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - if (options.debug) { - console.error("string match", p, f, hit) - } - } else { - hit = f.match(p) - if (options.debug) { - console.error("pattern match", p, f, hit) - } - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === "") - return emptyFileEnd - } - - // should be unreachable. - throw new Error("wtf?") -} - - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, "$1") -} - - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") -} diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json deleted file mode 100644 index 7ca0e02ba..000000000 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/node_modules/minimatch/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "http://blog.izs.me" - }, - "name": "minimatch", - "description": "a glob matcher in javascript", - "version": "0.2.2", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "main": "minimatch.js", - "scripts": { - "test": "tap test" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "lru-cache": "~1.0.5" - }, - "devDependencies": { - "tap": "" - }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/isaacs/minimatch/raw/master/LICENSE" - } - ], - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "_id": "minimatch@0.2.2", - "optionalDependencies": {}, - "_engineSupported": true, - "_npmVersion": "1.1.11", - "_nodeVersion": "v0.7.7-pre", - "_defaultsLoaded": true, - "_from": "minimatch@0.2" -} diff --git a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json index 5d8266db7..952ea1b95 100644 --- a/deps/npm/node_modules/node-gyp/node_modules/glob/package.json +++ b/deps/npm/node_modules/node-gyp/node_modules/glob/package.json @@ -36,7 +36,7 @@ "_id": "glob@3.1.9", "optionalDependencies": {}, "_engineSupported": true, - "_npmVersion": "1.1.11", + "_npmVersion": "1.1.13", "_nodeVersion": "v0.7.7-pre", "_defaultsLoaded": true, "_from": "glob@3" diff --git a/deps/npm/node_modules/node-gyp/package.json b/deps/npm/node_modules/node-gyp/package.json index 956d38d16..3dc04578f 100644 --- a/deps/npm/node_modules/node-gyp/package.json +++ b/deps/npm/node_modules/node-gyp/package.json @@ -10,7 +10,7 @@ "bindings", "gyp" ], - "version": "0.3.7", + "version": "0.3.9", "installVersion": 5, "author": { "name": "Nathan Rajlich", @@ -31,7 +31,7 @@ "glob": "3", "graceful-fs": "1", "fstream": "~0.1.13", - "minimatch": "~0.1.4", + "minimatch": "0.2.x", "mkdirp": "0.3.0", "nopt": "1", "request": "2.9.x", @@ -47,15 +47,15 @@ "name": "isaacs", "email": "i@izs.me" }, - "_id": "node-gyp@0.3.7", + "_id": "node-gyp@0.3.9", "devDependencies": {}, "optionalDependencies": {}, "_engineSupported": true, - "_npmVersion": "1.1.11", + "_npmVersion": "1.1.13", "_nodeVersion": "v0.7.7-pre", "_defaultsLoaded": true, "dist": { - "shasum": "0a83feb32683c828537eacd6deeae066d1dc01f1" + "shasum": "78c01d4b662c55607e7220b8c8e2a1f25390474a" }, - "_from": "node-gyp@~0.3.4" + "_from": "node-gyp@~0.3.7" } diff --git a/deps/npm/node_modules/read/LICENCE b/deps/npm/node_modules/read/LICENCE new file mode 100644 index 000000000..74489e2e2 --- /dev/null +++ b/deps/npm/node_modules/read/LICENCE @@ -0,0 +1,25 @@ +Copyright (c) Isaac Z. Schlueter +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/npm/node_modules/read/lib/read.js b/deps/npm/node_modules/read/lib/read.js index 246044bcd..ba2ef0ae7 100644 --- a/deps/npm/node_modules/read/lib/read.js +++ b/deps/npm/node_modules/read/lib/read.js @@ -5,6 +5,14 @@ var buffer = "" , tty = require("tty") , StringDecoder = require("string_decoder").StringDecoder +function raw (mode) { + try { + process.stdin.setRawMode(mode) + } catch (e) { + tty.setRawMode(mode) + } +} + function read (opts, cb) { if (!cb) cb = opts, opts = {} @@ -25,7 +33,7 @@ function read (opts, cb) { cb = (function (cb) { var called = false var t = setTimeout(function () { - tty.setRawMode(false) + raw(false) process.stdout.write("\n") if (def) done(null, def) else done(new Error("timeout")) @@ -109,7 +117,7 @@ function rawRead (def, timeout, delim, silent, num, cb) { , val = "" , decoder = new StringDecoder - tty.setRawMode(true) + raw(true) stdin.resume() stdin.on("error", cb) stdin.on("data", function D (c) { @@ -122,7 +130,7 @@ function rawRead (def, timeout, delim, silent, num, cb) { case "\u0004": // EOF case delim: - tty.setRawMode(false) + raw(false) stdin.removeListener("data", D) stdin.removeListener("error", cb) val = val.trim() || def @@ -131,7 +139,7 @@ function rawRead (def, timeout, delim, silent, num, cb) { return cb(null, val) case "\u0003": case "\0": // ^C or other signal abort - tty.setRawMode(false) + raw(false) stdin.removeListener("data", D) stdin.removeListener("error", cb) stdin.pause() diff --git a/deps/npm/node_modules/read/package.json b/deps/npm/node_modules/read/package.json index bc05577aa..f206a719b 100644 --- a/deps/npm/node_modules/read/package.json +++ b/deps/npm/node_modules/read/package.json @@ -1,16 +1,28 @@ { "name": "read", - "version": "0.0.1", + "version": "0.0.2", "main": "lib/read.js", "dependencies": {}, "devDependencies": {}, "engines": { "node": ">=0.6" }, - "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/)", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, "description": "read(1) for node programs", "repository": { "type": "git", "url": "git://github.com/isaacs/read.git" - } + }, + "license": "BSD", + "_id": "read@0.0.2", + "optionalDependencies": {}, + "_engineSupported": true, + "_npmVersion": "1.1.15", + "_nodeVersion": "v0.7.7", + "_defaultsLoaded": true, + "_from": "read@0" } diff --git a/deps/npm/node_modules/uid-number/README.md b/deps/npm/node_modules/uid-number/README.md new file mode 100644 index 000000000..81166753a --- /dev/null +++ b/deps/npm/node_modules/uid-number/README.md @@ -0,0 +1,17 @@ +Use this module to convert a username/groupname to a uid/gid number. + +Usage: + +``` +npm install uid-number +``` + +Then, in your node program: + +```javascript +var uidNumber = require("uid-number") +uidNumber("isaacs", function (er, uid, gid) { + // gid is null because we didn't ask for a group name + // uid === 24561 because that's my number. +}) +``` diff --git a/deps/npm/bin/npm-get-uid-gid.js b/deps/npm/node_modules/uid-number/get-uid-gid.js index 390e0f2fc..0b391748a 100755 --- a/deps/npm/bin/npm-get-uid-gid.js +++ b/deps/npm/node_modules/uid-number/get-uid-gid.js @@ -1,3 +1,11 @@ +if (module !== require.main) { + throw new Error("This file should not be loaded with require()") +} + +if (!process.getuid || !process.getgid) { + throw new Error("this file should not be called without uid/gid support") +} + var argv = process.argv.slice(2) , user = argv[0] || process.getuid() , group = argv[1] || process.getgid() diff --git a/deps/npm/node_modules/uid-number/package.json b/deps/npm/node_modules/uid-number/package.json new file mode 100644 index 000000000..3c0592cb6 --- /dev/null +++ b/deps/npm/node_modules/uid-number/package.json @@ -0,0 +1,34 @@ +{ + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "name": "uid-number", + "description": "Convert a username/group name to a uid/gid number", + "version": "0.0.3", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/uid-number.git" + }, + "main": "uid-number.js", + "dependencies": {}, + "devDependencies": {}, + "optionalDependencies": {}, + "engines": { + "node": "*" + }, + "_npmUser": { + "name": "isaacs", + "email": "i@izs.me" + }, + "_id": "uid-number@0.0.3", + "_engineSupported": true, + "_npmVersion": "1.1.12", + "_nodeVersion": "v0.7.7-pre", + "_defaultsLoaded": true, + "dist": { + "shasum": "be40aeab1db6ba45d2344d4ed6015109fc9d98d4" + }, + "_from": "uid-number@0.0.3" +} diff --git a/deps/npm/node_modules/uid-number/uid-number.js b/deps/npm/node_modules/uid-number/uid-number.js new file mode 100644 index 000000000..93f372bb9 --- /dev/null +++ b/deps/npm/node_modules/uid-number/uid-number.js @@ -0,0 +1,54 @@ +module.exports = uidNumber + +// This module calls into get-uid-gid.js, which sets the +// uid and gid to the supplied argument, in order to find out their +// numeric value. This can't be done in the main node process, +// because otherwise node would be running as that user from this +// point on. + +var child_process = require("child_process") + , path = require("path") + , uidSupport = process.getuid && process.setuid + , uidCache = {} + , gidCache = {} + +function uidNumber (uid, gid, cb) { + if (!uidSupport) return cb() + if (typeof cb !== "function") cb = gid, gid = null + if (typeof cb !== "function") cb = uid, uid = null + if (gid == null) gid = process.getgid() + if (uid == null) uid = process.getuid() + if (!isNaN(gid)) gid = uidCache[gid] = +gid + if (!isNaN(uid)) uid = uidCache[uid] = +uid + + if (uidCache.hasOwnProperty(uid)) uid = uidCache[uid] + if (gidCache.hasOwnProperty(gid)) gid = gidCache[gid] + + if (typeof gid === "number" && typeof uid === "number") { + return process.nextTick(cb.bind(null, null, uid, gid)) + } + + var getter = require.resolve("./get-uid-gid.js") + + child_process.execFile( process.execPath + , [getter, uid, gid] + , function (code, out, err) { + if (er) return cb(new Error("could not get uid/gid\n" + err)) + try { + out = JSON.parse(out+"") + } catch (ex) { + return cb(ex) + } + + if (out.error) { + var er = new Error(out.error) + er.errno = out.errno + return cb(er) + } + + if (isNaN(out.uid) || isNaN(out.gid)) return cb(new Error( + "Could not get uid/gid: "+JSON.stringify(out))) + + cb(null, uidCache[uid] = +out.uid, uidCache[gid] = +out.gid) + }) +} diff --git a/deps/npm/package.json b/deps/npm/package.json index e619575c9..68a494227 100644 --- a/deps/npm/package.json +++ b/deps/npm/package.json @@ -10,7 +10,7 @@ "install", "package.json" ], - "version": "1.1.12", + "version": "1.1.16", "preferGlobal": true, "config": { "publishtest": false @@ -39,7 +39,7 @@ "slide": "1", "abbrev": "1", "graceful-fs": "~1.1.1", - "minimatch": "0", + "minimatch": "~0.2", "nopt": "1", "node-uuid": "~1.3", "proto-list": "1", @@ -47,13 +47,17 @@ "request": "~2.9", "which": "1", "tar": "~0.1.12", - "fstream": "~0.1.13", + "fstream": "~0.1.17", "block-stream": "*", "inherits": "1", "mkdirp": "0.3", "read": "0", "lru-cache": "1", - "node-gyp": "~0.3.4" + "node-gyp": "~0.3.7", + "fstream-npm": "0 >=0.0.4", + "uid-number": "0", + "archy": "0", + "chownr": "0" }, "bundleDependencies": [ "slide", @@ -76,7 +80,11 @@ "fast-list", "read", "lru-cache", - "node-gyp" + "node-gyp", + "fstream-npm", + "uid-number", + "archy", + "chownr" ], "devDependencies": { "ronn": "https://github.com/isaacs/ronnjs/tarball/master" diff --git a/deps/npm/scripts/index-build.js b/deps/npm/scripts/index-build.js index b3c19a03a..551bb1d56 100755 --- a/deps/npm/scripts/index-build.js +++ b/deps/npm/scripts/index-build.js @@ -12,6 +12,7 @@ fs.readdir(api, done("api")) function done (which) { return function (er, docs) { if (er) throw er + docs.sort() if (which === "api") apidocs = docs else clidocs = docs |