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:
authorJacob Vosmaer <jacob@gitlab.com>2019-04-11 12:59:16 +0300
committerJacob Vosmaer <jacob@gitlab.com>2019-04-11 12:59:16 +0300
commitc2a627f7ce32784e8548bac75dea0a836884e62f (patch)
treee0c801598663515a7831c86dc853f0a2bc274fb0
parentb066d7a9432bfc0366951322c71f7e44f85b324f (diff)
Fix bundle read ordergitaly-pack-objects
-rw-r--r--cmd/gitaly-pack-objects/main.go7
-rw-r--r--internal/packobjects/pack-objects-bundle.go24
2 files changed, 20 insertions, 11 deletions
diff --git a/cmd/gitaly-pack-objects/main.go b/cmd/gitaly-pack-objects/main.go
index 5307a9e2d..a33b53737 100644
--- a/cmd/gitaly-pack-objects/main.go
+++ b/cmd/gitaly-pack-objects/main.go
@@ -22,5 +22,10 @@ func _main() error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
- return packobjects.PackObjects(ctx, os.Args[1:], os.Stdin, os.Stdout, os.Stderr)
+ wd, err := os.Getwd()
+ if err != nil {
+ return err
+ }
+
+ return packobjects.PackObjects(ctx, wd, os.Args[1:], os.Stdin, os.Stdout, os.Stderr)
}
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
}