Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRebecca Turner <turner@mikomi.org>2014-10-28 05:36:22 +0300
committerRebecca Turner <me@re-becca.org>2015-06-26 03:26:37 +0300
commit7113d607c4e99ba39f9c0d3b850f4a72e8004b74 (patch)
tree0677f0b3fd9742c99e376f556da50422e536f45f
parent0608ec80f420bcce4bda32e7935311063a271e10 (diff)
Update github specific code to be git host agnostic
-rw-r--r--lib/bugs.js41
-rw-r--r--lib/cache/add-remote-git.js4
-rw-r--r--lib/repo.js46
3 files changed, 22 insertions, 69 deletions
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 <pkgname>"
@@ -6,11 +5,10 @@ bugs.usage = "npm bugs <pkgname>"
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 <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) {