diff options
Diffstat (limited to 'clients/common/common.go')
-rw-r--r-- | clients/common/common.go | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/clients/common/common.go b/clients/common/common.go index c8dc7de..9099016 100644 --- a/clients/common/common.go +++ b/clients/common/common.go @@ -7,6 +7,7 @@ import ( "io" "io/ioutil" "net/url" + "regexp" "strings" "gopkg.in/src-d/go-git.v4/core" @@ -36,7 +37,14 @@ type AuthMethod interface { type Endpoint url.URL +var ( + isSchemeRegExp = regexp.MustCompile("^[^:]+://") + scpLikeUrlRegExp = regexp.MustCompile("^(?P<user>[^@]+@)?(?P<host>[^:]+):/?(?P<path>.+)$") +) + func NewEndpoint(endpoint string) (Endpoint, error) { + endpoint = transformSCPLikeIfNeeded(endpoint) + u, err := url.Parse(endpoint) if err != nil { return Endpoint{}, core.NewPermanentError(err) @@ -51,6 +59,15 @@ func NewEndpoint(endpoint string) (Endpoint, error) { return Endpoint(*u), nil } +func transformSCPLikeIfNeeded(endpoint string) string { + if !isSchemeRegExp.MatchString(endpoint) && scpLikeUrlRegExp.MatchString(endpoint) { + m := scpLikeUrlRegExp.FindStringSubmatch(endpoint) + return fmt.Sprintf("ssh://%s%s/%s", m[1], m[2], m[3]) + } + + return endpoint +} + func (e *Endpoint) String() string { u := url.URL(*e) return u.String() |