summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--ChangeLog23
-rw-r--r--README.md1
-rw-r--r--benchmark/http/client-request-body.js69
-rwxr-xr-xconfigure32
-rw-r--r--deps/npm/html/api/bin.html2
-rw-r--r--deps/npm/html/api/bugs.html2
-rw-r--r--deps/npm/html/api/commands.html2
-rw-r--r--deps/npm/html/api/config.html2
-rw-r--r--deps/npm/html/api/deprecate.html2
-rw-r--r--deps/npm/html/api/docs.html2
-rw-r--r--deps/npm/html/api/edit.html2
-rw-r--r--deps/npm/html/api/explore.html2
-rw-r--r--deps/npm/html/api/help-search.html2
-rw-r--r--deps/npm/html/api/init.html2
-rw-r--r--deps/npm/html/api/install.html2
-rw-r--r--deps/npm/html/api/link.html2
-rw-r--r--deps/npm/html/api/load.html2
-rw-r--r--deps/npm/html/api/ls.html2
-rw-r--r--deps/npm/html/api/npm.html4
-rw-r--r--deps/npm/html/api/outdated.html2
-rw-r--r--deps/npm/html/api/owner.html2
-rw-r--r--deps/npm/html/api/pack.html2
-rw-r--r--deps/npm/html/api/prefix.html2
-rw-r--r--deps/npm/html/api/prune.html2
-rw-r--r--deps/npm/html/api/publish.html2
-rw-r--r--deps/npm/html/api/rebuild.html2
-rw-r--r--deps/npm/html/api/restart.html2
-rw-r--r--deps/npm/html/api/root.html2
-rw-r--r--deps/npm/html/api/run-script.html2
-rw-r--r--deps/npm/html/api/search.html2
-rw-r--r--deps/npm/html/api/shrinkwrap.html2
-rw-r--r--deps/npm/html/api/start.html2
-rw-r--r--deps/npm/html/api/stop.html2
-rw-r--r--deps/npm/html/api/submodule.html2
-rw-r--r--deps/npm/html/api/tag.html2
-rw-r--r--deps/npm/html/api/test.html2
-rw-r--r--deps/npm/html/api/uninstall.html2
-rw-r--r--deps/npm/html/api/unpublish.html2
-rw-r--r--deps/npm/html/api/update.html2
-rw-r--r--deps/npm/html/api/version.html2
-rw-r--r--deps/npm/html/api/view.html2
-rw-r--r--deps/npm/html/api/whoami.html2
-rw-r--r--deps/npm/html/doc/README.html2
-rw-r--r--deps/npm/html/doc/adduser.html2
-rw-r--r--deps/npm/html/doc/bin.html2
-rw-r--r--deps/npm/html/doc/bugs.html2
-rw-r--r--deps/npm/html/doc/build.html2
-rw-r--r--deps/npm/html/doc/bundle.html2
-rw-r--r--deps/npm/html/doc/cache.html2
-rw-r--r--deps/npm/html/doc/changelog.html2
-rw-r--r--deps/npm/html/doc/coding-style.html2
-rw-r--r--deps/npm/html/doc/completion.html2
-rw-r--r--deps/npm/html/doc/config.html2
-rw-r--r--deps/npm/html/doc/dedupe.html2
-rw-r--r--deps/npm/html/doc/deprecate.html2
-rw-r--r--deps/npm/html/doc/developers.html2
-rw-r--r--deps/npm/html/doc/disputes.html2
-rw-r--r--deps/npm/html/doc/docs.html2
-rw-r--r--deps/npm/html/doc/edit.html2
-rw-r--r--deps/npm/html/doc/explore.html2
-rw-r--r--deps/npm/html/doc/faq.html2
-rw-r--r--deps/npm/html/doc/folders.html2
-rw-r--r--deps/npm/html/doc/global.html2
-rw-r--r--deps/npm/html/doc/help-search.html2
-rw-r--r--deps/npm/html/doc/help.html2
-rw-r--r--deps/npm/html/doc/index.html2
-rw-r--r--deps/npm/html/doc/init.html2
-rw-r--r--deps/npm/html/doc/install.html2
-rw-r--r--deps/npm/html/doc/json.html2
-rw-r--r--deps/npm/html/doc/link.html2
-rw-r--r--deps/npm/html/doc/ls.html4
-rw-r--r--deps/npm/html/doc/npm.html4
-rw-r--r--deps/npm/html/doc/outdated.html2
-rw-r--r--deps/npm/html/doc/owner.html2
-rw-r--r--deps/npm/html/doc/pack.html2
-rw-r--r--deps/npm/html/doc/prefix.html2
-rw-r--r--deps/npm/html/doc/prune.html2
-rw-r--r--deps/npm/html/doc/publish.html2
-rw-r--r--deps/npm/html/doc/rebuild.html2
-rw-r--r--deps/npm/html/doc/registry.html2
-rw-r--r--deps/npm/html/doc/removing-npm.html2
-rw-r--r--deps/npm/html/doc/restart.html2
-rw-r--r--deps/npm/html/doc/rm.html2
-rw-r--r--deps/npm/html/doc/root.html2
-rw-r--r--deps/npm/html/doc/run-script.html2
-rw-r--r--deps/npm/html/doc/scripts.html2
-rw-r--r--deps/npm/html/doc/search.html2
-rw-r--r--deps/npm/html/doc/semver.html2
-rw-r--r--deps/npm/html/doc/shrinkwrap.html2
-rw-r--r--deps/npm/html/doc/star.html2
-rw-r--r--deps/npm/html/doc/stars.html2
-rw-r--r--deps/npm/html/doc/start.html2
-rw-r--r--deps/npm/html/doc/stop.html2
-rw-r--r--deps/npm/html/doc/submodule.html2
-rw-r--r--deps/npm/html/doc/tag.html2
-rw-r--r--deps/npm/html/doc/test.html2
-rw-r--r--deps/npm/html/doc/uninstall.html2
-rw-r--r--deps/npm/html/doc/unpublish.html2
-rw-r--r--deps/npm/html/doc/update.html2
-rw-r--r--deps/npm/html/doc/version.html2
-rw-r--r--deps/npm/html/doc/view.html2
-rw-r--r--deps/npm/html/doc/whoami.html2
-rw-r--r--deps/npm/lib/build.js2
-rw-r--r--deps/npm/lib/install.js2
-rw-r--r--deps/npm/man/man1/ls.12
-rw-r--r--deps/npm/man/man1/npm.12
-rw-r--r--deps/npm/man/man3/npm.32
-rw-r--r--deps/npm/node_modules/npm-registry-client/lib/request.js5
-rw-r--r--deps/npm/node_modules/npm-registry-client/package.json10
-rw-r--r--deps/npm/package.json2
-rw-r--r--doc/api/http.markdown21
-rw-r--r--doc/blog/release/v0.10.8.md75
-rw-r--r--lib/_http_client.js7
-rw-r--r--lib/_http_outgoing.js5
-rw-r--r--lib/_http_server.js7
-rw-r--r--lib/buffer.js3
-rw-r--r--lib/net.js14
-rw-r--r--lib/timers.js108
-rw-r--r--lib/tls.js9
-rw-r--r--src/node_buffer.cc8
-rw-r--r--test/simple/test-buffer.js17
-rw-r--r--test/simple/test-http-client-timeout-event.js4
-rw-r--r--test/simple/test-http-upgrade-agent.js4
-rw-r--r--test/simple/test-http-upgrade-client.js4
-rw-r--r--test/simple/test-http-upgrade-client2.js5
-rw-r--r--test/simple/test-http-upgrade-server.js2
-rw-r--r--test/simple/test-http-zero-length-write.js93
-rw-r--r--test/simple/test-net-socket-timeout-unref.js47
-rw-r--r--test/simple/test-tls-hello-parser-failure.js50
130 files changed, 681 insertions, 157 deletions
diff --git a/AUTHORS b/AUTHORS
index 131b1ad8f2..eb271aceb6 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -455,3 +455,4 @@ Benoit Vallée <github@benoitvallee.net>
Ryuichi Okumura <okuryu@okuryu.com>
Brandon Frohs <bfrohs@gmail.com>
Nick Sullivan <nick@sullivanflock.com>
+Nathan Zadoks <nathan@nathan7.eu>
diff --git a/ChangeLog b/ChangeLog
index baa9a0a9b7..81e7930e30 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -60,6 +60,29 @@
* zlib: allow passing options to convenience methods (Kyle Robinson Young)
+2013.05.24, Version 0.10.8 (Stable), 30d9e9fdd9d4c33d3d95a129d021cd8b5b91eddb
+
+* v8: update to 3.14.5.9
+
+* uv: upgrade to 0.10.8
+
+* npm: Upgrade to 1.2.23
+
+* http: remove bodyHead from 'upgrade' events (Nathan Zadoks)
+
+* http: Return true on empty writes, not false (isaacs)
+
+* http: save roundtrips, convert buffers to strings (Ben Noordhuis)
+
+* configure: respect the --dest-os flag consistently (Nathan Rajlich)
+
+* buffer: throw when writing beyond buffer (Trevor Norris)
+
+* crypto: Clear error after DiffieHellman key errors (isaacs)
+
+* string_bytes: strip padding from base64 strings (Trevor Norris)
+
+
2013.05.17, Version 0.10.7 (Stable), d2fdae197ac542f686ee06835d1153dd43b862e5
* uv: upgrade to v0.10.7
diff --git a/README.md b/README.md
index aa505e555b..9f6e07871a 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@ Evented I/O for V8 javascript. [![Build Status](https://secure.travis-ci.org/joy
Prerequisites (Unix only):
+ * GCC 4.2 or newer
* Python 2.6 or 2.7
* GNU Make 3.81 or newer
* libexecinfo (FreeBSD and OpenBSD only)
diff --git a/benchmark/http/client-request-body.js b/benchmark/http/client-request-body.js
new file mode 100644
index 0000000000..7a3468a670
--- /dev/null
+++ b/benchmark/http/client-request-body.js
@@ -0,0 +1,69 @@
+// Measure the time it takes for the HTTP client to send a request body.
+
+var common = require('../common.js');
+var http = require('http');
+
+var bench = common.createBenchmark(main, {
+ dur: [5],
+ type: ['asc', 'utf', 'buf'],
+ bytes: [32, 256, 1024],
+ method: ['write', 'end '] // two spaces added to line up each row
+});
+
+function main(conf) {
+ var dur = +conf.dur;
+ var len = +conf.bytes;
+
+ var encoding;
+ var chunk;
+ switch (conf.type) {
+ case 'buf':
+ chunk = new Buffer(len);
+ chunk.fill('x');
+ break;
+ case 'utf':
+ encoding = 'utf8';
+ chunk = new Array(len / 2 + 1).join('ü');
+ break;
+ case 'asc':
+ chunk = new Array(len + 1).join('a');
+ break;
+ }
+
+ var nreqs = 0;
+ var options = {
+ headers: { 'Connection': 'keep-alive', 'Transfer-Encoding': 'chunked' },
+ agent: new http.Agent({ maxSockets: 1 }),
+ host: '127.0.0.1',
+ port: common.PORT,
+ path: '/',
+ method: 'POST'
+ };
+
+ var server = http.createServer(function(req, res) {
+ res.end();
+ });
+ server.listen(options.port, options.host, function() {
+ setTimeout(done, dur * 1000);
+ bench.start();
+ pummel();
+ });
+
+ function pummel() {
+ var req = http.request(options, function(res) {
+ nreqs++;
+ pummel(); // Line up next request.
+ res.resume();
+ });
+ if (conf.method === 'write') {
+ req.write(chunk, encoding);
+ req.end();
+ } else {
+ req.end(chunk, encoding);
+ }
+ }
+
+ function done() {
+ bench.end(nreqs);
+ }
+}
diff --git a/configure b/configure
index 7fb2588b99..012b77f24a 100755
--- a/configure
+++ b/configure
@@ -10,7 +10,8 @@ import sys
CC = os.environ.get('CC', 'cc')
root_dir = os.path.dirname(__file__)
-sys.path.insert(0, os.path.join(root_dir, 'deps', 'v8', 'tools'))
+sys.path.insert(0, os.path.join(root_dir, 'tools', 'gyp', 'pylib'))
+from gyp.common import GetFlavor
# parse our options
parser = optparse.OptionParser()
@@ -236,7 +237,7 @@ parser.add_option("--dest-os",
action="store",
dest="dest_os",
help="Operating system to build for. Valid values are: "
- "win, mac, solaris, freebsd, linux")
+ "win, mac, solaris, freebsd, openbsd, linux")
parser.add_option("--no-ifaddrs",
action="store_true",
@@ -462,18 +463,18 @@ def configure_node(o):
# By default, enable DTrace on SunOS systems. Don't allow it on other
# systems, since it won't work. (The MacOS build process is different than
# SunOS, and we haven't implemented it.)
- if sys.platform.startswith('sunos') or sys.platform.startswith('darwin'):
+ if flavor in ('solaris', 'mac'):
o['variables']['node_use_dtrace'] = b(not options.without_dtrace)
o['variables']['uv_use_dtrace'] = o['variables']['node_use_dtrace']
o['variables']['uv_parent_path'] = '/deps/uv/'
- elif sys.platform.startswith('linux'):
+ elif flavor == 'linux':
o['variables']['node_use_dtrace'] = 'false'
o['variables']['node_use_systemtap'] = b(options.with_dtrace)
if options.systemtap_includes:
o['include_dirs'] += [options.systemtap_includes]
elif options.with_dtrace:
raise Exception(
- 'DTrace is currently only supported on SunOS or Linux systems.')
+ 'DTrace is currently only supported on SunOS, MacOS or Linux systems.')
else:
o['variables']['node_use_dtrace'] = 'false'
o['variables']['node_use_systemtap'] = 'false'
@@ -482,7 +483,7 @@ def configure_node(o):
o['defines'] += ['SUNOS_NO_IFADDRS']
# By default, enable ETW on Windows.
- if sys.platform.startswith('win32'):
+ if flavor == 'win':
o['variables']['node_use_etw'] = b(not options.without_etw);
elif options.with_etw:
raise Exception('ETW is only supported on Windows.')
@@ -490,7 +491,7 @@ def configure_node(o):
o['variables']['node_use_etw'] = 'false'
# By default, enable Performance counters on Windows.
- if sys.platform.startswith('win32'):
+ if flavor == 'win':
o['variables']['node_use_perfctr'] = b(not options.without_perfctr);
elif options.with_perfctr:
raise Exception('Performance counter is only supported on Windows.')
@@ -603,7 +604,7 @@ def configure_openssl(o):
def configure_winsdk(o):
- if not sys.platform.startswith('win32'):
+ if flavor != 'win':
return
winsdk_dir = os.environ.get("WindowsSdkDir")
@@ -616,6 +617,13 @@ def configure_winsdk(o):
print "ctrpp not found in WinSDK path--using pre-gen files from tools/msvs/genfiles."
+# determine the "flavor" (operating system) we're building for,
+# leveraging gyp's GetFlavor function
+flavor_params = {};
+if (options.dest_os):
+ flavor_params['flavor'] = options.dest_os;
+flavor = GetFlavor(flavor_params);
+
output = {
'variables': { 'python': sys.executable },
'include_dirs': [],
@@ -668,14 +676,12 @@ write('config.mk',
'# Do not edit. Generated by the configure script.\n' + config)
if options.use_ninja:
- gyp_args = ['-f', 'ninja']
+ gyp_args = ['-f', 'ninja-' + flavor]
elif options.use_xcode:
gyp_args = ['-f', 'xcode']
-elif os.name == 'nt':
+elif flavor == 'win':
gyp_args = ['-f', 'msvs', '-G', 'msvs_version=auto']
-elif options.dest_os:
- gyp_args = ['-f', 'make-' + options.dest_os]
else:
- gyp_args = ['-f', 'make']
+ gyp_args = ['-f', 'make-' + flavor]
subprocess.call([sys.executable, 'tools/gyp_node'] + gyp_args)
diff --git a/deps/npm/html/api/bin.html b/deps/npm/html/api/bin.html
index 88cbedc9ee..224f570a5d 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 &mdash; npm@1.2.21</p>
+<p id="footer">bin &mdash; npm@1.2.23</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 216e41234a..b6b2d964df 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 &mdash; npm@1.2.21</p>
+<p id="footer">bugs &mdash; npm@1.2.23</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 4edf8baba7..ba5cc10bbf 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-&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.21</p>
+<p id="footer">commands &mdash; npm@1.2.23</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 ef0bc92b06..3e70a647a1 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 &mdash; npm@1.2.21</p>
+<p id="footer">config &mdash; npm@1.2.23</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 ced87592ad..c3b1db5fdf 100644
--- a/deps/npm/html/api/deprecate.html
+++ b/deps/npm/html/api/deprecate.html
@@ -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.21</p>
+<p id="footer">deprecate &mdash; npm@1.2.23</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 9afa264f80..545b93f55c 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 &mdash; npm@1.2.21</p>
+<p id="footer">docs &mdash; npm@1.2.23</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 c6041bd269..414c003680 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 &mdash; npm@1.2.21</p>
+<p id="footer">edit &mdash; npm@1.2.23</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 129e3faaac..cdf2e955ca 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 &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.21</p>
+<p id="footer">explore &mdash; npm@1.2.23</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 ae524a1ac8..97b044337c 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 &mdash; npm@1.2.21</p>
+<p id="footer">help-search &mdash; npm@1.2.23</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 9446c796dc..9e21e1f665 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 &mdash; npm@1.2.21</p>
+<p id="footer">init &mdash; npm@1.2.23</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 b7e9e4be17..dcad6058c3 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, &#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.21</p>
+<p id="footer">install &mdash; npm@1.2.23</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 f75bd6b893..fcfc95f9fe 100644
--- a/deps/npm/html/api/link.html
+++ b/deps/npm/html/api/link.html
@@ -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.21</p>
+<p id="footer">link &mdash; npm@1.2.23</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 55973a9c8e..39543b46d9 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 &mdash; npm@1.2.21</p>
+<p id="footer">load &mdash; npm@1.2.23</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 9aa4cccc17..39abd0cb38 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 &mdash; npm@1.2.21</p>
+<p id="footer">ls &mdash; npm@1.2.23</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 d4a148ce55..b9887421a8 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.2.21</p>
+<p>1.2.23</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.21</p>
+<p id="footer">npm &mdash; npm@1.2.23</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 ee4a784095..2d652b36b5 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 &#39;packages&#39; parameter is left out, npm will check all packages.</p>
</div>
-<p id="footer">outdated &mdash; npm@1.2.21</p>
+<p id="footer">outdated &mdash; npm@1.2.23</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 979cba4abc..478f368fd7 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 &mdash; npm@1.2.21</p>
+<p id="footer">owner &mdash; npm@1.2.23</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 1f546b1939..9721a4e7c1 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 &mdash; npm@1.2.21</p>
+<p id="footer">pack &mdash; npm@1.2.23</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 c28e226d1f..56a019f70a 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 &mdash; npm@1.2.21</p>
+<p id="footer">prefix &mdash; npm@1.2.23</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 3dc3f87eac..460b0391aa 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&#39;s dependencies list.</p>
</div>
-<p id="footer">prune &mdash; npm@1.2.21</p>
+<p id="footer">prune &mdash; npm@1.2.23</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 cfe90f3a46..d760dac3a2 100644
--- a/deps/npm/html/api/publish.html
+++ b/deps/npm/html/api/publish.html
@@ -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.21</p>
+<p id="footer">publish &mdash; npm@1.2.23</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 1766d075d0..1e66b35dda 100644
--- a/deps/npm/html/api/rebuild.html
+++ b/deps/npm/html/api/rebuild.html
@@ -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.21</p>
+<p id="footer">rebuild &mdash; npm@1.2.23</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 e204a992e4..b74cdebc5f 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 &mdash; npm@1.2.21</p>
+<p id="footer">restart &mdash; npm@1.2.23</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 d7f9ffc714..879f000092 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 &mdash; npm@1.2.21</p>
+<p id="footer">root &mdash; npm@1.2.23</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 6cf08639eb..d6cc5d44f3 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 &mdash; npm@1.2.21</p>
+<p id="footer">run-script &mdash; npm@1.2.23</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 ede10c46a9..7892a3d416 100644
--- a/deps/npm/html/api/search.html
+++ b/deps/npm/html/api/search.html
@@ -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.21</p>
+<p id="footer">search &mdash; npm@1.2.23</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 81d235da55..bc9a0ba9cf 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, &#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.21</p>
+<p id="footer">shrinkwrap &mdash; npm@1.2.23</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 344c2a2cc2..6ab228fdcf 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 &mdash; npm@1.2.21</p>
+<p id="footer">start &mdash; npm@1.2.23</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 016811a055..7f55fd5a10 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 &mdash; npm@1.2.21</p>
+<p id="footer">stop &mdash; npm@1.2.23</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 41a5c356ee..492d6681cb 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 &mdash; npm@1.2.21</p>
+<p id="footer">submodule &mdash; npm@1.2.23</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 db0ee3636b..d8b2ebb49f 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 &mdash; npm@1.2.21</p>
+<p id="footer">tag &mdash; npm@1.2.23</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 fbd3fc75ac..aeb36bcf8c 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 &mdash; npm@1.2.21</p>
+<p id="footer">test &mdash; npm@1.2.23</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 44d98cba7e..ddc401125e 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, &#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.21</p>
+<p id="footer">uninstall &mdash; npm@1.2.23</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 a5175311e9..b544a4643b 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 &mdash; npm@1.2.21</p>
+<p id="footer">unpublish &mdash; npm@1.2.23</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 05cc97394a..21ca5f6304 100644
--- a/deps/npm/html/api/update.html
+++ b/deps/npm/html/api/update.html
@@ -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.21</p>
+<p id="footer">update &mdash; npm@1.2.23</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 a38be57c76..377b742cb9 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 &mdash; npm@1.2.21</p>
+<p id="footer">version &mdash; npm@1.2.23</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 e40daeffcf..47d9e2d578 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 &mdash; npm@1.2.21</p>
+<p id="footer">view &mdash; npm@1.2.23</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 a9be42efce..fa962a885a 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 &mdash; npm@1.2.21</p>
+<p id="footer">whoami &mdash; npm@1.2.23</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 462ef2736f..6ff327fe24 100644
--- a/deps/npm/html/doc/README.html
+++ b/deps/npm/html/doc/README.html
@@ -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.21</p>
+<p id="footer"><a href="../doc/README.html">README</a> &mdash; npm@1.2.23</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 43973486e2..0d7b5a2f6d 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 &mdash; npm@1.2.21</p>
+<p id="footer">adduser &mdash; npm@1.2.23</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 8fb6862fae..145c87641a 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 &mdash; npm@1.2.21</p>
+<p id="footer">bin &mdash; npm@1.2.23</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 0b5800b705..f953e788f6 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 &mdash; npm@1.2.21</p>
+<p id="footer">bugs &mdash; npm@1.2.23</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 faa0a93de5..39f1b45f60 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 &mdash; npm@1.2.21</p>
+<p id="footer">build &mdash; npm@1.2.23</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 b33b7caa65..cda61bc5a2 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 &mdash; npm@1.2.21</p>
+<p id="footer">bundle &mdash; npm@1.2.23</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 de53d67d6e..7e0c1b9022 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 &mdash; npm@1.2.21</p>
+<p id="footer">cache &mdash; npm@1.2.23</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 b23eeae532..284a4b75c8 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 &mdash; npm@1.2.21</p>
+<p id="footer">changelog &mdash; npm@1.2.23</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 cb1a5e3a54..862dcb1c2b 100644
--- a/deps/npm/html/doc/coding-style.html
+++ b/deps/npm/html/doc/coding-style.html
@@ -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.21</p>
+<p id="footer">coding-style &mdash; npm@1.2.23</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 cd87c8626a..dfa023eba7 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 &mdash; npm@1.2.21</p>
+<p id="footer">completion &mdash; npm@1.2.23</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 88cf40bd8a..f62817f482 100644
--- a/deps/npm/html/doc/config.html
+++ b/deps/npm/html/doc/config.html
@@ -771,7 +771,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.21</p>
+<p id="footer">config &mdash; npm@1.2.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
diff --git a/deps/npm/html/doc/dedupe.html b/deps/npm/html/doc/dedupe.html
index 8396b46074..6951cd2740 100644
--- a/deps/npm/html/doc/dedupe.html
+++ b/deps/npm/html/doc/dedupe.html
@@ -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.21</p>
+<p id="footer">dedupe &mdash; npm@1.2.23</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 3144716dc2..c94c9761ae 100644
--- a/deps/npm/html/doc/deprecate.html
+++ b/deps/npm/html/doc/deprecate.html
@@ -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.21</p>
+<p id="footer">deprecate &mdash; npm@1.2.23</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 5783c791c7..a86ca5cf13 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 &mdash; npm@1.2.21</p>
+<p id="footer">developers &mdash; npm@1.2.23</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 8b8a8505a0..f21ed97541 100644
--- a/deps/npm/html/doc/disputes.html
+++ b/deps/npm/html/doc/disputes.html
@@ -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.21</p>
+<p id="footer">disputes &mdash; npm@1.2.23</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 c544eacae5..9acec909b1 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 &mdash; npm@1.2.21</p>
+<p id="footer">docs &mdash; npm@1.2.23</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 21e2f791d2..e84272c306 100644
--- a/deps/npm/html/doc/edit.html
+++ b/deps/npm/html/doc/edit.html
@@ -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.21</p>
+<p id="footer">edit &mdash; npm@1.2.23</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 21327a5931..e53ef5ce83 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 &mdash; npm@1.2.21</p>
+<p id="footer">explore &mdash; npm@1.2.23</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 65d60ba69b..7de8dc4c37 100644
--- a/deps/npm/html/doc/faq.html
+++ b/deps/npm/html/doc/faq.html
@@ -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.21</p>
+<p id="footer">faq &mdash; npm@1.2.23</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 b28bcc35e4..a79ce3d89d 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 &mdash; npm@1.2.21</p>
+<p id="footer">folders &mdash; npm@1.2.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
diff --git a/deps/npm/html/doc/global.html b/deps/npm/html/doc/global.html
index a858036618..3bb911bd5c 100644
--- a/deps/npm/html/doc/global.html
+++ b/deps/npm/html/doc/global.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">global &mdash; npm@1.2.21</p>
+<p id="footer">global &mdash; npm@1.2.23</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 ed74752ad2..325ec278a4 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 &mdash; npm@1.2.21</p>
+<p id="footer">help-search &mdash; npm@1.2.23</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 7fe97e5fda..0d8ce47a43 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 &mdash; npm@1.2.21</p>
+<p id="footer">help &mdash; npm@1.2.23</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 1e9f496316..71bac8e079 100644
--- a/deps/npm/html/doc/index.html
+++ b/deps/npm/html/doc/index.html
@@ -400,7 +400,7 @@
<p> Display npm username</p>
</div>
-<p id="footer">index &mdash; npm@1.2.21</p>
+<p id="footer">index &mdash; npm@1.2.23</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 9c91de21ec..3695c1c1a2 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="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.21</p>
+<p id="footer">init &mdash; npm@1.2.23</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 84d3b7f4b3..20c067051a 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 &mdash; npm@1.2.21</p>
+<p id="footer">install &mdash; npm@1.2.23</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 6249adbf4a..c250a58f0d 100644
--- a/deps/npm/html/doc/json.html
+++ b/deps/npm/html/doc/json.html
@@ -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.21</p>
+<p id="footer">json &mdash; npm@1.2.23</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 b7cfe31f9e..4adfa612f5 100644
--- a/deps/npm/html/doc/link.html
+++ b/deps/npm/html/doc/link.html
@@ -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.21</p>
+<p id="footer">link &mdash; npm@1.2.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
diff --git a/deps/npm/html/doc/ls.html b/deps/npm/html/doc/ls.html
index 13129b8fe2..c920ab935e 100644
--- a/deps/npm/html/doc/ls.html
+++ b/deps/npm/html/doc/ls.html
@@ -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.21 /path/to/npm
+<pre><code>npm@1.2.23 /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.21</p>
+<p id="footer">ls &mdash; npm@1.2.23</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 a492e3e7d9..858ef4fa61 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.2.21</p>
+<p>1.2.23</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.21</p>
+<p id="footer">npm &mdash; npm@1.2.23</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 758f31e3fd..d361a6e64c 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 &mdash; npm@1.2.21</p>
+<p id="footer">outdated &mdash; npm@1.2.23</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 160abcde33..594f1f8076 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 &mdash; npm@1.2.21</p>
+<p id="footer">owner &mdash; npm@1.2.23</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 32145b4c99..9e06e2ca36 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 &mdash; npm@1.2.21</p>
+<p id="footer">pack &mdash; npm@1.2.23</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 447011a2f0..ae3badb066 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 &mdash; npm@1.2.21</p>
+<p id="footer">prefix &mdash; npm@1.2.23</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 e8293372a2..af6445785a 100644
--- a/deps/npm/html/doc/prune.html
+++ b/deps/npm/html/doc/prune.html
@@ -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.21</p>
+<p id="footer">prune &mdash; npm@1.2.23</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 9ab83b4a99..fdeacba85e 100644
--- a/deps/npm/html/doc/publish.html
+++ b/deps/npm/html/doc/publish.html
@@ -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.21</p>
+<p id="footer">publish &mdash; npm@1.2.23</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 c7314b564d..5faa1a4d66 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 &mdash; npm@1.2.21</p>
+<p id="footer">rebuild &mdash; npm@1.2.23</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 f6f249dff3..b93279eab7 100644
--- a/deps/npm/html/doc/registry.html
+++ b/deps/npm/html/doc/registry.html
@@ -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.21</p>
+<p id="footer">registry &mdash; npm@1.2.23</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 b346f9ebcd..10a22a7684 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 &mdash; npm@1.2.21</p>
+<p id="footer">removing-npm &mdash; npm@1.2.23</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 ebb5779d3f..0b8888d0cb 100644
--- a/deps/npm/html/doc/restart.html
+++ b/deps/npm/html/doc/restart.html
@@ -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.21</p>
+<p id="footer">restart &mdash; npm@1.2.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
diff --git a/deps/npm/html/doc/rm.html b/deps/npm/html/doc/rm.html
index 2251e8e528..56803aef8d 100644
--- a/deps/npm/html/doc/rm.html
+++ b/deps/npm/html/doc/rm.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">rm &mdash; npm@1.2.21</p>
+<p id="footer">rm &mdash; npm@1.2.23</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 abae7ddf6d..2768fdef3a 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 &mdash; npm@1.2.21</p>
+<p id="footer">root &mdash; npm@1.2.23</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 36b0625cac..d0d14a8909 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 &mdash; npm@1.2.21</p>
+<p id="footer">run-script &mdash; npm@1.2.23</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 b3da439d2e..ab74252960 100644
--- a/deps/npm/html/doc/scripts.html
+++ b/deps/npm/html/doc/scripts.html
@@ -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.21</p>
+<p id="footer">scripts &mdash; npm@1.2.23</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 c510ac3ca1..7bc6679576 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 &mdash; npm@1.2.21</p>
+<p id="footer">search &mdash; npm@1.2.23</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 7e6f15a952..5ec2a44de5 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 &mdash; npm@1.2.21</p>
+<p id="footer">semver &mdash; npm@1.2.23</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 2ac09a8a55..872db784a2 100644
--- a/deps/npm/html/doc/shrinkwrap.html
+++ b/deps/npm/html/doc/shrinkwrap.html
@@ -170,7 +170,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 &mdash; npm@1.2.21</p>
+<p id="footer">shrinkwrap &mdash; npm@1.2.23</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 0145ff8d7c..6392b2ff31 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 &mdash; npm@1.2.21</p>
+<p id="footer">star &mdash; npm@1.2.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
diff --git a/deps/npm/html/doc/stars.html b/deps/npm/html/doc/stars.html
index 3fea59575e..0c15302413 100644
--- a/deps/npm/html/doc/stars.html
+++ b/deps/npm/html/doc/stars.html
@@ -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.21</p>
+<p id="footer">stars &mdash; npm@1.2.23</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 ec4530d5ee..6fd760dfa2 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 &mdash; npm@1.2.21</p>
+<p id="footer">start &mdash; npm@1.2.23</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 74b614cc44..35472c7745 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 &mdash; npm@1.2.21</p>
+<p id="footer">stop &mdash; npm@1.2.23</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 72405a550f..706da50259 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 &mdash; npm@1.2.21</p>
+<p id="footer">submodule &mdash; npm@1.2.23</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 660b16f0e9..eb90946d2d 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 &mdash; npm@1.2.21</p>
+<p id="footer">tag &mdash; npm@1.2.23</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 ab757ce608..e91c19e616 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 &mdash; npm@1.2.21</p>
+<p id="footer">test &mdash; npm@1.2.23</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 2b9a3e8235..ffe0e8d74b 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 &mdash; npm@1.2.21</p>
+<p id="footer">uninstall &mdash; npm@1.2.23</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 ab0d0623d0..6de217c5b4 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 &mdash; npm@1.2.21</p>
+<p id="footer">unpublish &mdash; npm@1.2.23</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 a1c4db2352..c72f43617c 100644
--- a/deps/npm/html/doc/update.html
+++ b/deps/npm/html/doc/update.html
@@ -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.21</p>
+<p id="footer">update &mdash; npm@1.2.23</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 a1d622a62f..8ae3a07331 100644
--- a/deps/npm/html/doc/version.html
+++ b/deps/npm/html/doc/version.html
@@ -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.21</p>
+<p id="footer">version &mdash; npm@1.2.23</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 eb1f0c3908..148f401b95 100644
--- a/deps/npm/html/doc/view.html
+++ b/deps/npm/html/doc/view.html
@@ -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.21</p>
+<p id="footer">view &mdash; npm@1.2.23</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 a8feda5ca1..9f8a769c1e 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 &mdash; npm@1.2.21</p>
+<p id="footer">whoami &mdash; npm@1.2.23</p>
<script>
;(function () {
var wrapper = document.getElementById("wrapper")
diff --git a/deps/npm/lib/build.js b/deps/npm/lib/build.js
index 5076e39125..fdbae722c9 100644
--- a/deps/npm/lib/build.js
+++ b/deps/npm/lib/build.js
@@ -107,6 +107,8 @@ function shouldWarn(pkg, folder, global, cb) {
// current searched package is the linked package on first call
if (linkedPkg !== currentPkg) {
+ if (!topPkg.dependencies) return cb()
+
// don't generate a warning if it's listed in dependencies
if (Object.keys(topPkg.dependencies).indexOf(currentPkg) === -1) {
diff --git a/deps/npm/lib/install.js b/deps/npm/lib/install.js
index cb59a789fa..4db8d58ef2 100644
--- a/deps/npm/lib/install.js
+++ b/deps/npm/lib/install.js
@@ -93,7 +93,7 @@ function install (args, cb_) {
var tree = treeify(installed || [])
, pretty = prettify(tree, installed).trim()
- if (pretty) log.write(pretty)
+ if (pretty) console.log(pretty)
save(where, installed, tree, pretty, cb_)
})
}
diff --git a/deps/npm/man/man1/ls.1 b/deps/npm/man/man1/ls.1
index 506fa466f8..1bac195df2 100644
--- a/deps/npm/man/man1/ls.1
+++ b/deps/npm/man/man1/ls.1
@@ -29,7 +29,7 @@ For example, running \fBnpm ls promzard\fR in npm\'s source tree will show:
.IP "" 4
.
.nf
-npm@1.2.21 /path/to/npm
+npm@1.2.23 /path/to/npm
└─┬ init\-package\-json@0\.0\.4
└── promzard@0\.1\.5
.
diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1
index 40568df273..2a899c6f1e 100644
--- a/deps/npm/man/man1/npm.1
+++ b/deps/npm/man/man1/npm.1
@@ -14,7 +14,7 @@ npm <command> [args]
.fi
.
.SH "VERSION"
-1.2.21
+1.2.23
.
.SH "DESCRIPTION"
npm is the package manager for the Node JavaScript platform\. It puts
diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3
index 56f8d62669..304a7c579d 100644
--- a/deps/npm/man/man3/npm.3
+++ b/deps/npm/man/man3/npm.3
@@ -21,7 +21,7 @@ npm\.load([configObject,] function (er, npm) {
.fi
.
.SH "VERSION"
-1.2.21
+1.2.23
.
.SH "DESCRIPTION"
This is the API documentation for npm\.
diff --git a/deps/npm/node_modules/npm-registry-client/lib/request.js b/deps/npm/node_modules/npm-registry-client/lib/request.js
index 49e7a19d7f..9b72bc457d 100644
--- a/deps/npm/node_modules/npm-registry-client/lib/request.js
+++ b/deps/npm/node_modules/npm-registry-client/lib/request.js
@@ -222,7 +222,10 @@ function requestDone (method, where, cb) {
return function (er, response, data) {
if (er) return cb(er)
- this.log.http(response.statusCode, url.parse(where).href)
+ var urlObj = url.parse(where)
+ if (urlObj.auth)
+ urlObj.auth = '***'
+ this.log.http(response.statusCode, url.format(urlObj))
var parsed
diff --git a/deps/npm/node_modules/npm-registry-client/package.json b/deps/npm/node_modules/npm-registry-client/package.json
index eb2fac9255..8a62919c5e 100644
--- a/deps/npm/node_modules/npm-registry-client/package.json
+++ b/deps/npm/node_modules/npm-registry-client/package.json
@@ -6,7 +6,7 @@
},
"name": "npm-registry-client",
"description": "Client for the npm registry",
- "version": "0.2.23",
+ "version": "0.2.24",
"repository": {
"url": "git://github.com/isaacs/npm-registry-client"
},
@@ -38,10 +38,6 @@
"bugs": {
"url": "https://github.com/isaacs/npm-registry-client/issues"
},
- "_id": "npm-registry-client@0.2.23",
- "dist": {
- "shasum": "a320ab2b1d048b4f7b88e40bd86974ca322b4c24"
- },
- "_from": "npm-registry-client@0.2.23",
- "_resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-0.2.23.tgz"
+ "_id": "npm-registry-client@0.2.24",
+ "_from": "npm-registry-client@~0.2.22"
}
diff --git a/deps/npm/package.json b/deps/npm/package.json
index 8e6e00cc5c..0befcd0210 100644
--- a/deps/npm/package.json
+++ b/deps/npm/package.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.21",
+ "version": "1.2.23",
"name": "npm",
"publishConfig": {
"proprietary-attribs": false
diff --git a/doc/api/http.markdown b/doc/api/http.markdown
index d992bdffa3..9ff5198812 100644
--- a/doc/api/http.markdown
+++ b/doc/api/http.markdown
@@ -93,7 +93,7 @@ not be emitted.
### Event: 'connect'
-`function (request, socket, head) { }`
+`function (request, socket) { }`
Emitted each time a client requests a http CONNECT method. If this event isn't
listened for, then clients requesting a CONNECT method will have their
@@ -102,8 +102,6 @@ connections closed.
* `request` is the arguments for the http request, as it is in the request
event.
* `socket` is the network socket between the server and client.
-* `head` is an instance of Buffer, the first packet of the tunneling stream,
- this may be empty.
After this event is emitted, the request's socket will not have a `data`
event listener, meaning you will need to bind to it in order to handle data
@@ -111,7 +109,7 @@ sent to the server on that socket.
### Event: 'upgrade'
-`function (request, socket, head) { }`
+`function (request, socket) { }`
Emitted each time a client requests a http upgrade. If this event isn't
listened for, then clients requesting an upgrade will have their connections
@@ -120,8 +118,6 @@ closed.
* `request` is the arguments for the http request, as it is in the request
event.
* `socket` is the network socket between the server and client.
-* `head` is an instance of Buffer, the first packet of the upgraded stream,
- this may be empty.
After this event is emitted, the request's socket will not have a `data`
event listener, meaning you will need to bind to it in order to handle data
@@ -597,7 +593,7 @@ Emitted after a socket is assigned to this request.
### Event: 'connect'
-`function (response, socket, head) { }`
+`function (response, socket) { }`
Emitted each time a server responds to a request with a CONNECT method. If this
event isn't being listened for, clients receiving a CONNECT method will have
@@ -614,14 +610,13 @@ A client server pair that show you how to listen for the `connect` event.
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay');
});
- proxy.on('connect', function(req, cltSocket, head) {
+ proxy.on('connect', function(req, cltSocket) {
// connect to an origin server
var srvUrl = url.parse('http://' + req.url);
var srvSocket = net.connect(srvUrl.port, srvUrl.hostname, function() {
cltSocket.write('HTTP/1.1 200 Connection Established\r\n' +
'Proxy-agent: Node-Proxy\r\n' +
'\r\n');
- srvSocket.write(head);
srvSocket.pipe(cltSocket);
cltSocket.pipe(srvSocket);
});
@@ -641,7 +636,7 @@ A client server pair that show you how to listen for the `connect` event.
var req = http.request(options);
req.end();
- req.on('connect', function(res, socket, head) {
+ req.on('connect', function(res, socket) {
console.log('got connected!');
// make a request over an HTTP tunnel
@@ -660,7 +655,7 @@ A client server pair that show you how to listen for the `connect` event.
### Event: 'upgrade'
-`function (response, socket, head) { }`
+`function (response, socket) { }`
Emitted each time a server responds to a request with an upgrade. If this
event isn't being listened for, clients receiving an upgrade header will have
@@ -675,7 +670,7 @@ A client server pair that show you how to listen for the `upgrade` event.
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay');
});
- srv.on('upgrade', function(req, socket, head) {
+ srv.on('upgrade', function(req, socket) {
socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
'Upgrade: WebSocket\r\n' +
'Connection: Upgrade\r\n' +
@@ -700,7 +695,7 @@ A client server pair that show you how to listen for the `upgrade` event.
var req = http.request(options);
req.end();
- req.on('upgrade', function(res, socket, upgradeHead) {
+ req.on('upgrade', function(res, socket) {
console.log('got upgraded!');
socket.end();
process.exit(0);
diff --git a/doc/blog/release/v0.10.8.md b/doc/blog/release/v0.10.8.md
new file mode 100644
index 0000000000..de9bc87ade
--- /dev/null
+++ b/doc/blog/release/v0.10.8.md
@@ -0,0 +1,75 @@
+date: Fri May 24 15:43:01 PDT 2013
+version: 0.10.8
+category: release
+title: Node v0.10.8 (Stable)
+slug: node-v0-10-8-stable
+
+2013.05.24, Version 0.10.8 (Stable)
+
+* v8: update to 3.14.5.9
+
+* uv: upgrade to 0.10.8
+
+* npm: Upgrade to 1.2.23
+
+* http: remove bodyHead from 'upgrade' events (Nathan Zadoks)
+
+* http: Return true on empty writes, not false (isaacs)
+
+* http: save roundtrips, convert buffers to strings (Ben Noordhuis)
+
+* configure: respect the --dest-os flag consistently (Nathan Rajlich)
+
+* buffer: throw when writing beyond buffer (Trevor Norris)
+
+* crypto: Clear error after DiffieHellman key errors (isaacs)
+
+* string_bytes: strip padding from base64 strings (Trevor Norris)
+
+
+Source Code: http://nodejs.org/dist/v0.10.8/node-v0.10.8.tar.gz
+
+Macintosh Installer (Universal): http://nodejs.org/dist/v0.10.8/node-v0.10.8.pkg
+
+Windows Installer: http://nodejs.org/dist/v0.10.8/node-v0.10.8-x86.msi
+
+Windows x64 Installer: http://nodejs.org/dist/v0.10.8/x64/node-v0.10.8-x64.msi
+
+Windows x64 Files: http://nodejs.org/dist/v0.10.8/x64/
+
+Linux 32-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-linux-x86.tar.gz
+
+Linux 64-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-linux-x64.tar.gz
+
+Solaris 32-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-sunos-x86.tar.gz
+
+Solaris 64-bit Binary: http://nodejs.org/dist/v0.10.8/node-v0.10.8-sunos-x64.tar.gz
+
+Other release files: http://nodejs.org/dist/v0.10.8/
+
+Website: http://nodejs.org/docs/v0.10.8/
+
+Documentation: http://nodejs.org/docs/v0.10.8/api/
+
+Shasums:
+
+```
+c1b81939e55d42fd7a90ec88ab23fd7a411ed77c node-v0.10.8-darwin-x64.tar.gz
+4474b8d4222efd6f6076243a4aa78e72760ee01a node-v0.10.8-darwin-x86.tar.gz
+898283b1ba8a9732c98ce38a89dc15af23291702 node-v0.10.8-linux-x64.tar.gz
+2e15464289f618245fc6f420191490c144d81be3 node-v0.10.8-linux-x86.tar.gz
+9a36b001ce5eef52641b836a42d1fc69c516d329 node-v0.10.8-sunos-x64.tar.gz
+490d9a6d2a300fd2750a4a227288aed67a767713 node-v0.10.8-sunos-x86.tar.gz
+96218cb0c14fbcaa76165fbe5a3af402883f898b node-v0.10.8-x86.msi
+a713f339195dd009d2614fac25b61bc88295f063 node-v0.10.8.pkg
+d650a09ae868bb04f424e3560658c15b9a885b5b node-v0.10.8.tar.gz
+38034b7a6bca2dbe3aaacc3cc8aa9920394baaf7 node.exe
+19cd4ae9f3edeaa259e5ca84abd28dea400a91d7 node.exp
+1ccffaf0ff0f4bb11e8d23a2938366fd87b3e583 node.lib
+079f617ef81507a6b5fe7e8bd1f5a2f109a574ec node.pdb
+985d55d1ba49f47354ba13a419d678bf73634ef9 x64/node-v0.10.8-x64.msi
+25d4d74c73cd57346094979e5c51c5b16d6dcb83 x64/node.exe
+19587e8301371e721695c7aed335f74c6873dfaf x64/node.exp
+4a002dd8a1742431fc99a2a92580a3040a796f2c x64/node.lib
+8d18200f9fe81805fe81201355d9f3509bd0c81b x64/node.pdb
+```
diff --git a/lib/_http_client.js b/lib/_http_client.js
index 339a5c785d..e02cb4f40c 100644
--- a/lib/_http_client.js
+++ b/lib/_http_client.js
@@ -25,6 +25,9 @@ var EventEmitter = require('events').EventEmitter;
var HTTPParser = process.binding('http_parser').HTTPParser;
var assert = require('assert').ok;
+// an empty buffer for UPGRADE/CONNECT bodyHead compatibility
+var emptyBuffer = new Buffer(0);
+
var common = require('_http_common');
var httpSocketSetup = common.httpSocketSetup;
@@ -273,7 +276,9 @@ function socketOnData(d, start, end) {
socket.removeListener('close', socketCloseListener);
socket.removeListener('error', socketErrorListener);
- req.emit(eventName, res, socket, bodyHead);
+ socket.unshift(bodyHead);
+
+ req.emit(eventName, res, socket, emptyBuffer);
req.emit('close');
} else {
// Got Upgrade header or CONNECT method, but have no handler.
diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js
index 7248e5a135..8455b91603 100644
--- a/lib/_http_outgoing.js
+++ b/lib/_http_outgoing.js
@@ -402,7 +402,10 @@ OutgoingMessage.prototype.write = function(chunk, encoding) {
throw new TypeError('first argument must be a string or Buffer');
}
- if (chunk.length === 0) return false;
+
+ // If we get an empty string or buffer, then just do nothing, and
+ // signal the user to keep writing.
+ if (chunk.length === 0) return true;
var len, ret;
if (this.chunkedEncoding) {
diff --git a/lib/_http_server.js b/lib/_http_server.js
index bbbcb371d4..9d1adc6320 100644
--- a/lib/_http_server.js
+++ b/lib/_http_server.js
@@ -25,6 +25,9 @@ var EventEmitter = require('events').EventEmitter;
var HTTPParser = process.binding('http_parser').HTTPParser;
var assert = require('assert').ok;
+// an empty buffer for UPGRADE/CONNECT bodyHead compatibility
+var emptyBuffer = new Buffer(0);
+
var common = require('_http_common');
var parsers = common.parsers;
var freeParser = common.freeParser;
@@ -356,7 +359,9 @@ function connectionListener(socket) {
if (EventEmitter.listenerCount(self, eventName) > 0) {
// This is start + byteParsed
var bodyHead = d.slice(start + bytesParsed, end);
- self.emit(eventName, req, req.socket, bodyHead);
+
+ socket.unshift(bodyHead);
+ self.emit(eventName, req, req.socket, emptyBuffer);
} else {
// Got upgrade header or CONNECT method, but have no handler.
socket.destroy();
diff --git a/lib/buffer.js b/lib/buffer.js
index e5fa44d928..48c69f3f2b 100644
--- a/lib/buffer.js
+++ b/lib/buffer.js
@@ -339,6 +339,9 @@ Buffer.prototype.write = function(string, offset, length, encoding) {
}
encoding = String(encoding || 'utf8').toLowerCase();
+ if (string.length > 0 && (length < 0 || offset < 0))
+ throw new RangeError('attempt to write beyond buffer bounds');
+
var ret;
switch (encoding) {
case 'hex':
diff --git a/lib/net.js b/lib/net.js
index e248bdfb3c..4ada1dc787 100644
--- a/lib/net.js
+++ b/lib/net.js
@@ -298,7 +298,7 @@ Socket.prototype.listen = function() {
Socket.prototype.setTimeout = function(msecs, callback) {
if (msecs > 0 && !isNaN(msecs) && isFinite(msecs)) {
timers.enroll(this, msecs);
- timers.active(this);
+ timers._unrefActive(this);
if (callback) {
this.once('timeout', callback);
}
@@ -472,7 +472,7 @@ function onread(buffer, offset, length) {
var self = handle.owner;
assert(handle === self._handle, 'handle != self._handle');
- timers.active(self);
+ timers._unrefActive(self);
var end = offset + length;
debug('onread', process._errno, offset, length, end);
@@ -603,7 +603,7 @@ Socket.prototype._writeGeneric = function(writev, data, encoding, cb) {
this._pendingData = null;
this._pendingEncoding = '';
- timers.active(this);
+ timers._unrefActive(this);
if (!this._handle) {
this._destroy(new Error('This socket is closed.'), cb);
@@ -744,7 +744,7 @@ function afterWrite(status, handle, req) {
return;
}
- timers.active(self);
+ timers._unrefActive(self);
if (self !== process.stderr && self !== process.stdout)
debug('afterWrite call cb');
@@ -825,7 +825,7 @@ Socket.prototype.connect = function(options, cb) {
self.once('connect', cb);
}
- timers.active(this);
+ timers._unrefActive(this);
self._connecting = true;
self.writable = true;
@@ -858,7 +858,7 @@ Socket.prototype.connect = function(options, cb) {
self._destroy();
});
} else {
- timers.active(self);
+ timers._unrefActive(self);
addressType = addressType || 4;
@@ -905,7 +905,7 @@ function afterConnect(status, handle, req, readable, writable) {
if (status == 0) {
self.readable = readable;
self.writable = writable;
- timers.active(self);
+ timers._unrefActive(self);
self.emit('connect');
diff --git a/lib/timers.js b/lib/timers.js
index 1412928c51..8911e2ebf7 100644
--- a/lib/timers.js
+++ b/lib/timers.js
@@ -368,3 +368,111 @@ exports.clearImmediate = function(immediate) {
process._needImmediateCallback = false;
}
};
+
+
+// Internal APIs that need timeouts should use timers._unrefActive isntead of
+// timers.active as internal timeouts shouldn't hold the loop open
+
+var unrefList, unrefTimer;
+
+
+function unrefTimeout() {
+ var now = Date.now();
+
+ debug('unrefTimer fired');
+
+ var first;
+ while (first = L.peek(unrefList)) {
+ var diff = now - first._idleStart;
+
+ if (diff < first._idleTimeout) {
+ diff = first._idleTimeout - diff;
+ unrefTimer.start(diff, 0);
+ unrefTimer.when = now + diff;
+ debug('unrefTimer rescheudling for later');
+ return;
+ }
+
+ L.remove(first);
+
+ var domain = first.domain;
+
+ if (!first._onTimeout) continue;
+ if (domain && domain._disposed) continue;
+
+ try {
+ if (domain) domain.enter();
+ var threw = true;
+ debug('unreftimer firing timeout');
+ first._onTimeout();
+ threw = false;
+ if (domain) domain.exit();
+ } finally {
+ if (threw) process.nextTick(unrefTimeout);
+ }
+ }
+
+ debug('unrefList is empty');
+ unrefTimer.when = -1;
+}
+
+
+exports._unrefActive = function(item) {
+ var msecs = item._idleTimeout;
+ if (!msecs || msecs < 0) return;
+ assert(msecs >= 0);
+
+ L.remove(item);
+
+ if (!unrefList) {
+ debug('unrefList initialized');
+ unrefList = {};
+ L.init(unrefList);
+
+ debug('unrefTimer initialized');
+ unrefTimer = new Timer();
+ unrefTimer.unref();
+ unrefTimer.when = -1;
+ unrefTimer.ontimeout = unrefTimeout;
+ }
+
+ var now = Date.now();
+ item._idleStart = now;
+
+ if (L.isEmpty(unrefList)) {
+ debug('unrefList empty');
+ L.append(unrefList, item);
+
+ unrefTimer.start(msecs, 0);
+ unrefTimer.when = now + msecs;
+ debug('unrefTimer scheduled');
+ return;
+ }
+
+ var when = now + msecs;
+
+ debug('unrefList find where we can insert');
+
+ var cur, them;
+
+ for (cur = unrefList._idlePrev; cur != unrefList; cur = cur._idlePrev) {
+ them = cur._idleStart + cur._idleTimeout;
+
+ if (when < them) {
+ debug('unrefList inserting into middle of list');
+
+ L.append(cur, item);
+
+ if (unrefTimer.when > when) {
+ debug('unrefTimer is scheduled to fire too late, reschedule');
+ unrefTimer.start(msecs, 0);
+ unrefTimer.when = when;
+ }
+
+ return;
+ }
+ }
+
+ debug('unrefList append to end');
+ L.append(unrefList, item);
+};
diff --git a/lib/tls.js b/lib/tls.js
index cc71bd9761..4f170324b9 100644
--- a/lib/tls.js
+++ b/lib/tls.js
@@ -249,6 +249,7 @@ function CryptoStream(pair, options) {
this._pendingEncoding = '';
this._pendingCallback = null;
this._doneFlag = false;
+ this._retryAfterPartial = false;
this._resumingSession = false;
this._reading = true;
this._destroyed = false;
@@ -357,7 +358,13 @@ CryptoStream.prototype._write = function write(data, encoding, cb) {
return cb(null);
}
- assert(written === 0 || written === -1);
+ if (written !== 0 && written !== -1) {
+ assert(!this._retryAfterPartial);
+ this._retryAfterPartial = true;
+ this._write(data.slice(written), encoding, cb);
+ this._retryAfterPartial = false;
+ return;
+ }
} else {
debug('cleartext.write queue is full');
diff --git a/src/node_buffer.cc b/src/node_buffer.cc
index 4b5fee6bd3..7da3fec194 100644
--- a/src/node_buffer.cc
+++ b/src/node_buffer.cc
@@ -345,7 +345,13 @@ Handle<Value> Buffer::StringWrite(const Arguments& args) {
Local<String> str = args[0].As<String>();
- if (encoding == HEX && str->Length() % 2 != 0)
+ int length = str->Length();
+
+ if (length == 0) {
+ return scope.Close(Integer::New(0));
+ }
+
+ if (encoding == HEX && length % 2 != 0)
return ThrowTypeError("Invalid hex string");
diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js
index bd97b76e01..a465df8cc0 100644
--- a/test/simple/test-buffer.js
+++ b/test/simple/test-buffer.js
@@ -221,6 +221,16 @@ new Buffer(0);
b.write('', 1024);
b.write('', 2048);
+// throw when writing past bounds from the pool
+assert.throws(function() {
+ b.write('a', 2048);
+}, RangeError);
+
+// throw when writing to negative offset
+assert.throws(function() {
+ b.write('a', -1);
+}, RangeError);
+
// try to copy 0 bytes worth of data into an empty buffer
b.copy(new Buffer(0), 0, 0, 0);
@@ -979,3 +989,10 @@ assert.equal(Buffer.byteLength('aaaa==', 'base64'), 3);
assert.throws(function() {
Buffer('', 'buffer');
}, TypeError);
+
+assert.doesNotThrow(function () {
+ var slow = new SlowBuffer(1);
+ assert(slow.write('', Buffer.poolSize * 10) === 0);
+ var fast = new Buffer(1);
+ assert(fast.write('', Buffer.poolSize * 10) === 0);
+});
diff --git a/test/simple/test-http-client-timeout-event.js b/test/simple/test-http-client-timeout-event.js
index 1064e15ac6..e0fb16e614 100644
--- a/test/simple/test-http-client-timeout-event.js
+++ b/test/simple/test-http-client-timeout-event.js
@@ -53,8 +53,8 @@ server.listen(options.port, options.host, function() {
setTimeout(function () {
req.destroy();
assert.equal(timeout_events, 1);
- }, 10);
+ }, 100);
setTimeout(function () {
req.end();
- }, 5);
+ }, 50);
});
diff --git a/test/simple/test-http-upgrade-agent.js b/test/simple/test-http-upgrade-agent.js
index 1077a983dc..ff8e540556 100644
--- a/test/simple/test-http-upgrade-agent.js
+++ b/test/simple/test-http-upgrade-agent.js
@@ -67,7 +67,7 @@ srv.listen(common.PORT, '127.0.0.1', function() {
req.on('upgrade', function(res, socket, upgradeHead) {
// XXX: This test isn't fantastic, as it assumes that the entire response
// from the server will arrive in a single data callback
- assert.equal(upgradeHead, 'nurtzo');
+ assert.equal(upgradeHead, '');
console.log(res.headers);
var expectedHeaders = { 'hello': 'world',
@@ -78,6 +78,8 @@ srv.listen(common.PORT, '127.0.0.1', function() {
// Make sure this request got removed from the pool.
assert(!http.globalAgent.sockets.hasOwnProperty(name));
+ assert.equal(socket.read(), 'nurtzo');
+
req.on('close', function() {
socket.end();
srv.close();
diff --git a/test/simple/test-http-upgrade-client.js b/test/simple/test-http-upgrade-client.js
index 3bf5beccf5..9361e0b503 100644
--- a/test/simple/test-http-upgrade-client.js
+++ b/test/simple/test-http-upgrade-client.js
@@ -56,7 +56,7 @@ srv.listen(common.PORT, '127.0.0.1', function() {
req.on('upgrade', function(res, socket, upgradeHead) {
// XXX: This test isn't fantastic, as it assumes that the entire response
// from the server will arrive in a single data callback
- assert.equal(upgradeHead, 'nurtzo');
+ assert.equal(upgradeHead, '');
console.log(res.headers);
var expectedHeaders = {'hello': 'world',
@@ -64,6 +64,8 @@ srv.listen(common.PORT, '127.0.0.1', function() {
'upgrade': 'websocket' };
assert.deepEqual(expectedHeaders, res.headers);
+ assert.equal(socket.read(), 'nurtzo');
+
socket.end();
srv.close();
diff --git a/test/simple/test-http-upgrade-client2.js b/test/simple/test-http-upgrade-client2.js
index fa39f2a572..53f15d2939 100644
--- a/test/simple/test-http-upgrade-client2.js
+++ b/test/simple/test-http-upgrade-client2.js
@@ -30,6 +30,9 @@ server.on('upgrade', function(req, socket, head) {
socket.write('HTTP/1.1 101 Ok' + CRLF +
'Connection: Upgrade' + CRLF +
'Upgrade: Test' + CRLF + CRLF + 'head');
+ socket.on('readable', function() {
+ socket.read();
+ });
socket.on('end', function() {
socket.end();
});
@@ -50,6 +53,7 @@ server.listen(common.PORT, function() {
wasUpgrade = true;
request.removeListener('upgrade', onUpgrade);
+ socket.unref();
socket.end();
}
request.on('upgrade', onUpgrade);
@@ -75,6 +79,7 @@ server.listen(common.PORT, function() {
successCount++;
// Test pass
console.log('Pass!');
+ server.unref();
server.close();
});
});
diff --git a/test/simple/test-http-upgrade-server.js b/test/simple/test-http-upgrade-server.js
index 84525a8498..49c6f7840d 100644
--- a/test/simple/test-http-upgrade-server.js
+++ b/test/simple/test-http-upgrade-server.js
@@ -55,7 +55,7 @@ function testServer() {
'Connection: Upgrade\r\n' +
'\r\n\r\n');
- request_upgradeHead = upgradeHead;
+ request_upgradeHead = socket.read();
socket.ondata = function(d, start, end) {
var data = d.toString('utf8', start, end);
diff --git a/test/simple/test-http-zero-length-write.js b/test/simple/test-http-zero-length-write.js
new file mode 100644
index 0000000000..e68f947c32
--- /dev/null
+++ b/test/simple/test-http-zero-length-write.js
@@ -0,0 +1,93 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// 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.
+
+var common = require('../common');
+var assert = require('assert');
+
+var http = require('http');
+
+var Stream = require('stream');
+
+function getSrc() {
+ // An old-style readable stream.
+ // The Readable class prevents this behavior.
+ var src = new Stream();
+
+ // start out paused, just so we don't miss anything yet.
+ var paused = false;
+ src.pause = function() {
+ paused = true;
+ };
+ src.resume = function() {
+ paused = false;
+ };
+
+ var chunks = [ '', 'asdf', '', 'foo', '', 'bar', '' ];
+ var interval = setInterval(function() {
+ if (paused)
+ return
+
+ var chunk = chunks.shift();
+ if (chunk !== undefined) {
+ src.emit('data', chunk);
+ } else {
+ src.emit('end');
+ clearInterval(interval);
+ }
+ }, 1);
+
+ return src;
+}
+
+
+var expect = 'asdffoobar';
+
+var server = http.createServer(function(req, res) {
+ var actual = '';
+ req.setEncoding('utf8');
+ req.on('data', function(c) {
+ actual += c;
+ });
+ req.on('end', function() {
+ assert.equal(actual, expect);
+ getSrc().pipe(res);
+ });
+ server.close();
+});
+
+server.listen(common.PORT, function() {
+ var req = http.request({ port: common.PORT, method: 'POST' });
+ var actual = '';
+ req.on('response', function(res) {
+ res.setEncoding('utf8');
+ res.on('data', function(c) {
+ actual += c;
+ });
+ res.on('end', function() {
+ assert.equal(actual, expect);
+ });
+ });
+ getSrc().pipe(req);
+});
+
+process.on('exit', function(c) {
+ if (!c) console.log('ok');
+});
diff --git a/test/simple/test-net-socket-timeout-unref.js b/test/simple/test-net-socket-timeout-unref.js
new file mode 100644
index 0000000000..32aef444a9
--- /dev/null
+++ b/test/simple/test-net-socket-timeout-unref.js
@@ -0,0 +1,47 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// 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.
+
+var common = require('../common');
+var assert = require('assert');
+var net = require('net');
+
+var server = net.createServer(function (c) {
+ c.write('hello');
+ c.unref();
+});
+server.listen(common.PORT);
+server.unref();
+
+var timedout = false;
+
+[8, 5, 3, 6, 2, 4].forEach(function (T) {
+ var socket = net.createConnection(common.PORT, 'localhost');
+ socket.setTimeout(T * 1000, function () {
+ console.log(process._getActiveHandles());
+ timedout = true;
+ socket.destroy();
+ });
+ socket.unref();
+});
+
+process.on('exit', function () {
+ assert.strictEqual(timedout, false, 'Socket timeout should not hold loop open');
+});
diff --git a/test/simple/test-tls-hello-parser-failure.js b/test/simple/test-tls-hello-parser-failure.js
new file mode 100644
index 0000000000..f7e1f741fa
--- /dev/null
+++ b/test/simple/test-tls-hello-parser-failure.js
@@ -0,0 +1,50 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// 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.
+
+var common = require('../common');
+var tls = require('tls');
+var net = require('net');
+var fs = require('fs');
+var assert = require('assert');
+
+var options = {
+ key: fs.readFileSync(common.fixturesDir + '/test_key.pem'),
+ cert: fs.readFileSync(common.fixturesDir + '/test_cert.pem')
+};
+
+var server = tls.createServer(options, function(c) {
+
+}).listen(common.PORT, function() {
+ var client = net.connect(common.PORT, function() {
+ var bonkers = new Buffer(1024 * 1024);
+ bonkers.fill(42);
+ client.end(bonkers);
+ });
+
+ var once = false;
+ client.on('error', function() {
+ if (!once) {
+ once = true;
+ client.destroy();
+ server.close();
+ }
+ });
+});