npm: Upgrade to 1.2.30
authorisaacs <i@izs.me>
Wed, 12 Jun 2013 17:59:44 +0000 (10:59 -0700)
committerisaacs <i@izs.me>
Wed, 12 Jun 2013 17:59:44 +0000 (10:59 -0700)
117 files changed:
deps/npm/README.md
deps/npm/html/api/bin.html
deps/npm/html/api/bugs.html
deps/npm/html/api/commands.html
deps/npm/html/api/config.html
deps/npm/html/api/deprecate.html
deps/npm/html/api/docs.html
deps/npm/html/api/edit.html
deps/npm/html/api/explore.html
deps/npm/html/api/help-search.html
deps/npm/html/api/init.html
deps/npm/html/api/install.html
deps/npm/html/api/link.html
deps/npm/html/api/load.html
deps/npm/html/api/ls.html
deps/npm/html/api/npm.html
deps/npm/html/api/outdated.html
deps/npm/html/api/owner.html
deps/npm/html/api/pack.html
deps/npm/html/api/prefix.html
deps/npm/html/api/prune.html
deps/npm/html/api/publish.html
deps/npm/html/api/rebuild.html
deps/npm/html/api/restart.html
deps/npm/html/api/root.html
deps/npm/html/api/run-script.html
deps/npm/html/api/search.html
deps/npm/html/api/shrinkwrap.html
deps/npm/html/api/start.html
deps/npm/html/api/stop.html
deps/npm/html/api/submodule.html
deps/npm/html/api/tag.html
deps/npm/html/api/test.html
deps/npm/html/api/uninstall.html
deps/npm/html/api/unpublish.html
deps/npm/html/api/update.html
deps/npm/html/api/version.html
deps/npm/html/api/view.html
deps/npm/html/api/whoami.html
deps/npm/html/doc/README.html
deps/npm/html/doc/adduser.html
deps/npm/html/doc/bin.html
deps/npm/html/doc/bugs.html
deps/npm/html/doc/build.html
deps/npm/html/doc/bundle.html
deps/npm/html/doc/cache.html
deps/npm/html/doc/changelog.html
deps/npm/html/doc/coding-style.html
deps/npm/html/doc/completion.html
deps/npm/html/doc/config.html
deps/npm/html/doc/dedupe.html
deps/npm/html/doc/deprecate.html
deps/npm/html/doc/developers.html
deps/npm/html/doc/disputes.html
deps/npm/html/doc/docs.html
deps/npm/html/doc/edit.html
deps/npm/html/doc/explore.html
deps/npm/html/doc/faq.html
deps/npm/html/doc/folders.html
deps/npm/html/doc/global.html
deps/npm/html/doc/help-search.html
deps/npm/html/doc/help.html
deps/npm/html/doc/index.html
deps/npm/html/doc/init.html
deps/npm/html/doc/install.html
deps/npm/html/doc/json.html
deps/npm/html/doc/link.html
deps/npm/html/doc/ls.html
deps/npm/html/doc/npm.html
deps/npm/html/doc/outdated.html
deps/npm/html/doc/owner.html
deps/npm/html/doc/pack.html
deps/npm/html/doc/prefix.html
deps/npm/html/doc/prune.html
deps/npm/html/doc/publish.html
deps/npm/html/doc/rebuild.html
deps/npm/html/doc/registry.html
deps/npm/html/doc/removing-npm.html
deps/npm/html/doc/restart.html
deps/npm/html/doc/rm.html
deps/npm/html/doc/root.html
deps/npm/html/doc/run-script.html
deps/npm/html/doc/scripts.html
deps/npm/html/doc/search.html
deps/npm/html/doc/semver.html
deps/npm/html/doc/shrinkwrap.html
deps/npm/html/doc/star.html
deps/npm/html/doc/stars.html
deps/npm/html/doc/start.html
deps/npm/html/doc/stop.html
deps/npm/html/doc/submodule.html
deps/npm/html/doc/tag.html
deps/npm/html/doc/test.html
deps/npm/html/doc/uninstall.html
deps/npm/html/doc/unpublish.html
deps/npm/html/doc/update.html
deps/npm/html/doc/version.html
deps/npm/html/doc/view.html
deps/npm/html/doc/whoami.html
deps/npm/lib/utils/tar.js
deps/npm/man/man1/README.1
deps/npm/man/man1/ls.1
deps/npm/man/man1/npm.1
deps/npm/man/man3/npm.3
deps/npm/node_modules/graceful-fs/LICENSE
deps/npm/node_modules/graceful-fs/graceful-fs.js
deps/npm/node_modules/graceful-fs/package.json
deps/npm/node_modules/graceful-fs/test/ulimit.js [new file with mode: 0644]
deps/npm/node_modules/lockfile/lockfile.js
deps/npm/node_modules/lockfile/package.json
deps/npm/node_modules/npm-registry-client/node_modules/couch-login/couch-login.js
deps/npm/node_modules/npm-registry-client/node_modules/couch-login/package.json
deps/npm/node_modules/npmconf/config-defs.js
deps/npm/node_modules/npmconf/node_modules/config-chain/node_modules/proto-list/package.json
deps/npm/node_modules/npmconf/node_modules/config-chain/package.json
deps/npm/node_modules/npmconf/package.json
deps/npm/package.json

index c8b7afc..6769c91 100644 (file)
@@ -9,7 +9,7 @@ Much more info available via `npm help` once it's installed.
 
 ## IMPORTANT
 
-**You need node v0.6 or higher to run this program.**
+**You need node v0.8 or higher to run this program.**
 
 To install an old **and unsupported** version of npm that works on node 0.3
 and prior, clone the git repo and dig through the old tags and branches.
index d15d987..669433d 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">bin &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7c85ea0..0c2c1cc 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">bugs &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5ef206f..b6bcc41 100644 (file)
@@ -28,7 +28,7 @@ usage, or <code>man 3 npm-&lt;command&gt;</code> for programmatic usage.</p>
 
 <ul><li><a href="../doc/index.html">index(1)</a></li></ul>
 </div>
-<p id="footer">commands &mdash; npm@1.2.27</p>
+<p id="footer">commands &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 37480b5..476a5a4 100644 (file)
@@ -33,7 +33,7 @@ functions instead.</p>
 
 <ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
 </div>
-<p id="footer">config &mdash; npm@1.2.27</p>
+<p id="footer">config &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f87268e..e257e01 100644 (file)
@@ -32,7 +32,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 &mdash; npm@1.2.27</p>
+<p id="footer">deprecate &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a193beb..1448394 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">docs &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 92220b0..aed880a 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">edit &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5451e78..0298116 100644 (file)
@@ -24,7 +24,7 @@ sure to use <code>npm rebuild &lt;pkg&gt;</code> if you make any changes.</p>
 
 <p>The first element in the &#39;args&#39; 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 &mdash; npm@1.2.27</p>
+<p id="footer">explore &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 932e2eb..41ec2ca 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">help-search &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7f0a147..0aa0a1d 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">init &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7ec5814..9db79d2 100644 (file)
@@ -25,7 +25,7 @@ the name of a package to be installed.</p>
 <p>Finally, &#39;callback&#39; 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 &mdash; npm@1.2.27</p>
+<p id="footer">install &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 44b0514..f8f94f8 100644 (file)
@@ -39,7 +39,7 @@ npm.commands.link(&#39;redis&#39;, 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 &mdash; npm@1.2.27</p>
+<p id="footer">link &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d39793c..91e963e 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">load &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 247d57b..0942067 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">ls &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 809332d..5b2555f 100644 (file)
@@ -24,7 +24,7 @@ npm.load([configObject,] function (er, npm) {
 
 <h2 id="VERSION">VERSION</h2>
 
-<p>1.2.27</p>
+<p>1.2.30</p>
 
 <h2 id="DESCRIPTION">DESCRIPTION</h2>
 
@@ -92,7 +92,7 @@ method names.  Use the <code>npm.deref</code> method to find the real name.</p>
 
 <pre><code>var cmd = npm.deref(&quot;unp&quot;) // cmd === &quot;unpublish&quot;</code></pre>
 </div>
-<p id="footer">npm &mdash; npm@1.2.27</p>
+<p id="footer">npm &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8ce671b..f98e2ab 100644 (file)
@@ -19,7 +19,7 @@ currently outdated.</p>
 
 <p>If the &#39;packages&#39; parameter is left out, npm will check all packages.</p>
 </div>
-<p id="footer">outdated &mdash; npm@1.2.27</p>
+<p id="footer">outdated &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2f823a3..b29be65 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">owner &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index a03edee..8f6e3bf 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">pack &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ddfc839..83854bc 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically</p>
 </div>
-<p id="footer">prefix &mdash; npm@1.2.27</p>
+<p id="footer">prefix &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ae7a817..2844d29 100644 (file)
@@ -23,7 +23,7 @@
 <p>Extraneous packages are packages that are not listed on the parent
 package&#39;s dependencies list.</p>
 </div>
-<p id="footer">prune &mdash; npm@1.2.27</p>
+<p id="footer">prune &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 588ca93..5686874 100644 (file)
@@ -32,7 +32,7 @@ the registry.  Overwrites when the &quot;force&quot; environment variable is set
 
 <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 &mdash; npm@1.2.27</p>
+<p id="footer">publish &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0b2b9b2..a3f6338 100644 (file)
@@ -22,7 +22,7 @@ the new binary. If no &#39;packages&#39; parameter is specify, every package wil
 
 <p>See <code>npm help build</code></p>
 </div>
-<p id="footer">rebuild &mdash; npm@1.2.27</p>
+<p id="footer">rebuild &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 72a83c6..c6d4ecc 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">restart &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ac56e21..2c7a8f7 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically.</p>
 </div>
-<p id="footer">root &mdash; npm@1.2.27</p>
+<p id="footer">root &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2615eb3..8354b95 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">run-script &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7dab821..8a3fa3b 100644 (file)
@@ -32,7 +32,7 @@ excluded term (the &quot;searchexclude&quot; config). The search is case insensi
 and doesn&#39;t try to read your mind (it doesn&#39;t do any verb tense matching or the
 like).</p>
 </div>
-<p id="footer">search &mdash; npm@1.2.27</p>
+<p id="footer">search &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3ba42a9..189b184 100644 (file)
@@ -26,7 +26,7 @@ but the shrinkwrap file will still be written.</p>
 <p>Finally, &#39;callback&#39; is a function that will be called when the shrinkwrap has
 been saved.</p>
 </div>
-<p id="footer">shrinkwrap &mdash; npm@1.2.27</p>
+<p id="footer">shrinkwrap &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ea38a50..bcdf0b8 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">start &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6f2e43f..edf34f0 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">stop &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e75698c..819b374 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">submodule &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 17984f5..cec8083 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">tag &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c0e44d4..c4685a4 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">test &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 11bc9f1..5f582a3 100644 (file)
@@ -22,7 +22,7 @@ the name of a package to be uninstalled.</p>
 <p>Finally, &#39;callback&#39; 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 &mdash; npm@1.2.27</p>
+<p id="footer">uninstall &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 17c6f6a..8d9444f 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">unpublish &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 26516f5..51ab08e 100644 (file)
@@ -18,7 +18,7 @@
 
 <p>The &#39;packages&#39; argument is an array of packages to update. The &#39;callback&#39; parameter will be called when done or when an error occurs.</p>
 </div>
-<p id="footer">update &mdash; npm@1.2.27</p>
+<p id="footer">update &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 42c2cbb..602b0cb 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">version &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5f7e9a6..c186771 100644 (file)
@@ -99,7 +99,7 @@ the field name.</p>
 
 <p>corresponding to the list of fields selected.</p>
 </div>
-<p id="footer">view &mdash; npm@1.2.27</p>
+<p id="footer">view &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index bc198ff..8191846 100644 (file)
@@ -21,7 +21,7 @@
 
 <p>This function is not useful programmatically</p>
 </div>
-<p id="footer">whoami &mdash; npm@1.2.27</p>
+<p id="footer">whoami &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index d807aec..62bf0a0 100644 (file)
@@ -16,7 +16,7 @@
 
 <h2 id="IMPORTANT">IMPORTANT</h2>
 
-<p><strong>You need node v0.6 or higher to run this program.</strong></p>
+<p><strong>You need node v0.8 or higher to run this program.</strong></p>
 
 <p>To install an old <strong>and unsupported</strong> version of npm that works on node 0.3
 and prior, clone the git repo and dig through the old tags and branches.</p>
@@ -240,7 +240,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> &mdash; npm@1.2.27</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 282a174..97cd10a 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">adduser &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c6e5e81..7953827 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">bin &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2c45558..174b949 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">bugs &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 458e4a7..d556823 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">build &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5a61faa..4b12bbc 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">bundle &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2c71444..34e02da 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">cache &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e90178e..89e17af 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">changelog &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 3231378..8ddb8b7 100644 (file)
@@ -182,7 +182,7 @@ set to anything.&quot;</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 &mdash; npm@1.2.27</p>
+<p id="footer">coding-style &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8fc74bf..06e7d51 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">completion &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 629f7d9..2e8546f 100644 (file)
@@ -778,7 +778,7 @@ then answer &quot;no&quot; 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 &mdash; npm@1.2.27</p>
+<p id="footer">config &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 6d64777..c82f069 100644 (file)
@@ -57,7 +57,7 @@ registry.</p>
 
 <ul><li><a href="../doc/ls.html">ls(1)</a></li><li><a href="../doc/update.html">update(1)</a></li><li><a href="../doc/install.html">install(1)</a></li></ul>
 </div>
-<p id="footer">dedupe &mdash; npm@1.2.27</p>
+<p id="footer">dedupe &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7a8b013..67803ee 100644 (file)
@@ -31,7 +31,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 &mdash; npm@1.2.27</p>
+<p id="footer">deprecate &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4ee6f6b..1e6de37 100644 (file)
@@ -174,7 +174,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 &mdash; npm@1.2.27</p>
+<p id="footer">developers &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 54946e7..9077df6 100644 (file)
@@ -91,7 +91,7 @@ things into it.</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 &mdash; npm@1.2.27</p>
+<p id="footer">disputes &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f012dec..c6338db 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">docs &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f03d423..1d897a6 100644 (file)
@@ -37,7 +37,7 @@ or <code>&quot;notepad&quot;</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 &mdash; npm@1.2.27</p>
+<p id="footer">edit &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fbd5939..0ce0eab 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">explore &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2381c95..d720d90 100644 (file)
@@ -302,7 +302,7 @@ There is not sufficient need to impose namespace rules on everyone.</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 &mdash; npm@1.2.27</p>
+<p id="footer">faq &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c1f4448..3ff8e07 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">folders &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 068f81b..5d40d64 100644 (file)
@@ -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">global &mdash; npm@1.2.27</p>
+<p id="footer">global &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 4e08b12..91e090b 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">help-search &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 8fde387..2612a1a 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">help &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5b39a74..55ffe5a 100644 (file)
 
 <p> Display npm username</p>
 </div>
-<p id="footer">index &mdash; npm@1.2.27</p>
+<p id="footer">index &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 058ba0d..5d327ce 100644 (file)
@@ -29,7 +29,7 @@ without a really good reason to do so.</p>
 
 <ul><li><a href="https://github.com/isaacs/init-package-json">https://github.com/isaacs/init-package-json</a></li><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 &mdash; npm@1.2.27</p>
+<p id="footer">init &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ee43128..f8c523e 100644 (file)
@@ -142,7 +142,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 &mdash; npm@1.2.27</p>
+<p id="footer">install &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index ee3663f..0f498d4 100644 (file)
@@ -546,7 +546,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 &mdash; npm@1.2.27</p>
+<p id="footer">json &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index bfcc1fb..0457b8e 100644 (file)
@@ -61,7 +61,7 @@ installation target into your project&#39;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 &mdash; npm@1.2.27</p>
+<p id="footer">link &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 35a5275..cdca8ba 100644 (file)
@@ -25,7 +25,7 @@ limit the results to only the paths to the packages named.  Note that
 nested packages will <em>also</em> show the paths to the specified packages.
 For example, running <code>npm ls promzard</code> in npm&#39;s source tree will show:</p>
 
-<pre><code>npm@1.2.27 /path/to/npm
+<pre><code>npm@1.2.30 /path/to/npm
 â””─┬ init-package-json@0.0.4
   â””── promzard@0.1.5</code></pre>
 
@@ -64,7 +64,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">ls &mdash; npm@1.2.27</p>
+<p id="footer">ls &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 48c30ba..44e6aa6 100644 (file)
@@ -14,7 +14,7 @@
 
 <h2 id="VERSION">VERSION</h2>
 
-<p>1.2.27</p>
+<p>1.2.30</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 &mdash; npm@1.2.27</p>
+<p id="footer">npm &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 26c1b93..2c09656 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">outdated &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 1a90135..1f24398 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">owner &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 469f092..666292a 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">pack &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fa5a370..a8058cb 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">prefix &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 0dbbe48..7fdd576 100644 (file)
@@ -25,7 +25,7 @@ package&#39;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 &mdash; npm@1.2.27</p>
+<p id="footer">prune &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index fc8b8c4..a52f648 100644 (file)
@@ -29,7 +29,7 @@ the registry.  Overwrites when the &quot;--force&quot; 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 &mdash; npm@1.2.27</p>
+<p id="footer">publish &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e3c44c7..cdd2cc0 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">rebuild &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c05abac..b2af939 100644 (file)
@@ -95,7 +95,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 &mdash; npm@1.2.27</p>
+<p id="footer">registry &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 2410702..74698f2 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">removing-npm &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 7b0b87c..03dd07d 100644 (file)
@@ -24,7 +24,7 @@ the &quot;start&quot; 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 &mdash; npm@1.2.27</p>
+<p id="footer">restart &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index efa3e5b..92d679d 100644 (file)
@@ -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">rm &mdash; npm@1.2.27</p>
+<p id="footer">rm &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index f96d96d..e48db33 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">root &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 37bd1bd..946c922 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">run-script &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5873e3b..e16c34d 100644 (file)
@@ -218,7 +218,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 &mdash; npm@1.2.27</p>
+<p id="footer">scripts &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 432aaa6..39eab14 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">search &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 246f3cd..b906a6d 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">semver &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9ef5434..40abed5 100644 (file)
@@ -183,7 +183,7 @@ contents rather than 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 &mdash; npm@1.2.27</p>
+<p id="footer">shrinkwrap &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9b105f5..99b87fd 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">star &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index e6881ca..6c183aa 100644 (file)
@@ -25,7 +25,7 @@ you will most certainly enjoy this command.</p>
 
 <ul><li><a href="../doc/star.html">star(1)</a></li><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">stars &mdash; npm@1.2.27</p>
+<p id="footer">stars &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 60b9fc6..2616b25 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">start &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9dc3fb0..a06df19 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">stop &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 77364fa..98063d1 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">submodule &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 60b45b1..d276fe4 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">tag &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 01bd51d..d589ffa 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">test &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9fe4dd1..eb1717c 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">uninstall &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9db5048..17f4d08 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">unpublish &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 9bd2e71..451bfe8 100644 (file)
@@ -26,7 +26,7 @@ If no package name is specified, all packages in the specified location (global
 
 <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 &mdash; npm@1.2.27</p>
+<p id="footer">update &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 366bddc..a00291e 100644 (file)
@@ -49,7 +49,7 @@ Enter passphrase:</code></pre>
 
 <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 &mdash; npm@1.2.27</p>
+<p id="footer">version &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 91b9f4b..da6fa00 100644 (file)
@@ -90,7 +90,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 &mdash; npm@1.2.27</p>
+<p id="footer">view &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index 5e6d732..ae2d87b 100644 (file)
@@ -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 &mdash; npm@1.2.27</p>
+<p id="footer">whoami &mdash; npm@1.2.30</p>
 <script>
 ;(function () {
 var wrapper = document.getElementById("wrapper")
index c96c4c4..378415e 100644 (file)
@@ -9,8 +9,6 @@ var npm = require("../npm.js")
   , rm = require("rimraf")
   , readJson = require("read-package-json")
   , cache = require("../cache.js")
-  , lock = cache.lock
-  , unlock = cache.unlock
   , myUid = process.getuid && process.getuid()
   , myGid = process.getgid && process.getgid()
   , tar = require("tar")
@@ -19,6 +17,14 @@ var npm = require("../npm.js")
   , Packer = require("fstream-npm")
   , lifecycle = require("./lifecycle.js")
 
+function lock(path, cb) {
+  return cache.lock('tar://' + path, cb)
+}
+
+function unlock(path, cb) {
+  return cache.unlock('tar://' + path, cb)
+}
+
 if (process.env.SUDO_UID && myUid === 0) {
   if (!isNaN(process.env.SUDO_UID)) myUid = +process.env.SUDO_UID
   if (!isNaN(process.env.SUDO_GID)) myGid = +process.env.SUDO_GID
index feb5f8d..f377b72 100644 (file)
@@ -13,7 +13,7 @@ This is just enough info to get you up and running\.
 Much more info available via \fBnpm help\fR once it\'s installed\.
 .
 .SH "IMPORTANT"
-\fBYou need node v0\.6 or higher to run this program\.\fR
+\fBYou need node v0\.8 or higher to run this program\.\fR
 .
 .P
 To install an old \fBand unsupported\fR version of npm that works on node 0\.3
index a415043..54eedd4 100644 (file)
@@ -29,7 +29,7 @@ For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
 .IP "" 4
 .
 .nf
-npm@1.2.27 /path/to/npm
+npm@1.2.30 /path/to/npm
 â””─┬ init\-package\-json@0\.0\.4
   â””── promzard@0\.1\.5
 .
index 2a22a35..6ba3a39 100644 (file)
@@ -14,7 +14,7 @@ npm <command> [args]
 .fi
 .
 .SH "VERSION"
-1.2.27
+1.2.30
 .
 .SH "DESCRIPTION"
 npm is the package manager for the Node JavaScript platform\.  It puts
index d14d7b4..27bfe8a 100644 (file)
@@ -21,7 +21,7 @@ npm\.load([configObject,] function (er, npm) {
 .fi
 .
 .SH "VERSION"
-1.2.27
+1.2.30
 .
 .SH "DESCRIPTION"
 This is the API documentation for npm\.
index 05a4010..0c44ae7 100644 (file)
@@ -1,23 +1,27 @@
-Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
+Copyright (c) Isaac Z. Schlueter ("Author")
 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 BSD License
 
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
 
-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.
+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 AUTHOR 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 AUTHOR 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.
index fe9c3f4..cc2f19e 100644 (file)
@@ -1,30 +1,22 @@
 // this keeps a queue of opened file descriptors, and will make
 // fs operations wait until some have closed before trying to open more.
 
-var fs_ = require("fs")
+var fs = exports = module.exports = {}
+fs._originalFs = require("fs")
 
-var fs = module.exports = {}
-
-Object.getOwnPropertyNames(fs_).forEach(function(prop) {
-  var desc = Object.getOwnPropertyDescriptor(fs_, prop)
+Object.getOwnPropertyNames(fs._originalFs).forEach(function(prop) {
+  var desc = Object.getOwnPropertyDescriptor(fs._originalFs, prop)
   Object.defineProperty(fs, prop, desc)
 })
 
 var queue = []
   , constants = require("constants")
 
-exports = module.exports = fs
 fs._curOpen = 0
 
 fs.MIN_MAX_OPEN = 64
 fs.MAX_OPEN = 1024
 
-var originalOpen = fs.open
-  , originalOpenSync = fs.openSync
-  , originalClose = fs.close
-  , originalCloseSync = fs.closeSync
-
-
 // prevent EMFILE errors
 function OpenReq (path, flags, mode, cb) {
   this.path = path
@@ -61,7 +53,7 @@ function gracefulOpen (path, flags, mode, cb) {
 function open (path, flags, mode, cb) {
   cb = cb || noop
   fs._curOpen ++
-  originalOpen.call(fs, path, flags, mode, function (er, fd) {
+  fs._originalFs.open.call(fs, path, flags, mode, function (er, fd) {
     if (er) onclose()
     cb(er, fd)
   })
@@ -69,7 +61,7 @@ function open (path, flags, mode, cb) {
 
 fs.openSync = function (path, flags, mode) {
   var ret
-  ret = originalOpenSync.call(fs, path, flags, mode)
+  ret = fs._originalFs.openSync.call(fs, path, flags, mode)
   fs._curOpen ++
   return ret
 }
@@ -83,21 +75,72 @@ function flush () {
   while (fs._curOpen < fs.MAX_OPEN) {
     var req = queue.shift()
     if (!req) return
-    open(req.path, req.flags || "r", req.mode || 0777, req.cb)
+    switch (req.constructor.name) {
+      case 'OpenReq':
+        open(req.path, req.flags || "r", req.mode || 0777, req.cb)
+        break
+      case 'ReaddirReq':
+        readdir(req.path, req.cb)
+        break
+      default:
+        throw new Error('Unknown req type: ' + req.constructor.name)
+    }
   }
 }
 
 fs.close = function (fd, cb) {
   cb = cb || noop
-  originalClose.call(fs, fd, function (er) {
+  fs._originalFs.close.call(fs, fd, function (er) {
     onclose()
     cb(er)
   })
 }
 
 fs.closeSync = function (fd) {
-  onclose()
-  return originalCloseSync.call(fs, fd)
+  try {
+    return fs._originalFs.closeSync.call(fs, fd)
+  } finally {
+    onclose()
+  }
+}
+
+
+// readdir takes a fd as well.
+// however, the sync version closes it right away, so
+// there's no need to wrap.
+// It would be nice to catch when it throws an EMFILE,
+// but that's relatively rare anyway.
+
+fs.readdir = gracefulReaddir
+
+function gracefulReaddir (path, cb) {
+  if (fs._curOpen >= fs.MAX_OPEN) {
+    queue.push(new ReaddirReq(path, cb))
+    setTimeout(flush)
+    return
+  }
+
+  readdir(path, function (er, files) {
+    if (er && er.code === "EMFILE" && fs._curOpen > fs.MIN_MAX_OPEN) {
+      fs.MAX_OPEN = fs._curOpen - 1
+      return fs.readdir(path, cb)
+    }
+    cb(er, files)
+  })
+}
+
+function readdir (path, cb) {
+  cb = cb || noop
+  fs._curOpen ++
+  fs._originalFs.readdir.call(fs, path, function (er, files) {
+    onclose()
+    cb(er, files)
+  })
+}
+
+function ReaddirReq (path, cb) {
+  this.path = path
+  this.cb = cb
 }
 
 
index 03f91c9..4884b29 100644 (file)
@@ -6,7 +6,7 @@
   },
   "name": "graceful-fs",
   "description": "A drop-in replacement for fs, making various improvements.",
-  "version": "1.2.1",
+  "version": "1.2.2",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/node-graceful-fs.git"
@@ -43,6 +43,6 @@
   "bugs": {
     "url": "https://github.com/isaacs/node-graceful-fs/issues"
   },
-  "_id": "graceful-fs@1.2.1",
-  "_from": "graceful-fs@~1.2.0"
+  "_id": "graceful-fs@1.2.2",
+  "_from": "graceful-fs@latest"
 }
diff --git a/deps/npm/node_modules/graceful-fs/test/ulimit.js b/deps/npm/node_modules/graceful-fs/test/ulimit.js
new file mode 100644 (file)
index 0000000..8d0882d
--- /dev/null
@@ -0,0 +1,158 @@
+var test = require('tap').test
+
+// simulated ulimit
+// this is like graceful-fs, but in reverse
+var fs_ = require('fs')
+var fs = require('../graceful-fs.js')
+var files = fs.readdirSync(__dirname)
+
+// Ok, no more actual file reading!
+
+var fds = 0
+var nextFd = 60
+var limit = 8
+fs_.open = function (path, flags, mode, cb) {
+  process.nextTick(function() {
+    ++fds
+    if (fds >= limit) {
+      --fds
+      var er = new Error('EMFILE Curses!')
+      er.code = 'EMFILE'
+      er.path = path
+      return cb(er)
+    } else {
+      cb(null, nextFd++)
+    }
+  })
+}
+
+fs_.openSync = function (path, flags, mode) {
+  if (fds >= limit) {
+    var er = new Error('EMFILE Curses!')
+    er.code = 'EMFILE'
+    er.path = path
+    throw er
+  } else {
+    ++fds
+    return nextFd++
+  }
+}
+
+fs_.close = function (fd, cb) {
+  process.nextTick(function () {
+    --fds
+    cb()
+  })
+}
+
+fs_.closeSync = function (fd) {
+  --fds
+}
+
+fs_.readdir = function (path, cb) {
+  process.nextTick(function() {
+    if (fds >= limit) {
+      var er = new Error('EMFILE Curses!')
+      er.code = 'EMFILE'
+      er.path = path
+      return cb(er)
+    } else {
+      ++fds
+      process.nextTick(function () {
+        --fds
+        cb(null, [__filename, "some-other-file.js"])
+      })
+    }
+  })
+}
+
+fs_.readdirSync = function (path) {
+  if (fds >= limit) {
+    var er = new Error('EMFILE Curses!')
+    er.code = 'EMFILE'
+    er.path = path
+    throw er
+  } else {
+    return [__filename, "some-other-file.js"]
+  }
+}
+
+
+test('open emfile autoreduce', function (t) {
+  fs.MIN_MAX_OPEN = 4
+  t.equal(fs.MAX_OPEN, 1024)
+
+  var max = 12
+  for (var i = 0; i < max; i++) {
+    fs.open(__filename, 'r', next(i))
+  }
+
+  var phase = 0
+
+  var expect =
+      [ [ 0, 60, null, 1024, 4, 12, 1 ],
+        [ 1, 61, null, 1024, 4, 12, 2 ],
+        [ 2, 62, null, 1024, 4, 12, 3 ],
+        [ 3, 63, null, 1024, 4, 12, 4 ],
+        [ 4, 64, null, 1024, 4, 12, 5 ],
+        [ 5, 65, null, 1024, 4, 12, 6 ],
+        [ 6, 66, null, 1024, 4, 12, 7 ],
+        [ 7, 67, null, 6, 4, 5, 1 ],
+        [ 8, 68, null, 6, 4, 5, 2 ],
+        [ 9, 69, null, 6, 4, 5, 3 ],
+        [ 10, 70, null, 6, 4, 5, 4 ],
+        [ 11, 71, null, 6, 4, 5, 5 ] ]
+
+  var actual = []
+
+  function next (i) { return function (er, fd) {
+    if (er)
+      throw er
+    actual.push([i, fd, er, fs.MAX_OPEN, fs.MIN_MAX_OPEN, fs._curOpen, fds])
+
+    if (i === max - 1) {
+      t.same(actual, expect)
+      t.ok(fs.MAX_OPEN < limit)
+      t.end()
+    }
+
+    fs.close(fd)
+  } }
+})
+
+test('readdir emfile autoreduce', function (t) {
+  fs.MAX_OPEN = 1024
+  var max = 12
+  for (var i = 0; i < max; i ++) {
+    fs.readdir(__dirname, next(i))
+  }
+
+  var expect =
+      [ [0,[__filename,"some-other-file.js"],null,7,4,7,7],
+        [1,[__filename,"some-other-file.js"],null,7,4,7,6],
+        [2,[__filename,"some-other-file.js"],null,7,4,7,5],
+        [3,[__filename,"some-other-file.js"],null,7,4,7,4],
+        [4,[__filename,"some-other-file.js"],null,7,4,7,3],
+        [5,[__filename,"some-other-file.js"],null,7,4,6,2],
+        [6,[__filename,"some-other-file.js"],null,7,4,5,1],
+        [7,[__filename,"some-other-file.js"],null,7,4,4,0],
+        [8,[__filename,"some-other-file.js"],null,7,4,3,3],
+        [9,[__filename,"some-other-file.js"],null,7,4,2,2],
+        [10,[__filename,"some-other-file.js"],null,7,4,1,1],
+        [11,[__filename,"some-other-file.js"],null,7,4,0,0] ]
+
+  var actual = []
+
+  function next (i) { return function (er, files) {
+    if (er)
+      throw er
+    var line = [i, files, er, fs.MAX_OPEN, fs.MIN_MAX_OPEN, fs._curOpen, fds ]
+    actual.push(line)
+
+    if (i === max - 1) {
+      t.ok(fs.MAX_OPEN < limit)
+      t.same(actual, expect)
+      t.end()
+    }
+  } }
+})
index 6752a03..87bcaf6 100644 (file)
@@ -1,11 +1,23 @@
 var fs = require('fs')
 
 var wx = 'wx'
-if (process.version.match(/^v0.[456]/)) {
+if (process.version.match(/^v0\.[0-6]/)) {
   var c = require('constants')
   wx = c.O_TRUNC | c.O_CREAT | c.O_WRONLY | c.O_EXCL
 }
 
+var debug
+var util = require('util')
+if (util.debuglog)
+  debug = util.debuglog('LOCKFILE')
+else if (/\blockfile\b/i.test(process.env.NODE_DEBUG))
+  debug = function() {
+    var msg = util.format.apply(util, arguments)
+    console.error('LOCKFILE %d %s', process.pid, msg)
+  }
+else
+  debug = function() {}
+
 var locks = {}
 
 function hasOwnProperty (obj, prop) {
@@ -13,25 +25,31 @@ function hasOwnProperty (obj, prop) {
 }
 
 process.on('exit', function () {
+  debug('exit listener')
   // cleanup
   Object.keys(locks).forEach(exports.unlockSync)
 })
 
 // XXX https://github.com/joyent/node/issues/3555
 // Remove when node 0.8 is deprecated.
-process.on('uncaughtException', function H (er) {
-  var l = process.listeners('uncaughtException').filter(function (h) {
-    return h !== H
+if (/^v0\.[0-8]/.test(process.version)) {
+  debug('uncaughtException, version = %s', process.version)
+  process.on('uncaughtException', function H (er) {
+    debug('uncaughtException')
+    var l = process.listeners('uncaughtException').filter(function (h) {
+      return h !== H
+    })
+    if (!l.length) {
+      // cleanup
+      try { Object.keys(locks).forEach(exports.unlockSync) } catch (e) {}
+      process.removeListener('uncaughtException', H)
+      throw er
+    }
   })
-  if (!l.length) {
-    // cleanup
-    try { Object.keys(locks).forEach(exports.unlockSync) } catch (e) {}
-    process.removeListener('uncaughtException', H)
-    throw er
-  }
-})
+}
 
 exports.unlock = function (path, cb) {
+  debug('unlock', path)
   // best-effort.  unlocking an already-unlocked lock is a noop
   if (hasOwnProperty(locks, path))
     fs.close(locks[path], unlink)
@@ -39,12 +57,14 @@ exports.unlock = function (path, cb) {
     unlink()
 
   function unlink () {
+    debug('unlink', path)
     delete locks[path]
     fs.unlink(path, function (unlinkEr) { cb() })
   }
 }
 
 exports.unlockSync = function (path) {
+  debug('unlockSync', path)
   // best-effort.  unlocking an already-unlocked lock is a noop
   try { fs.closeSync(locks[path]) } catch (er) {}
   try { fs.unlinkSync(path) } catch (er) {}
@@ -56,6 +76,7 @@ exports.unlockSync = function (path) {
 // if the error is something other than ENOENT, then it's not.
 exports.check = function (path, opts, cb) {
   if (typeof opts === 'function') cb = opts, opts = {}
+  debug('check', path, opts)
   fs.open(path, 'r', function (er, fd) {
     if (er) {
       if (er.code !== 'ENOENT') return cb(er)
@@ -83,6 +104,7 @@ exports.check = function (path, opts, cb) {
 
 exports.checkSync = function (path, opts) {
   opts = opts || {}
+  debug('checkSync', path, opts)
   if (opts.wait) {
     throw new Error('opts.wait not supported sync for obvious reasons')
   }
@@ -113,14 +135,18 @@ exports.checkSync = function (path, opts) {
 
 
 
+var req = 0
 exports.lock = function (path, opts, cb) {
   if (typeof opts === 'function') cb = opts, opts = {}
+  opts.req = opts.req || req++
+  debug('lock', path, opts)
 
   if (typeof opts.retries === 'number' && opts.retries > 0) {
     cb = (function (orig) { return function (er, fd) {
       if (!er) return orig(er, fd)
       var newRT = opts.retries - 1
       opts_ = Object.create(opts, { retries: { value: newRT }})
+      debug('lock retry', path, newRT)
       if (opts.retryWait) setTimeout(function() {
         exports.lock(path, opts_, orig)
       }, opts.retryWait)
@@ -132,6 +158,7 @@ exports.lock = function (path, opts, cb) {
   // if this succeeds, then we're in business.
   fs.open(path, wx, function (er, fd) {
     if (!er) {
+      debug('locked', path, fd)
       locks[path] = fd
       return cb(null, fd)
     }
@@ -146,6 +173,7 @@ exports.lock = function (path, opts, cb) {
         if (statEr.code === 'ENOENT') {
           // expired already!
           var opts_ = Object.create(opts, { stale: { value: false }})
+          debug('lock stale enoent retry', path, opts_)
           exports.lock(path, opts_, cb)
           return
         }
@@ -154,9 +182,11 @@ exports.lock = function (path, opts, cb) {
 
       var age = Date.now() - st.ctime.getTime()
       if (age > opts.stale) {
+        debug('lock stale', path, opts_)
         exports.unlock(path, function (er) {
           if (er) return cb(er)
           var opts_ = Object.create(opts, { stale: { value: false }})
+          debug('lock stale retry', path, opts_)
           exports.lock(path, opts_, cb)
         })
       } else notStale(er, path, opts, cb)
@@ -166,6 +196,8 @@ exports.lock = function (path, opts, cb) {
 }
 
 function notStale (er, path, opts, cb) {
+  debug('notStale', path, opts)
+
   // if we can't wait, then just call it a failure
   if (typeof opts.wait !== 'number' || opts.wait <= 0)
     return cb(er)
@@ -176,17 +208,20 @@ function notStale (er, path, opts, cb) {
   var end = start + opts.wait
 
   function retry () {
+    debug('notStale retry', path, opts)
     var now = Date.now()
     var newWait = end - now
     var newOpts = Object.create(opts, { wait: { value: newWait }})
     exports.lock(path, newOpts, cb)
   }
 
-  var timer = setTimeout(retry, 10)
+  var timer = setTimeout(retry, 100)
 }
 
 exports.lockSync = function (path, opts) {
   opts = opts || {}
+  opts.req = opts.req || req++
+  debug('lockSync', path, opts)
   if (opts.wait || opts.retryWait) {
     throw new Error('opts.wait not supported sync for obvious reasons')
   }
@@ -194,6 +229,7 @@ exports.lockSync = function (path, opts) {
   try {
     var fd = fs.openSync(path, wx)
     locks[path] = fd
+    debug('locked sync!', path, fd)
     return fd
   } catch (er) {
     if (er.code !== 'EEXIST') return retryThrow(path, opts, er)
@@ -212,12 +248,14 @@ exports.lockSync = function (path, opts) {
       }
       var age = Date.now() - ct
       if (age > opts.stale) {
+        debug('lockSync stale', path, opts, age)
         exports.unlockSync(path)
         return exports.lockSync(path, opts)
       }
     }
 
     // failed to lock!
+    debug('failed to lock', path, opts, er)
     return retryThrow(path, opts, er)
   }
 }
@@ -225,6 +263,7 @@ exports.lockSync = function (path, opts) {
 function retryThrow (path, opts, er) {
   if (typeof opts.retries === 'number' && opts.retries > 0) {
     var newRT = opts.retries - 1
+    debug('retryThrow', path, opts, newRT)
     var opts_ = Object.create(opts, { retries: { value: newRT }})
     return exports.lockSync(path, opts_)
   }
index 50cb72e..f8ee2d6 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "lockfile",
-  "version": "0.3.2",
+  "version": "0.3.4",
   "main": "lockfile.js",
   "directories": {
     "test": "test"
   "bugs": {
     "url": "https://github.com/isaacs/lockfile/issues"
   },
-  "_id": "lockfile@0.3.2",
+  "_id": "lockfile@0.3.4",
   "dist": {
-    "shasum": "542261743479f9f907be30441f5d6b95e8b95722"
+    "shasum": "932b63546e4915f81b71924b36187740358eda03"
   },
-  "_from": "lockfile@0.3.2",
-  "_resolved": "https://registry.npmjs.org/lockfile/-/lockfile-0.3.2.tgz"
+  "_from": "lockfile@0.3.4",
+  "_resolved": "https://registry.npmjs.org/lockfile/-/lockfile-0.3.4.tgz"
 }
index 828a0e2..474f083 100644 (file)
@@ -151,8 +151,8 @@ function makeReq (meth, body, f) { return function madeReq (p, d, cb) {
   if (this.ca)
     req.ca = this.ca
 
-  if (this.strictSSL && this.strictSSL !== null)
-    req.strictSSL = this.strictSSL
+  if (typeof this.strictSSL === 'boolean')
+    req.strictSSL = req.rejectUnauthorized = this.strictSSL
 
   request(req, function (er, res, data) {
     // update cookie.
index fd28d57..922ba0d 100644 (file)
@@ -6,7 +6,7 @@
   },
   "name": "couch-login",
   "description": "A module for doing logged-in requests to a couchdb server",
-  "version": "0.1.16",
+  "version": "0.1.17",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/couch-login.git"
@@ -26,6 +26,6 @@
   "bugs": {
     "url": "https://github.com/isaacs/couch-login/issues"
   },
-  "_id": "couch-login@0.1.16",
-  "_from": "couch-login@~0.1.15"
+  "_id": "couch-login@0.1.17",
+  "_from": "couch-login@"
 }
index 61738f4..5410400 100644 (file)
@@ -116,7 +116,7 @@ Object.defineProperty(exports, "defaults", {get: function () {
     , "bin-links" : true
     , browser : null
 
-    , ca : // the npm CA certificate.
+    , ca: // the npm CA certificate.
       [ "-----BEGIN CERTIFICATE-----\n"+
         "MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC\n"+
         "VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x\n"+
@@ -173,7 +173,36 @@ Object.defineProperty(exports, "defaults", {get: function () {
         "01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7\n"+
         "9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n"+
         "TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n"+
-        "-----END CERTIFICATE-----\n" ]
+        "-----END CERTIFICATE-----\n",
+
+        // GlobalSign Organization Validation CA - G2
+        "-----BEGIN CERTIFICATE-----\n"+
+        "MIIEYDCCA0igAwIBAgILBAAAAAABL07hRQwwDQYJKoZIhvcNAQEFBQAwVzELMAkG\n"+
+        "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n"+
+        "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xMTA0MTMxMDAw\n"+
+        "MDBaFw0yMjA0MTMxMDAwMDBaMF0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n"+
+        "YWxTaWduIG52LXNhMTMwMQYDVQQDEypHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBW\n"+
+        "YWxpZGF0aW9uIENBIC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\n"+
+        "AQDdNR3yIFQmGtDvpW+Bdllw3Of01AMkHyQOnSKf1Ccyeit87ovjYWI4F6+0S3qf\n"+
+        "ZyEcLZVUunm6tsTyDSF0F2d04rFkCJlgePtnwkv3J41vNnbPMYzl8QbX3FcOW6zu\n"+
+        "zi2rqqlwLwKGyLHQCAeV6irs0Z7kNlw7pja1Q4ur944+ABv/hVlrYgGNguhKujiz\n"+
+        "4MP0bRmn6gXdhGfCZsckAnNate6kGdn8AM62pI3ffr1fsjqdhDFPyGMM5NgNUqN+\n"+
+        "ARvUZ6UYKOsBp4I82Y4d5UcNuotZFKMfH0vq4idGhs6dOcRmQafiFSNrVkfB7cVT\n"+
+        "5NSAH2v6gEaYsgmmD5W+ZoiTAgMBAAGjggElMIIBITAOBgNVHQ8BAf8EBAMCAQYw\n"+
+        "EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUXUayjcRLdBy77fVztjq3OI91\n"+
+        "nn4wRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3\n"+
+        "Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCowKKAmoCSGImh0\n"+
+        "dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYBBQUHAQEEMTAv\n"+
+        "MC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290cjEw\n"+
+        "HwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZIhvcNAQEFBQAD\n"+
+        "ggEBABvgiADHBREc/6stSEJSzSBo53xBjcEnxSxZZ6CaNduzUKcbYumlO/q2IQen\n"+
+        "fPMOK25+Lk2TnLryhj5jiBDYW2FQEtuHrhm70t8ylgCoXtwtI7yw07VKoI5lkS/Z\n"+
+        "9oL2dLLffCbvGSuXL+Ch7rkXIkg/pfcNYNUNUUflWP63n41edTzGQfDPgVRJEcYX\n"+
+        "pOBWYdw9P91nbHZF2krqrhqkYE/Ho9aqp9nNgSvBZnWygI/1h01fwlr1kMbawb30\n"+
+        "hag8IyrhFHvBN91i0ZJsumB9iOQct+R2UTjEqUdOqCsukNK1OFHrwZyKarXMsh3o\n"+
+        "wFZUTKiL8IkyhtyTMr5NGvo1dbU=\n"+
+        "-----END CERTIFICATE-----\n"
+      ]
 
 
     , cache : cache
index a304fe6..9b9d3d7 100644 (file)
@@ -28,9 +28,5 @@
     "url": "https://github.com/isaacs/proto-list/issues"
   },
   "_id": "proto-list@1.2.2",
-  "dist": {
-    "shasum": "48b88798261ec2c4a785720cdfec6200d57d3326"
-  },
-  "_from": "proto-list@~1.2.1",
-  "_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.2.tgz"
+  "_from": "proto-list@~1.2.1"
 }
index 38818ab..d0d24ea 100644 (file)
@@ -28,9 +28,5 @@
     "url": "https://github.com/dominictarr/config-chain/issues"
   },
   "_id": "config-chain@1.1.7",
-  "dist": {
-    "shasum": "e3c3e95a869b1aac2b565b18bd6274af1856d44c"
-  },
-  "_from": "config-chain@~1.1.1",
-  "_resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.7.tgz"
+  "_from": "config-chain@~1.1.1"
 }
index e97b550..5634c8f 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "npmconf",
-  "version": "0.0.25",
+  "version": "0.1.0",
   "description": "The config thing npm uses",
   "main": "npmconf.js",
   "directories": {
   "bugs": {
     "url": "https://github.com/isaacs/npmconf/issues"
   },
-  "_id": "npmconf@0.0.25",
-  "dist": {
-    "shasum": "8e958a7da1dd087c70a427b27d372c565b782662"
-  },
-  "_from": "npmconf@0.0.25",
-  "_resolved": "https://registry.npmjs.org/npmconf/-/npmconf-0.0.25.tgz"
+  "_id": "npmconf@0.1.0",
+  "_from": "npmconf@latest"
 }
index 9788072..387af20 100644 (file)
@@ -1,5 +1,5 @@
 {
-  "version": "1.2.27",
+  "version": "1.2.30",
   "name": "npm",
   "publishConfig": {
     "proprietary-attribs": false
@@ -38,7 +38,7 @@
     "ini": "~1.1.0",
     "slide": "~1.1.4",
     "abbrev": "~1.0.4",
-    "graceful-fs": "~1.2.0",
+    "graceful-fs": "~1.2.2",
     "minimatch": "~0.2.12",
     "nopt": "~2.1.1",
     "rimraf": "2",
@@ -67,7 +67,7 @@
     "lockfile": "~0.3.2",
     "retry": "~0.6.0",
     "once": "~1.1.1",
-    "npmconf": "0.0.25",
+    "npmconf": "~0.1.0",
     "opener": "~1.3.0",
     "chmodr": "~0.1.0",
     "cmd-shim": "~1.1.0",