mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			851 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			851 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package sshutil
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"net/url"
 | 
						|
	"regexp"
 | 
						|
)
 | 
						|
 | 
						|
var gitSSHRegex = regexp.MustCompile("^([a-zA-Z0-9-_]+)@([a-zA-Z0-9-.]+):(.*?)(?:#(.*))?$")
 | 
						|
 | 
						|
func IsImplicitSSHTransport(s string) bool {
 | 
						|
	return gitSSHRegex.MatchString(s)
 | 
						|
}
 | 
						|
 | 
						|
type SCPStyleURL struct {
 | 
						|
	User *url.Userinfo
 | 
						|
	Host string
 | 
						|
 | 
						|
	Path     string
 | 
						|
	Fragment string
 | 
						|
}
 | 
						|
 | 
						|
func ParseSCPStyleURL(raw string) (*SCPStyleURL, error) {
 | 
						|
	matches := gitSSHRegex.FindStringSubmatch(raw)
 | 
						|
	if matches == nil {
 | 
						|
		return nil, errors.New("invalid scp-style url")
 | 
						|
	}
 | 
						|
	return &SCPStyleURL{
 | 
						|
		User:     url.User(matches[1]),
 | 
						|
		Host:     matches[2],
 | 
						|
		Path:     matches[3],
 | 
						|
		Fragment: matches[4],
 | 
						|
	}, nil
 | 
						|
}
 | 
						|
 | 
						|
func (url *SCPStyleURL) String() string {
 | 
						|
	base := fmt.Sprintf("%s@%s:%s", url.User.String(), url.Host, url.Path)
 | 
						|
	if url.Fragment == "" {
 | 
						|
		return base
 | 
						|
	}
 | 
						|
	return base + "#" + url.Fragment
 | 
						|
}
 |