diff options
| author | 2026-04-02 06:23:30 +0000 | |
|---|---|---|
| committer | 2026-04-02 06:28:39 +0000 | |
| commit | a041d523de389b65b98a5373a8034041db2a8d83 (patch) | |
| tree | 7b423dc735f463be616045f2c3c2095a7737aca7 /internal/testgit/repo_pack_objects_reader.go | |
| parent | research: Add dynamic pack resources (diff) | |
| signature | No signature | |
*: Remove
Diffstat (limited to 'internal/testgit/repo_pack_objects_reader.go')
| -rw-r--r-- | internal/testgit/repo_pack_objects_reader.go | 94 |
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 - }, - } -} |
