Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'internal/packobjects/pack-objects-bundle.go')
-rw-r--r--internal/packobjects/pack-objects-bundle.go24
1 files changed, 14 insertions, 10 deletions
diff --git a/internal/packobjects/pack-objects-bundle.go b/internal/packobjects/pack-objects-bundle.go
index 9a7af2027..5cfcd5467 100644
--- a/internal/packobjects/pack-objects-bundle.go
+++ b/internal/packobjects/pack-objects-bundle.go
@@ -8,6 +8,7 @@ import (
"io"
"os"
"os/exec"
+ "path/filepath"
"regexp"
"strings"
@@ -19,7 +20,7 @@ const bundleFileName = "gitaly/clone.bundle"
var shaRegex = regexp.MustCompile(`\A[0-9a-f]{40}\z`)
-func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) error {
+func PackObjects(ctx context.Context, cwd string, args []string, stdin io.Reader, stdout, stderr io.Writer) error {
request := &bytes.Buffer{}
scanner := bufio.NewScanner(io.TeeReader(stdin, request))
seenNot := false
@@ -39,11 +40,13 @@ func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, st
return err
}
+ // TODO check args. If unexpected, return fallback.
+
if !isClone {
return fallback(ctx, args, request, stdout, stderr)
}
- bundleFile, err := os.Open(bundleFileName)
+ bundleFile, err := os.Open(filepath.Join(cwd, bundleFileName))
if err != nil {
return fallback(ctx, args, request, stdout, stderr)
}
@@ -51,11 +54,6 @@ func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, st
bundle := bufio.NewReader(bundleFile)
- bundleReader, err := git.NewPackReader(bundle)
- if err != nil {
- return fallback(ctx, args, request, stdout, stderr)
- }
-
request = bytes.NewBuffer(bytes.TrimSpace(request.Bytes()))
if _, err := request.WriteString("\n"); err != nil {
return err
@@ -65,6 +63,11 @@ func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, st
return err
}
+ bundleReader, err := git.NewPackReader(bundle)
+ if err != nil {
+ return err
+ }
+
cmd, err := command.New(ctx, exec.Command(args[0], args[1:]...), request, nil, stderr)
if err != nil {
return err
@@ -75,7 +78,8 @@ func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, st
return err
}
- totalObjects := packObjectsReader.NumObjects() + bundleReader.NumObjects() // TODO check for overflow
+ // TODO check for overflow
+ totalObjects := packObjectsReader.NumObjects() + bundleReader.NumObjects()
w, err := git.NewPackWriter(stdout, totalObjects)
if err != nil {
@@ -90,6 +94,8 @@ func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, st
return err
}
+ fmt.Fprintf(stderr, "Pre-computed packfile: %d objects\n", bundleReader.NumObjects())
+
if _, err := io.Copy(w, bundleReader); err != nil {
return err
}
@@ -98,8 +104,6 @@ func PackObjects(ctx context.Context, args []string, stdin io.Reader, stdout, st
return err
}
- fmt.Fprintf(stderr, "re-used from pre-computed packfile: %d objects\n", bundleReader.NumObjects())
-
return nil
}