forked from hound-search/hound
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
improve parsing of fully-protocoled URLs (fixes hound-search#193)
- Loading branch information
1 parent
6249481
commit 6f36892
Showing
1 changed file
with
12 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ export function UrlToRepo(repo, path, line, rev) { | |
var url = repo.url.replace(/\.git$/, ''), | ||
pattern = repo['url-pattern'], | ||
filename = path.substring(path.lastIndexOf('/') + 1), | ||
anchor = line ? ExpandVars(pattern.anchor, { line : line, filename : filename }) : ''; | ||
anchor = line ? ExpandVars(pattern.anchor, { line : line, filename : filename, repo : repo }) : ''; | ||
|
||
// Determine if the URL passed is a GitHub wiki | ||
var wikiUrl = /\.wiki$/.exec(url); | ||
|
@@ -19,16 +19,18 @@ export function UrlToRepo(repo, path, line, rev) { | |
anchor = '' // wikis do not support direct line linking | ||
} | ||
|
||
// Hacky solution to fix _some more_ of the 404's when using SSH style URLs. | ||
// This works for both github style URLs ([email protected]:username/Foo.git) and | ||
// bitbucket style URLs (ssh://[email protected]/username/Foo). | ||
// Check for ssh:// and hg:// protocol URLs | ||
// match the protocol, optionally a basic auth indicator, a | ||
// hostname, optionally a port, and then a path | ||
var ssh_protocol = /^(git|hg|ssh):\/\/([^@\/]+@)?([^:\/]+)(:[0-9]+)?\/(.*)/.exec(url); | ||
|
||
// Regex explained: Match either `git` or `hg` followed by an `@`. | ||
// Next, slurp up the hostname by reading until either a `:` or `/` is found. | ||
// Finally, grab all remaining characters. | ||
var sshParts = /(git|hg)@(.*?)(:|\/)(.*)/.exec(url); | ||
if (sshParts) { | ||
url = '//' + sshParts[2] + '/' + sshParts[4]; | ||
// Check for bare git+ssh URIs (e.g., user@hostname:path | ||
var bare_ssh = /^([^@]+)@([^:]+):(.*)/.exec(url); | ||
|
||
if (ssh_protocol) { | ||
url = '//' + ssh_protocol[3] + '/' + ssh_protocol[5]; | ||
} else if (bare_ssh) { | ||
url = '//' + bare_ssh[2] + '/' + bare_ssh[4]; | ||
} | ||
|
||
// I'm sure there is a nicer React/jsx way to do this: | ||
|