From 7113d607c4e99ba39f9c0d3b850f4a72e8004b74 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Mon, 27 Oct 2014 22:36:22 -0400 Subject: Update github specific code to be git host agnostic --- lib/bugs.js | 41 +++++++++------------------------------- lib/cache/add-remote-git.js | 4 ++-- lib/repo.js | 46 +++++++++++---------------------------------- 3 files changed, 22 insertions(+), 69 deletions(-) (limited to 'lib') diff --git a/lib/bugs.js b/lib/bugs.js index 306d9bb4b..f1a4d44a6 100644 --- a/lib/bugs.js +++ b/lib/bugs.js @@ -1,4 +1,3 @@ - module.exports = bugs bugs.usage = "npm bugs " @@ -6,11 +5,10 @@ bugs.usage = "npm bugs " var npm = require("./npm.js") , log = require("npmlog") , opener = require("opener") - , path = require("path") - , readJson = require("read-package-json") - , npa = require("npm-package-arg") - , fs = require("fs") + , hostedGitInfo = require('hosted-git-info') + , fetchPackageMetadata = require("./fetch-package-metadata.js") , mapToRegistry = require("./utils/map-to-registry.js") + , registry = npm.registry bugs.completion = function (opts, cb) { // FIXME: there used to be registry completion here, but it stopped making @@ -19,17 +17,10 @@ bugs.completion = function (opts, cb) { } function bugs (args, cb) { - var n = args.length && npa(args[0]).name || "." - fs.stat(n, function (er, s) { - if (er) { - if (er.code === "ENOENT") return callRegistry(n, cb) - 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) }) } @@ -43,10 +34,8 @@ function getUrlAndOpen (d, cb) { if (Array.isArray(repo)) repo = repo.shift() if (repo.hasOwnProperty("url")) repo = repo.url log.verbose("bugs", "repository", repo) - if (repo && repo.match(/^(https?:\/\/|git(:\/\/|@))github.com/)) { - url = repo.replace(/^git(@|:\/\/)/, "https://") - .replace(/^https?:\/\/github.com:/, "https://github.com/") - .replace(/\.git$/, "")+"/issues" + if (bugs && hostedGitInfo.fromUrl(bugs)) { + url = hostedGitInfo.fromUrl(bugs).bugs() } } if (!url) { @@ -55,15 +44,3 @@ function getUrlAndOpen (d, cb) { log.silly("bugs", "url", url) opener(url, { command: npm.config.get("browser") }, cb) } - -function callRegistry (name, cb) { - mapToRegistry(name, npm.config, function (er, uri, auth) { - if (er) return cb(er) - - npm.registry.get(uri + "/latest", { auth : auth }, function (er, d) { - if (er) return cb(er) - - getUrlAndOpen(d, cb) - }) - }) -} diff --git a/lib/cache/add-remote-git.js b/lib/cache/add-remote-git.js index 4d58fd902..cecf9bb77 100644 --- a/lib/cache/add-remote-git.js +++ b/lib/cache/add-remote-git.js @@ -47,7 +47,7 @@ function addRemoteGit (uri, _cb) { if (parsed) { // normalize GitHub syntax to org/repo (for now) var from - if (parsed.type === 'github' && parsed.default === 'shortcut') { + if (parsed.type === 'github' && parsed.getDefaultRepresentation() === 'shortcut') { from = parsed.path() } else { from = parsed.toString() @@ -56,7 +56,7 @@ function addRemoteGit (uri, _cb) { log.verbose('addRemoteGit', from, 'is a repository hosted by', parsed.type) // prefer explicit URLs to pushing everything through shortcuts - if (parsed.default !== 'shortcut') { + if (parsed.getDefaultRepresentation() !== 'shortcut') { return tryClone(from, parsed.toString(), false, cb) } 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 " 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) { -- cgit v1.2.3