diff options
author | Jacob Vosmaer <jacob@gitlab.com> | 2019-04-11 12:59:16 +0300 |
---|---|---|
committer | Jacob Vosmaer <jacob@gitlab.com> | 2019-04-11 12:59:16 +0300 |
commit | c2a627f7ce32784e8548bac75dea0a836884e62f (patch) | |
tree | e0c801598663515a7831c86dc853f0a2bc274fb0 | |
parent | b066d7a9432bfc0366951322c71f7e44f85b324f (diff) |
Fix bundle read ordergitaly-pack-objects
-rw-r--r-- | cmd/gitaly-pack-objects/main.go | 7 | ||||
-rw-r--r-- | internal/packobjects/pack-objects-bundle.go | 24 |
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 } |