aboutsummaryrefslogtreecommitdiff
path: root/internal/testgit/repo_pack_objects_reader.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-04-02 06:23:30 +0000
committerGravatar Runxi Yu2026-04-02 06:28:39 +0000
commita041d523de389b65b98a5373a8034041db2a8d83 (patch)
tree7b423dc735f463be616045f2c3c2095a7737aca7 /internal/testgit/repo_pack_objects_reader.go
parentresearch: Add dynamic pack resources (diff)
signatureNo signature
*: Remove
Diffstat (limited to 'internal/testgit/repo_pack_objects_reader.go')
-rw-r--r--internal/testgit/repo_pack_objects_reader.go94
1 files changed, 0 insertions, 94 deletions
diff --git a/internal/testgit/repo_pack_objects_reader.go b/internal/testgit/repo_pack_objects_reader.go
deleted file mode 100644
index dc997514..00000000
--- a/internal/testgit/repo_pack_objects_reader.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package testgit
-
-import (
- "fmt"
- "io"
- "os/exec"
- "strings"
- "sync"
- "testing"
-)
-
-// packObjectsReadCloser wraps a pipe reader and process wait fn.
-type packObjectsReadCloser struct {
- reader io.ReadCloser
- wait func() error
- once sync.Once
-}
-
-// Read proxies reads to the wrapped reader.
-func (reader *packObjectsReadCloser) Read(dst []byte) (int, error) {
- return reader.reader.Read(dst)
-}
-
-// Close closes the stream and waits for the underlying process.
-func (reader *packObjectsReadCloser) Close() error {
- var out error
-
- reader.once.Do(func() {
- errClose := reader.reader.Close()
- errWait := reader.wait()
-
- if errClose != nil {
- out = errClose
-
- return
- }
-
- out = errWait
- })
-
- return out
-}
-
-// PackObjectsReader streams `git pack-objects --stdout --revs` output.
-func (testRepo *TestRepo) PackObjectsReader(tb testing.TB, revs []string, thin bool) io.ReadCloser {
- tb.Helper()
-
- args := []string{"pack-objects", "--stdout", "--revs"}
- if thin {
- args = append(args, "--thin")
- }
-
- //nolint:noctx
- cmd := exec.Command("git", args...) //#nosec G204
- cmd.Dir = testRepo.dir
- cmd.Env = testRepo.env
- cmd.Stdin = strings.NewReader(strings.Join(revs, "\n") + "\n")
-
- pr, pw := io.Pipe()
- cmd.Stdout = pw
- stderr := &strings.Builder{}
- cmd.Stderr = stderr
-
- waitDone := make(chan error, 1)
-
- go func() {
- err := cmd.Start()
- if err != nil {
- _ = pw.CloseWithError(fmt.Errorf("git %v start failed: %w", args, err))
-
- waitDone <- nil
-
- return
- }
-
- err = cmd.Wait()
- if err != nil {
- _ = pw.CloseWithError(fmt.Errorf("git %v failed: %w\n%s", args, err, stderr.String()))
- } else {
- _ = pw.Close()
- }
-
- waitDone <- nil
- }()
-
- return &packObjectsReadCloser{
- reader: pr,
- wait: func() error {
- <-waitDone
-
- return nil
- },
- }
-}