Bugfix for --no-registry in nodejs-v0.12.2

diff -u -r node-v0.12.2_def/deps/npm/lib/cache/caching-client.js node-v0.12.2/deps/npm/lib/cache/caching-client.js
--- node-v0.12.2_def/deps/npm/lib/cache/caching-client.js	2015-04-01 01:13:01.000000000 +0300
+++ node-v0.12.2/deps/npm/lib/cache/caching-client.js	2015-05-18 00:47:10.738599686 +0300
@@ -67,6 +67,22 @@
   var cacheBase = cacheFile(npm.config.get("cache"))(uri)
   var cachePath = path.join(cacheBase, ".cache.json")
 
+  if (parsed.host === "noregistry") (function() {
+    var stat = null
+    var file = npm.config.get("cache") + parsed.pathname + "/.cache.json"
+    try {
+      stat = fs.statSync(cachePath)
+    } catch (ex) {}
+    if (!stat) try {
+      stat = fs.statSync(file) 
+      cachePath = file
+    } catch (ex) {
+      stat = "Registry not defined and registry files not found: \"" +
+             cachePath + "\", \"" + file + "\"."
+      throw new Error(stat)
+    }
+  })()
+
   // If the GET is part of a write operation (PUT or DELETE), then
   // skip past the cache entirely, but still save the results.
   if (uri.match(/\?write=true$/)) {
@@ -83,12 +99,17 @@
         }
         catch (ex) {
           data = null
+          if (parsed.host === "noregistry")
+            throw new Error("File \"" + cachePath+"\"" + " corrupted.")
         }
 
         params.stat = stat
         params.data = data
 
-        get_.call(client, uri, cachePath, params, cb)
+        if (parsed.host === "noregistry")
+          cb(null, data, JSON.stringify(data), { statusCode : 304 })
+        else
+          get_.call(client, uri, cachePath, params, cb)
       })
     }
     else {
diff -u -r node-v0.12.2_def/deps/npm/lib/utils/map-to-registry.js node-v0.12.2/deps/npm/lib/utils/map-to-registry.js
--- node-v0.12.2_def/deps/npm/lib/utils/map-to-registry.js	2015-04-01 01:13:01.000000000 +0300
+++ node-v0.12.2/deps/npm/lib/utils/map-to-registry.js	2015-05-18 01:15:10.030569613 +0300
@@ -45,6 +45,8 @@
 
   log.silly("mapToRegistry", "registry", registry)
 
+  if (!registry) return cb(null, "http://noregistry/" + name, {})
+
   var auth = config.getCredentialsByURI(registry)
 
   // normalize registry URL so resolution doesn't drop a piece of registry URL
