Files
admin e6956aa001 Initial commit: TaskPool React panel
- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
2026-07-26 08:43:52 +08:00

69 lines
1.8 KiB
Go

package utils
import (
"os"
"path/filepath"
"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
}
// GetActualRepoDir 返回仓库真实的物理目录
func GetActualRepoDir(targetPath, sourceURL, branch, sourceType string) string {
repoDir := targetPath
if sourceType == "git" && sourceURL != "" {
repoName := GetRepoIdentifier(sourceURL, branch)
// 检查 targetPath 是否已存在且是 Git 仓库
gitDir := filepath.Join(repoDir, ".git")
if info, err := os.Stat(repoDir); err == nil && info.IsDir() {
if _, err := os.Stat(gitDir); os.IsNotExist(err) {
// 只有当目标目录存在但不是 Git 仓库时,才追加仓库名
repoDir = filepath.Join(repoDir, repoName)
}
}
}
return repoDir
}