Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

72 lines
2.0 KiB
Go

package agent
import (
"context"
"os/exec"
"testing"
)
func runGitForTest(t *testing.T, dir string, args ...string) {
t.Helper()
cmd := exec.Command("git", args...)
cmd.Dir = dir
// Scope git strictly to dir: drop any ambient GIT_DIR/GIT_WORK_TREE (reusing
// the production scoping) and stop upward repo discovery, so the helper can
// never reach or mutate an outer repository even when run inside one.
cmd.Env = append(gitEnvScopedToDir(),
"GIT_CEILING_DIRECTORIES="+dir,
"GIT_AUTHOR_NAME=t", "GIT_AUTHOR_EMAIL=t@t",
"GIT_COMMITTER_NAME=t", "GIT_COMMITTER_EMAIL=t@t",
)
if out, err := cmd.CombinedOutput(); err != nil {
t.Fatalf("git %v: %v\n%s", args, err, out)
}
}
func TestListGitBranches(t *testing.T) {
t.Parallel()
if _, err := exec.LookPath("git"); err != nil {
t.Skip("git not available")
}
dir := t.TempDir()
runGitForTest(t, dir, "init", "-q", "-b", "main")
runGitForTest(t, dir, "commit", "-q", "--allow-empty", "-m", "init")
runGitForTest(t, dir, "branch", "feature/x")
got, err := listGitBranches(context.Background(), dir)
if err != nil {
t.Fatalf("listGitBranches: %v", err)
}
if got.CurrentBranch != "main" {
t.Fatalf("currentBranch = %q, want main", got.CurrentBranch)
}
want := map[string]bool{"main": true, "feature/x": true}
if len(got.Branches) != len(want) {
t.Fatalf("branches = %#v, want %v", got.Branches, want)
}
for _, b := range got.Branches {
if !want[b] {
t.Fatalf("unexpected branch %q in %#v", b, got.Branches)
}
}
}
func TestListGitBranchesNonRepoDegradesToEmpty(t *testing.T) {
t.Parallel()
got, err := listGitBranches(context.Background(), t.TempDir())
if err != nil {
t.Fatalf("listGitBranches non-repo returned error: %v", err)
}
if len(got.Branches) != 0 || got.CurrentBranch != "" {
t.Fatalf("non-repo result = %#v, want empty", got)
}
}
func TestListGitBranchesEmptyCwd(t *testing.T) {
t.Parallel()
got, err := listGitBranches(context.Background(), " ")
if err != nil || len(got.Branches) != 0 {
t.Fatalf("empty cwd result = %#v err=%v, want empty", got, err)
}
}