Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit 5bc503f

Browse files
committed
clients/common: Endpoint SCP like support
1 parent 890a0e3 commit 5bc503f

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

clients/common/common.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io"
88
"io/ioutil"
99
"net/url"
10+
"regexp"
1011
"strings"
1112

1213
"gopkg.in/src-d/go-git.v4/core"
@@ -36,7 +37,14 @@ type AuthMethod interface {
3637

3738
type Endpoint url.URL
3839

40+
var (
41+
isSchemeRegExp = regexp.MustCompile("^[^:]+://")
42+
scpLikeUrlRegExp = regexp.MustCompile("^(?P<user>[^@]+@)?(?P<host>[^:]+):/?(?P<path>.+)$")
43+
)
44+
3945
func NewEndpoint(endpoint string) (Endpoint, error) {
46+
endpoint = transformSCPLikeIfNeeded(endpoint)
47+
4048
u, err := url.Parse(endpoint)
4149
if err != nil {
4250
return Endpoint{}, core.NewPermanentError(err)
@@ -51,6 +59,15 @@ func NewEndpoint(endpoint string) (Endpoint, error) {
5159
return Endpoint(*u), nil
5260
}
5361

62+
func transformSCPLikeIfNeeded(endpoint string) string {
63+
if !isSchemeRegExp.MatchString(endpoint) && scpLikeUrlRegExp.MatchString(endpoint) {
64+
m := scpLikeUrlRegExp.FindStringSubmatch(endpoint)
65+
return fmt.Sprintf("ssh://%s%s/%s", m[1], m[2], m[3])
66+
}
67+
68+
return endpoint
69+
}
70+
5471
func (e *Endpoint) String() string {
5572
u := url.URL(*e)
5673
return u.String()

clients/common/common_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ func (s *SuiteCommon) TestNewEndpoint(c *C) {
2222
c.Assert(e.String(), Equals, "ssh://[email protected]/user/repository.git")
2323
}
2424

25+
func (s *SuiteCommon) TestNewEndpointSCPLike(c *C) {
26+
e, err := NewEndpoint("[email protected]:user/repository.git")
27+
c.Assert(err, IsNil)
28+
c.Assert(e.String(), Equals, "ssh://[email protected]/user/repository.git")
29+
}
30+
2531
func (s *SuiteCommon) TestNewEndpointWrongForgat(c *C) {
2632
e, err := NewEndpoint("foo")
2733
c.Assert(err, Not(IsNil))

0 commit comments

Comments
 (0)