diff options
Diffstat (limited to 'lib/repo.js')
-rw-r--r-- | lib/repo.js | 46 |
1 files changed, 11 insertions, 35 deletions
diff --git a/lib/repo.js b/lib/repo.js index 1b0454773..b6c1b2833 100644 --- a/lib/repo.js +++ b/lib/repo.js @@ -1,18 +1,14 @@ - module.exports = repo repo.usage = "npm repo <pkgname>" var npm = require("./npm.js") , opener = require("opener") - , github = require("github-url-from-git") - , githubUserRepo = require("github-url-from-username-repo") - , path = require("path") - , readJson = require("read-package-json") - , fs = require("fs") + , hostedGitInfo = require("hosted-git-info") , url_ = require("url") + , fetchPackageMetadata = require("./fetch-package-metadata.js") , mapToRegistry = require("./utils/map-to-registry.js") - , npa = require("npm-package-arg") + , registry = npm.registry repo.completion = function (opts, cb) { // FIXME: there used to be registry completion here, but it stopped making @@ -21,15 +17,10 @@ repo.completion = function (opts, cb) { } function repo (args, cb) { - var n = args.length && npa(args[0]).name || "." - fs.stat(n, function (er, s) { - if (er && er.code === "ENOENT") return callRegistry(n, cb) - else if (er) return cb(er) - if (!s.isDirectory()) return callRegistry(n, cb) - readJson(path.resolve(n, "package.json"), function (er, d) { - if (er) return cb(er) - getUrlAndOpen(d, cb) - }) + var n = args.length ? args[0] : "." + fetchPackageMetadata(n, ".", function (er, d) { + if (er) return cb(er) + getUrlAndOpen(d, cb) }) } @@ -38,30 +29,15 @@ function getUrlAndOpen (d, cb) { if (!r) return cb(new Error("no repository")) // XXX remove this when npm@v1.3.10 from node 0.10 is deprecated // from https://github.com/npm/npm-www/issues/418 - if (githubUserRepo(r.url)) - r.url = githubUserRepo(r.url) + var info = hostedGitInfo.fromUrl(r.url) + url = info ? info.browse() : unknownHostedUrl(r.url) - var url = (r.url && ~r.url.indexOf("github")) - ? github(r.url) - : nonGithubUrl(r.url) + if (!url) return cb(new Error("no repository: could not get url")) - if (!url) - return cb(new Error("no repository: could not get url")) opener(url, { command: npm.config.get("browser") }, cb) } -function callRegistry (n, cb) { - mapToRegistry(n, npm.config, function (er, uri) { - if (er) return cb(er) - - npm.registry.get(uri + "/latest", { timeout : 3600 }, function (er, d) { - if (er) return cb(er) - getUrlAndOpen(d, cb) - }) - }) -} - -function nonGithubUrl (url) { +function unknownHostedUrl (url) { try { var idx = url.indexOf("@") if (idx !== -1) { |