summaryrefslogtreecommitdiffstats
path: root/lib/utils/git.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-01-26 10:12:26 +0100
committerSamy Pessé <samypesse@gmail.com>2015-01-26 10:12:26 +0100
commit93bc86a0fe65943ac2ce0af28a8d81d438d17dbe (patch)
treec46871b95585f0fca2ce354c00baf19403fd464d /lib/utils/git.js
parent75b217fc246be108368ed0e3c3adda3dc85fd615 (diff)
downloadgitbook-93bc86a0fe65943ac2ce0af28a8d81d438d17dbe.zip
gitbook-93bc86a0fe65943ac2ce0af28a8d81d438d17dbe.tar.gz
gitbook-93bc86a0fe65943ac2ce0af28a8d81d438d17dbe.tar.bz2
Fix git url parsing for content references
Diffstat (limited to 'lib/utils/git.js')
-rw-r--r--lib/utils/git.js26
1 files changed, 10 insertions, 16 deletions
diff --git a/lib/utils/git.js b/lib/utils/git.js
index f7f63e7..9a669db 100644
--- a/lib/utils/git.js
+++ b/lib/utils/git.js
@@ -4,8 +4,8 @@ var url = require("url");
var tmp = require("tmp");
var path = require("path");
var crc = require("crc");
-var ngu = require('normalize-git-url');
var exec = Q.denodeify(require("child_process").exec);
+var URI = require("URIjs");
var fs = require("./fs");
@@ -25,31 +25,25 @@ function validateSha(str) {
// Parse and extract infos
function parseGitUrl(giturl) {
- var ref, parts;
+ var ref, uri, fileParts, filepath;
if (!checkGitUrl(giturl)) return null;
giturl = giturl.slice(GIT_PREFIX.length);
- if (!url.parse(giturl).protocol) {
- giturl = "ssh://"+giturl;
- }
-
- var normalized = ngu(giturl);
-
- parts = url.parse(normalized.url);
- ref = normalized.branch;
+ uri = new URI(giturl);
+ ref = uri.fragment() || "master";
+ uri.fragment(null);
// Extract file inside the repo (after the .git)
- var fileParts = parts.pathname.split(".git");
- var filepath = fileParts.length > 1? fileParts.slice(1).join(".git") : "";
+ fileParts =uri.path().split(".git");
+ filepath = fileParts.length > 1? fileParts.slice(1).join(".git") : "";
if (filepath[0] == "/") filepath = filepath.slice(1);
- // Rebuild
- parts.pathname = _.first(fileParts)+".git";
- var githost = url.format(parts);
+ // Recreate pathname without the real filename
+ uri.path(_.first(fileParts)+".git");
return {
- host: githost,
+ host: uri.toString(),
ref: ref || "master",
filepath: filepath
};