Creating the cache key did not handle SCP properly
diff --git a/repo/cache.go b/repo/cache.go index 43ec644..babd1c2 100644 --- a/repo/cache.go +++ b/repo/cache.go
@@ -7,9 +7,9 @@ "net/url" "os" "path/filepath" + "regexp" "strings" "time" - //"github.com/Masterminds/glide/msg" ) @@ -36,22 +36,34 @@ } */ +// scpSyntaxRe matches the SCP-like addresses used to access repos over SSH. +var scpSyntaxRe = regexp.MustCompile(`^([a-zA-Z0-9_]+)@([a-zA-Z0-9._-]+):(.*)$`) + // Pass in a repo location and get a cache key from it. func cacheCreateKey(repo string) (string, error) { - // A url needs a scheme. A git repo such as - // git@github.com:Masterminds/cookoo.git reworked to the url parser. - c := strings.Contains(repo, "://") - if !c { - repo = "ssh://" + repo + var u *url.URL + var err error + var strip bool + if m := scpSyntaxRe.FindStringSubmatch(repo); m != nil { + // Match SCP-like syntax and convert it to a URL. + // Eg, "git@github.com:user/repo" becomes + // "ssh://git@github.com/user/repo". + u = &url.URL{ + Scheme: "ssh", + User: url.User(m[1]), + Host: m[2], + Path: "/" + m[3], + } + strip = true + } else { + u, err = url.Parse(repo) + if err != nil { + return "", err + } } - u, err := url.Parse(repo) - if err != nil { - return "", err - } - - if !c { + if strip { u.Scheme = "" }