git-sync-web 自动提交 2026-09-09 13:46:40
This commit is contained in:
@@ -189,3 +189,40 @@ func resolveDone(path string, rebase bool) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// changedFiles 解析 git status --porcelain,返回 路径 -> 状态标记(M/A/D/?),
|
||||
// 供网页端文件树展示每个文件的改动状态。
|
||||
func changedFiles(path string) map[string]string {
|
||||
out, err := gitRun(path, 30*time.Second, "status", "--porcelain")
|
||||
m := map[string]string{}
|
||||
if err != nil {
|
||||
return m
|
||||
}
|
||||
for _, line := range strings.Split(out, "\n") {
|
||||
if len(line) < 4 {
|
||||
continue
|
||||
}
|
||||
code := line[:2]
|
||||
p := strings.TrimSpace(line[3:])
|
||||
// 重命名/复制:取目标路径
|
||||
if i := strings.Index(p, "->"); i >= 0 {
|
||||
p = strings.TrimSpace(p[i+2:])
|
||||
}
|
||||
// git 对含特殊字符的路径会加引号
|
||||
p = strings.Trim(p, `"`)
|
||||
if p == "" {
|
||||
continue
|
||||
}
|
||||
switch {
|
||||
case code == "??":
|
||||
m[p] = "?"
|
||||
case code[0] == 'A' || code[0] == 'C':
|
||||
m[p] = "A"
|
||||
case code[0] == 'D' || code[1] == 'D':
|
||||
m[p] = "D"
|
||||
default:
|
||||
m[p] = "M" // 含 UU/AU 冲突状态,统一显示为已修改
|
||||
}
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user