var url = require('url') module.exports = function normalize (u) { var parsed = url.parse(u) // If parsing actually alters the URL, it is almost certainly an // scp-style URL, or an invalid one. var altered = u !== url.format(parsed) // git is so tricky! // if the path is like ssh://foo:22/some/path then it works, but // it needs the ssh:// // If the path is like ssh://foo:some/path then it works, but // only if you remove the ssh:// if (parsed.protocol) { parsed.protocol = parsed.protocol.replace(/^git\+/, '') } // figure out what we should check out. var checkout = parsed.hash && parsed.hash.substr(1) || 'master' parsed.hash = '' var returnedUrl if (altered) { if (u.match(/^git\+https?/) && parsed.pathname.match(/\/?:[^0-9]/)) { returnedUrl = u.replace(/^git\+(.*:[^:]+):(.*)/, '$1/$2') } else if (u.match(/^git\+file/)) { returnedUrl = u.replace(/^git\+/, '') } else { returnedUrl = u.replace(/^(?:git\+)?ssh:\/\//, '') } returnedUrl = returnedUrl.replace(/#[^#]*$/, '') } else { returnedUrl = url.format(parsed) } return { url: returnedUrl, branch: checkout } }