git 逻辑

This commit is contained in:
2026-06-10 15:30:52 +08:00
parent 41f2a84979
commit 023ab2f30e
17 changed files with 221 additions and 64 deletions
+26 -2
View File
@@ -3,6 +3,7 @@ package git
import (
"context"
"errors"
"os"
"os/exec"
"strings"
"testing"
@@ -11,6 +12,17 @@ import (
"github.com/stretchr/testify/require"
)
// envValue 从 "K=V" 形式的 env 列表中取出 key 对应的 value。
func envValue(env []string, key string) string {
prefix := key + "="
for _, e := range env {
if strings.HasPrefix(e, prefix) {
return strings.TrimPrefix(e, prefix)
}
}
return ""
}
func TestDefaultRunner_exec_BinaryNotFound(t *testing.T) {
t.Parallel()
r := NewDefaultRunner(Config{Binary: "this-is-not-a-real-binary-xyz"})
@@ -75,9 +87,21 @@ func TestCredentialEnv_PAT(t *testing.T) {
defer cleanup()
joined := strings.Join(env, "\n")
require.Contains(t, joined, "GIT_ASKPASS=")
require.Contains(t, joined, "GIT_PAT_USERNAME=alice")
require.Contains(t, joined, "GIT_PAT_TOKEN=tok")
require.Contains(t, joined, "GIT_TERMINAL_PROMPT=0")
// 凭据通过 0600 临时文件下发(避免出现在进程 env 中),env 仅暴露文件路径,
// 文件内容须等于用户名/令牌原文。
require.Contains(t, joined, "GIT_PAT_USERNAME_FILE=")
require.Contains(t, joined, "GIT_PAT_TOKEN_FILE=")
userFile := envValue(env, "GIT_PAT_USERNAME_FILE")
tokenFile := envValue(env, "GIT_PAT_TOKEN_FILE")
require.NotEmpty(t, userFile)
require.NotEmpty(t, tokenFile)
userData, err := os.ReadFile(userFile)
require.NoError(t, err)
require.Equal(t, "alice", string(userData))
tokenData, err := os.ReadFile(tokenFile)
require.NoError(t, err)
require.Equal(t, "tok", string(tokenData))
}
func TestCredentialEnv_SSHKey(t *testing.T) {