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
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user