shithub: furgit

Download patch

ref: b8bd9e766c1940ea2568e94577a7c56f8ff0d2f3
parent: bcff6469624b18f306f3686ac5e0d7e7a72406dc
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 18:31:13 EST 2026

internal/testgit: Add more execution helpers

--- /dev/null
+++ b/internal/testgit/repo_run_extra_files.go
@@ -1,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
+}
--