From b8bd9e766c1940ea2568e94577a7c56f8ff0d2f3 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 7 Mar 2026 23:31:13 +0800 Subject: internal/testgit: Add more execution helpers --- internal/testgit/repo_run_extra_files.go | 55 ++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 internal/testgit/repo_run_extra_files.go diff --git a/internal/testgit/repo_run_extra_files.go b/internal/testgit/repo_run_extra_files.go new file mode 100644 index 00000000..4629c872 --- /dev/null +++ b/internal/testgit/repo_run_extra_files.go @@ -0,0 +1,55 @@ +package testgit + +import ( + "bytes" + "context" + "os" + "os/exec" + "testing" +) + +// RunWithExtraFilesE executes git with inherited extra files and returns split +// stdout/stderr plus any command error. +func (testRepo *TestRepo) RunWithExtraFilesE( + tb testing.TB, + extraFiles []*os.File, + args ...string, +) ([]byte, []byte, error) { + tb.Helper() + + return testRepo.RunWithExtraFilesEnvContextE( + tb, + context.Background(), + nil, + extraFiles, + args..., + ) +} + +// RunWithExtraFilesEnvContextE executes git with inherited extra files, extra +// environment, and context cancellation, returning split stdout/stderr plus any +// command error. +func (testRepo *TestRepo) RunWithExtraFilesEnvContextE( + tb testing.TB, + ctx context.Context, + extraEnv []string, + extraFiles []*os.File, + args ...string, +) ([]byte, []byte, error) { + tb.Helper() + + cmd := exec.CommandContext(ctx, "git", args...) //#nosec G204 + cmd.Dir = testRepo.dir + cmd.Env = testRepo.env + cmd.Env = append(cmd.Env, extraEnv...) + cmd.ExtraFiles = append([]*os.File(nil), extraFiles...) + + var stdout, stderr bytes.Buffer + + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + err := cmd.Run() + + return stdout.Bytes(), stderr.Bytes(), err +} -- cgit v1.3.1-10-gc9f91