Skip to content

Commit

Permalink
improve parsing of fully-protocoled URLs (fixes hound-search#193)
Browse files Browse the repository at this point in the history
  • Loading branch information
Roguelazer committed Sep 27, 2021
1 parent 6249481 commit 6f36892
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions ui/assets/js/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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:
Expand Down

0 comments on commit 6f36892

Please sign in to comment.