You've already forked agentic-coding-workflow
bugfix
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package git
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
)
|
||||
|
||||
// ListTrackedFiles 返回 dir 仓库中被 git 跟踪的文件(git ls-files -z),
|
||||
// 路径相对 worktree 根,NUL 分隔以正确处理含空格/特殊字符的文件名。
|
||||
// 仅跟踪文件 —— 忽略 .gitignore / 未跟踪 / vendored,避免索引器遍历海量无关文件。
|
||||
func (r *DefaultRunner) ListTrackedFiles(ctx context.Context, dir string) ([]string, error) {
|
||||
ctx, cancel := withCtx(ctx, r.cfg.OpsTimeout)
|
||||
defer cancel()
|
||||
out, _, err := r.exec(ctx, dir, nil, "ls-files", "-z")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return parseNULList(out), nil
|
||||
}
|
||||
|
||||
// parseNULList 解析 NUL 分隔的文件列表(git ls-files -z)。空输入返回 nil。
|
||||
func parseNULList(buf []byte) []string {
|
||||
if len(buf) == 0 {
|
||||
return nil
|
||||
}
|
||||
var out []string
|
||||
for _, rec := range bytes.Split(buf, []byte{0}) {
|
||||
if len(rec) == 0 {
|
||||
continue
|
||||
}
|
||||
out = append(out, string(rec))
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user