48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
package utils
|
|
|
|
import "strings"
|
|
|
|
// GetRepoIdentifier 返回根据仓库URL和分支生成的作者_仓库名标识符
|
|
func GetRepoIdentifier(url string, branch string) string {
|
|
url = strings.TrimSuffix(url, ".git")
|
|
url = strings.TrimSuffix(url, "/")
|
|
|
|
repoName := url[strings.LastIndex(url, "/")+1:]
|
|
|
|
author := ""
|
|
lastSlash := strings.LastIndex(url, "/")
|
|
if lastSlash != -1 {
|
|
prefix := url[:lastSlash]
|
|
if strings.Contains(prefix, ":") {
|
|
parts := strings.Split(prefix, ":")
|
|
prefix = parts[len(parts)-1]
|
|
}
|
|
lastSlashPrefix := strings.LastIndex(prefix, "/")
|
|
if lastSlashPrefix != -1 {
|
|
author = prefix[lastSlashPrefix+1:]
|
|
} else {
|
|
author = prefix
|
|
}
|
|
}
|
|
|
|
if dotIdx := strings.LastIndex(author, "."); dotIdx != -1 {
|
|
author = author[dotIdx+1:]
|
|
}
|
|
|
|
identifier := ""
|
|
if author != "" {
|
|
identifier = author + "_" + repoName
|
|
} else {
|
|
identifier = repoName
|
|
}
|
|
|
|
if branch != "" && branch != "master" && branch != "main" {
|
|
identifier = identifier + "_" + branch
|
|
}
|
|
|
|
// Replace any invalid characters for tags or paths
|
|
identifier = strings.ReplaceAll(identifier, "/", "_")
|
|
identifier = strings.ReplaceAll(identifier, ".", "_")
|
|
return identifier
|
|
}
|