You've already forked agentic-coding-workflow
git workspace逻辑
This commit is contained in:
@@ -23,7 +23,13 @@ func (e *GitError) Error() string {
|
||||
for i, a := range e.Args {
|
||||
redacted[i] = redactURLUserinfo(a)
|
||||
}
|
||||
return fmt.Sprintf("git %v: exit %d: %s", redacted, e.ExitCode, e.Stderr)
|
||||
// stderr 为空说明进程多半没跑起来(chdir 失败、二进制缺失、超时被 kill),
|
||||
// 此时 Cause 才是唯一有效信息,不能丢。
|
||||
detail := e.Stderr
|
||||
if detail == "" && e.Cause != nil {
|
||||
detail = e.Cause.Error()
|
||||
}
|
||||
return fmt.Sprintf("git %v: exit %d: %s", redacted, e.ExitCode, detail)
|
||||
}
|
||||
|
||||
// redactURLUserinfo 剥离形如 scheme://user[:pass]@host 中的 userinfo,
|
||||
|
||||
@@ -54,6 +54,20 @@ func TestDefaultRunner_exec_Timeout(t *testing.T) {
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestGitError_Error_EmptyStderrFallsBackToCause(t *testing.T) {
|
||||
// 进程没跑起来时(chdir 失败 / 二进制缺失)stderr 为空,Error() 必须带上
|
||||
// Cause,否则落库的 last_sync_error 只剩 "exit -1: " 无法定位。
|
||||
t.Parallel()
|
||||
ge := &GitError{Args: []string{"fetch"}, ExitCode: -1,
|
||||
Cause: errors.New("chdir /data/x: no such file or directory")}
|
||||
require.Contains(t, ge.Error(), "no such file or directory")
|
||||
// stderr 非空时仍以 stderr 为准,不重复拼 Cause。
|
||||
ge2 := &GitError{Args: []string{"fetch"}, ExitCode: 128,
|
||||
Stderr: "fatal: boom", Cause: errors.New("exit status 128")}
|
||||
require.Contains(t, ge2.Error(), "fatal: boom")
|
||||
require.NotContains(t, ge2.Error(), "exit status 128")
|
||||
}
|
||||
|
||||
func TestIsAuthError(t *testing.T) {
|
||||
t.Parallel()
|
||||
cases := []struct {
|
||||
|
||||
Reference in New Issue
Block a user