mirror of https://github.com/docker/cli.git
47 lines
953 B
Go
47 lines
953 B
Go
|
package gitutil
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"github.com/moby/buildkit/util/sshutil"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
HTTPProtocol = iota + 1
|
||
|
HTTPSProtocol
|
||
|
SSHProtocol
|
||
|
GitProtocol
|
||
|
UnknownProtocol
|
||
|
)
|
||
|
|
||
|
// ParseProtocol parses a git URL and returns the remote url and protocol type
|
||
|
func ParseProtocol(remote string) (string, int) {
|
||
|
prefixes := map[string]int{
|
||
|
"http://": HTTPProtocol,
|
||
|
"https://": HTTPSProtocol,
|
||
|
"git://": GitProtocol,
|
||
|
"ssh://": SSHProtocol,
|
||
|
}
|
||
|
protocolType := UnknownProtocol
|
||
|
for prefix, potentialType := range prefixes {
|
||
|
if strings.HasPrefix(remote, prefix) {
|
||
|
remote = strings.TrimPrefix(remote, prefix)
|
||
|
protocolType = potentialType
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if protocolType == UnknownProtocol && sshutil.IsImplicitSSHTransport(remote) {
|
||
|
protocolType = SSHProtocol
|
||
|
}
|
||
|
|
||
|
// remove name from ssh
|
||
|
if protocolType == SSHProtocol {
|
||
|
parts := strings.SplitN(remote, "@", 2)
|
||
|
if len(parts) == 2 {
|
||
|
remote = parts[1]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return remote, protocolType
|
||
|
}
|