diff options
author | J. Fernando Sánchez <balkian@gmail.com> | 2017-09-28 17:21:16 +0200 |
---|---|---|
committer | J. Fernando Sánchez <balkian@gmail.com> | 2017-09-28 17:35:46 +0200 |
commit | 04765bb11cbadf22ed01ea12cb6f2834e9ee1ec5 (patch) | |
tree | f7166ce541db95311b43f00c075edc3c588b2fe5 /plumbing/transport/common.go | |
parent | 7d1595faba108f5c6c9b678288eb5092ba555bd1 (diff) | |
download | go-git-04765bb11cbadf22ed01ea12cb6f2834e9ee1ec5.tar.gz |
Adds port to SCP Endpoints
The port for SCP-like URLs was hardcoded to 22.
This commit modifies the regex to find a port (optional), and adds a new test
case that covers this scenario.
Diffstat (limited to 'plumbing/transport/common.go')
-rw-r--r-- | plumbing/transport/common.go | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/plumbing/transport/common.go b/plumbing/transport/common.go index 2088500..202c498 100644 --- a/plumbing/transport/common.go +++ b/plumbing/transport/common.go @@ -187,6 +187,7 @@ func (e urlEndpoint) Path() string { type scpEndpoint struct { user string host string + port string path string } @@ -194,8 +195,14 @@ func (e *scpEndpoint) Protocol() string { return "ssh" } func (e *scpEndpoint) User() string { return e.user } func (e *scpEndpoint) Password() string { return "" } func (e *scpEndpoint) Host() string { return e.host } -func (e *scpEndpoint) Port() int { return 22 } func (e *scpEndpoint) Path() string { return e.path } +func (e *scpEndpoint) Port() int { + i, err := strconv.Atoi(e.port) + if err != nil { + return 22 + } + return i +} func (e *scpEndpoint) String() string { var user string @@ -220,7 +227,7 @@ func (e *fileEndpoint) String() string { return e.path } var ( isSchemeRegExp = regexp.MustCompile(`^[^:]+://`) - scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P<user>[^@]+)@)?(?P<host>[^:\s]+):(?P<path>[^\\].*)$`) + scpLikeUrlRegExp = regexp.MustCompile(`^(?:(?P<user>[^@]+)@)?(?P<host>[^:\s]+):(?:(?P<port>[0-9]+):)?(?P<path>[^\\].*)$`) ) func parseSCPLike(endpoint string) (Endpoint, bool) { @@ -232,7 +239,8 @@ func parseSCPLike(endpoint string) (Endpoint, bool) { return &scpEndpoint{ user: m[1], host: m[2], - path: m[3], + port: m[3], + path: m[4], }, true } |