diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-07-19 11:33:08 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2021-07-20 09:48:15 +0300 |
commit | 74e714e40dcbcc4550e318db689873a6db25b77c (patch) | |
tree | 1aa9fa28d618903c5d3e0c6938bb02e410844066 | |
parent | ea5021b4eab2de65dd44c153159d8b0e7cbb40af (diff) |
git2go: Inject repository into subcommands
In order to support use of alternative object directories for a
repository, we'll need to inject it into subcommands such that we can
extract relevant information.
Add a `repository.GitRepo` parameter to all subcommands to enable for
this. No functional change is expected from this commit given that we do
not yet use the repository.
29 files changed, 99 insertions, 72 deletions
diff --git a/cmd/gitaly-git2go/cherry_pick_test.go b/cmd/gitaly-git2go/cherry_pick_test.go index 59ec48468..1f4852fea 100644 --- a/cmd/gitaly-git2go/cherry_pick_test.go +++ b/cmd/gitaly-git2go/cherry_pick_test.go @@ -17,7 +17,7 @@ import ( ) func TestCherryPick_validation(t *testing.T) { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repo, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) @@ -71,7 +71,7 @@ func TestCherryPick_validation(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - _, err := executor.CherryPick(ctx, tc.request) + _, err := executor.CherryPick(ctx, repo, tc.request) require.EqualError(t, err, tc.expectedErr) }) } @@ -145,7 +145,7 @@ func TestCherryPick(t *testing.T) { }, } for _, tc := range testcases { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repo, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) @@ -169,7 +169,7 @@ func TestCherryPick(t *testing.T) { When: time.Date(2021, 1, 17, 14, 45, 51, 0, time.FixedZone("", +2*60*60)), } - response, err := executor.CherryPick(ctx, git2go.CherryPickCommand{ + response, err := executor.CherryPick(ctx, repo, git2go.CherryPickCommand{ Repository: repoPath, CommitterName: committer.Name, CommitterMail: committer.Email, diff --git a/cmd/gitaly-git2go/conflicts/conflicts_test.go b/cmd/gitaly-git2go/conflicts/conflicts_test.go index cb9c381ef..b7d457aa8 100644 --- a/cmd/gitaly-git2go/conflicts/conflicts_test.go +++ b/cmd/gitaly-git2go/conflicts/conflicts_test.go @@ -176,7 +176,7 @@ func TestConflicts(t *testing.T) { } for _, tc := range testcases { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repo, repoPath := testcfg.BuildWithRepo(t) executor := git2go.NewExecutor(cfg) testhelper.ConfigureGitalyGit2GoBin(t, cfg) @@ -189,7 +189,7 @@ func TestConflicts(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - response, err := executor.Conflicts(ctx, git2go.ConflictsCommand{ + response, err := executor.Conflicts(ctx, repo, git2go.ConflictsCommand{ Repository: repoPath, Ours: ours.String(), Theirs: theirs.String(), diff --git a/cmd/gitaly-git2go/merge_test.go b/cmd/gitaly-git2go/merge_test.go index 740f3456a..0afd5dc1d 100644 --- a/cmd/gitaly-git2go/merge_test.go +++ b/cmd/gitaly-git2go/merge_test.go @@ -15,10 +15,11 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/git2go" "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg" + "gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb" ) func TestMergeFailsWithMissingArguments(t *testing.T) { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repo, repoPath := testcfg.BuildWithRepo(t) executor := git2go.NewExecutor(cfg) testcases := []struct { @@ -67,7 +68,7 @@ func TestMergeFailsWithMissingArguments(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - _, err := executor.Merge(ctx, tc.request) + _, err := executor.Merge(ctx, repo, tc.request) require.Error(t, err) require.Equal(t, tc.expectedErr, err.Error()) }) @@ -82,7 +83,7 @@ func TestMergeFailsWithInvalidRepositoryPath(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - _, err := executor.Merge(ctx, git2go.MergeCommand{ + _, err := executor.Merge(ctx, &gitalypb.Repository{}, git2go.MergeCommand{ Repository: "/does/not/exist", AuthorName: "Foo", AuthorMail: "foo@example.com", Message: "Foo", Ours: "HEAD", Theirs: "HEAD", }) require.Error(t, err) @@ -177,7 +178,7 @@ func TestMergeTrees(t *testing.T) { } for _, tc := range testcases { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repoProto, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) @@ -191,7 +192,7 @@ func TestMergeTrees(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - response, err := executor.Merge(ctx, git2go.MergeCommand{ + response, err := executor.Merge(ctx, repoProto, git2go.MergeCommand{ Repository: repoPath, AuthorName: "John Doe", AuthorMail: "john.doe@example.com", @@ -241,7 +242,7 @@ func TestMerge_recursive(t *testing.T) { testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) - _, repoPath, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) + repoProto, repoPath, cleanup := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) defer cleanup() base := cmdtesthelper.BuildCommit(t, repoPath, nil, map[string]string{"base": "base\n"}) @@ -298,7 +299,7 @@ func TestMerge_recursive(t *testing.T) { // cases. We thus expect a merge conflict, which unfortunately // demonstrates that restricting the recursion limit may cause us to // fail resolution. - _, err := executor.Merge(ctx, git2go.MergeCommand{ + _, err := executor.Merge(ctx, repoProto, git2go.MergeCommand{ Repository: repoPath, AuthorName: "John Doe", AuthorMail: "john.doe@example.com", @@ -313,7 +314,7 @@ func TestMerge_recursive(t *testing.T) { // Otherwise, if we're merging an earlier criss-cross merge which has // half of the limit many criss-cross patterns, we exactly hit the // recursion limit and thus succeed. - response, err := executor.Merge(ctx, git2go.MergeCommand{ + response, err := executor.Merge(ctx, repoProto, git2go.MergeCommand{ Repository: repoPath, AuthorName: "John Doe", AuthorMail: "john.doe@example.com", diff --git a/cmd/gitaly-git2go/rebase_test.go b/cmd/gitaly-git2go/rebase_test.go index 01be70216..c6d64be98 100644 --- a/cmd/gitaly-git2go/rebase_test.go +++ b/cmd/gitaly-git2go/rebase_test.go @@ -20,7 +20,7 @@ var ( ) func TestRebase_validation(t *testing.T) { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repo, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) committer := git2go.NewSignature("Foo", "foo@example.com", time.Now()) executor := git2go.NewExecutor(cfg) @@ -65,7 +65,7 @@ func TestRebase_validation(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - _, err := executor.Rebase(ctx, tc.request) + _, err := executor.Rebase(ctx, repo, tc.request) require.EqualError(t, err, tc.expectedErr) }) } @@ -163,7 +163,7 @@ func TestRebase_rebase(t *testing.T) { string(gittest.TestUser.Email), time.Date(2021, 3, 1, 13, 45, 50, 0, time.FixedZone("", +2*60*60))) - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repoProto, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) @@ -181,7 +181,7 @@ func TestRebase_rebase(t *testing.T) { UpstreamRevision: masterRevision, } - response, err := executor.Rebase(ctx, request) + response, err := executor.Rebase(ctx, repoProto, request) if tc.expectedErr != "" { require.EqualError(t, err, tc.expectedErr) } else { diff --git a/cmd/gitaly-git2go/revert_test.go b/cmd/gitaly-git2go/revert_test.go index 3aa077767..3fa48edec 100644 --- a/cmd/gitaly-git2go/revert_test.go +++ b/cmd/gitaly-git2go/revert_test.go @@ -17,7 +17,7 @@ import ( ) func TestRevert_validation(t *testing.T) { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repo, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) @@ -66,7 +66,7 @@ func TestRevert_validation(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - _, err := executor.Revert(ctx, tc.request) + _, err := executor.Revert(ctx, repo, tc.request) require.Error(t, err) require.EqualError(t, err, tc.expectedErr) }) @@ -169,7 +169,7 @@ func TestRevert_trees(t *testing.T) { } for _, tc := range testcases { t.Run(tc.desc, func(t *testing.T) { - cfg, _, repoPath := testcfg.BuildWithRepo(t) + cfg, repoProto, repoPath := testcfg.BuildWithRepo(t) testhelper.ConfigureGitalyGit2GoBin(t, cfg) executor := git2go.NewExecutor(cfg) @@ -190,7 +190,7 @@ func TestRevert_trees(t *testing.T) { Revert: revert, } - response, err := executor.Revert(ctx, request) + response, err := executor.Revert(ctx, repoProto, request) if tc.expectedErr != "" { require.EqualError(t, err, tc.expectedErr) diff --git a/cmd/gitaly-git2go/submodule_test.go b/cmd/gitaly-git2go/submodule_test.go index 388867bb0..bd00bdc20 100644 --- a/cmd/gitaly-git2go/submodule_test.go +++ b/cmd/gitaly-git2go/submodule_test.go @@ -97,7 +97,7 @@ func TestSubmodule(t *testing.T) { ctx, cancel := testhelper.Context() defer cancel() - response, err := executor.Submodule(ctx, tc.command) + response, err := executor.Submodule(ctx, repo, tc.command) if tc.expectedStderr != "" { require.Error(t, err) require.Contains(t, err.Error(), tc.expectedStderr) diff --git a/internal/git2go/apply.go b/internal/git2go/apply.go index 97c74d4a7..b0b81b835 100644 --- a/internal/git2go/apply.go +++ b/internal/git2go/apply.go @@ -7,6 +7,7 @@ import ( "io" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // ErrMergeConflict is returned when there is a merge conflict. @@ -72,7 +73,7 @@ func (iter *slicePatchIterator) Err() error { return nil } // Apply applies the provided patches and returns the OID of the commit with the patches // applied. -func (b Executor) Apply(ctx context.Context, params ApplyParams) (git.ObjectID, error) { +func (b Executor) Apply(ctx context.Context, repo repository.GitRepo, params ApplyParams) (git.ObjectID, error) { reader, writer := io.Pipe() defer writer.Close() @@ -102,7 +103,7 @@ func (b Executor) Apply(ctx context.Context, params ApplyParams) (git.ObjectID, }() var result Result - output, err := b.run(ctx, reader, "apply", "-git-binary-path", b.gitBinaryPath) + output, err := b.run(ctx, repo, reader, "apply", "-git-binary-path", b.gitBinaryPath) if err != nil { return "", fmt.Errorf("run: %w", err) } diff --git a/internal/git2go/apply_test.go b/internal/git2go/apply_test.go index e6d9680f8..614ea8931 100644 --- a/internal/git2go/apply_test.go +++ b/internal/git2go/apply_test.go @@ -39,7 +39,7 @@ func TestExecutor_Apply(t *testing.T) { author := NewSignature("Test Author", "test.author@example.com", time.Now()) committer := NewSignature("Test Committer", "test.committer@example.com", time.Now()) - parentCommitSHA, err := executor.Commit(ctx, CommitParams{ + parentCommitSHA, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, @@ -48,7 +48,7 @@ func TestExecutor_Apply(t *testing.T) { }) require.NoError(t, err) - noCommonAncestor, err := executor.Commit(ctx, CommitParams{ + noCommonAncestor, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, @@ -57,7 +57,7 @@ func TestExecutor_Apply(t *testing.T) { }) require.NoError(t, err) - updateToA, err := executor.Commit(ctx, CommitParams{ + updateToA, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, @@ -67,7 +67,7 @@ func TestExecutor_Apply(t *testing.T) { }) require.NoError(t, err) - updateToB, err := executor.Commit(ctx, CommitParams{ + updateToB, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, @@ -77,7 +77,7 @@ func TestExecutor_Apply(t *testing.T) { }) require.NoError(t, err) - updateFromAToB, err := executor.Commit(ctx, CommitParams{ + updateFromAToB, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, @@ -87,7 +87,7 @@ func TestExecutor_Apply(t *testing.T) { }) require.NoError(t, err) - otherFile, err := executor.Commit(ctx, CommitParams{ + otherFile, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, @@ -196,7 +196,7 @@ func TestExecutor_Apply(t *testing.T) { }, } { t.Run(tc.desc, func(t *testing.T) { - commitID, err := executor.Apply(ctx, ApplyParams{ + commitID, err := executor.Apply(ctx, repo, ApplyParams{ Repository: repoPath, Committer: committer, ParentCommit: parentCommitSHA.String(), diff --git a/internal/git2go/cherry_pick.go b/internal/git2go/cherry_pick.go index 3ef0372e2..6a71a5c61 100644 --- a/internal/git2go/cherry_pick.go +++ b/internal/git2go/cherry_pick.go @@ -5,6 +5,7 @@ import ( "time" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // CherryPickCommand contains parameters to perform a cherry pick. @@ -28,6 +29,6 @@ type CherryPickCommand struct { } // CherryPick performs a cherry pick via gitaly-git2go. -func (b Executor) CherryPick(ctx context.Context, m CherryPickCommand) (git.ObjectID, error) { - return b.runWithGob(ctx, "cherry-pick", m) +func (b Executor) CherryPick(ctx context.Context, repo repository.GitRepo, m CherryPickCommand) (git.ObjectID, error) { + return b.runWithGob(ctx, repo, "cherry-pick", m) } diff --git a/internal/git2go/commit.go b/internal/git2go/commit.go index 7ff7575bb..76c6b620d 100644 --- a/internal/git2go/commit.go +++ b/internal/git2go/commit.go @@ -7,6 +7,7 @@ import ( "fmt" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // IndexError is an error that was produced by performing an invalid operation on the index. @@ -59,13 +60,13 @@ type CommitParams struct { // Commit builds a commit from the actions, writes it to the object database and // returns its object id. -func (b Executor) Commit(ctx context.Context, params CommitParams) (git.ObjectID, error) { +func (b Executor) Commit(ctx context.Context, repo repository.GitRepo, params CommitParams) (git.ObjectID, error) { input := &bytes.Buffer{} if err := gob.NewEncoder(input).Encode(params); err != nil { return "", err } - output, err := b.run(ctx, input, "commit") + output, err := b.run(ctx, repo, input, "commit") if err != nil { return "", err } diff --git a/internal/git2go/commit_test.go b/internal/git2go/commit_test.go index e761ea254..e16aa7a4e 100644 --- a/internal/git2go/commit_test.go +++ b/internal/git2go/commit_test.go @@ -468,7 +468,7 @@ func TestExecutor_Commit(t *testing.T) { var parentCommit git.ObjectID for i, step := range tc.steps { message := fmt.Sprintf("commit %d", i+1) - commitID, err := executor.Commit(ctx, CommitParams{ + commitID, err := executor.Commit(ctx, repo, CommitParams{ Repository: repoPath, Author: author, Committer: committer, diff --git a/internal/git2go/conflicts.go b/internal/git2go/conflicts.go index 9c1a6c2e0..6b1e7b717 100644 --- a/internal/git2go/conflicts.go +++ b/internal/git2go/conflicts.go @@ -6,6 +6,7 @@ import ( "fmt" "io" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -76,7 +77,7 @@ func (m ConflictsResult) SerializeTo(writer io.Writer) error { } // Conflicts performs a merge via gitaly-git2go and returns all resulting conflicts. -func (b Executor) Conflicts(ctx context.Context, c ConflictsCommand) (ConflictsResult, error) { +func (b Executor) Conflicts(ctx context.Context, repo repository.GitRepo, c ConflictsCommand) (ConflictsResult, error) { if err := c.verify(); err != nil { return ConflictsResult{}, fmt.Errorf("conflicts: %w: %s", ErrInvalidArgument, err.Error()) } @@ -86,7 +87,7 @@ func (b Executor) Conflicts(ctx context.Context, c ConflictsCommand) (ConflictsR return ConflictsResult{}, err } - stdout, err := b.run(ctx, nil, "conflicts", "-request", serialized) + stdout, err := b.run(ctx, repo, nil, "conflicts", "-request", serialized) if err != nil { return ConflictsResult{}, err } diff --git a/internal/git2go/executor.go b/internal/git2go/executor.go index a7c867dfe..5a8269eab 100644 --- a/internal/git2go/executor.go +++ b/internal/git2go/executor.go @@ -13,6 +13,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v14/internal/command" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v14/internal/version" ) @@ -53,7 +54,7 @@ func BinaryPath(binaryFolder string) string { return path } -func (b Executor) run(ctx context.Context, stdin io.Reader, args ...string) (*bytes.Buffer, error) { +func (b Executor) run(ctx context.Context, repo repository.GitRepo, stdin io.Reader, args ...string) (*bytes.Buffer, error) { var stderr, stdout bytes.Buffer cmd, err := command.New(ctx, exec.Command(b.binaryPath, args...), stdin, &stdout, &stderr) if err != nil { @@ -72,13 +73,13 @@ func (b Executor) run(ctx context.Context, stdin io.Reader, args ...string) (*by // runWithGob runs the specified gitaly-git2go cmd with the request gob-encoded // as input and returns the commit ID as string or an error. -func (b Executor) runWithGob(ctx context.Context, cmd string, request interface{}) (git.ObjectID, error) { +func (b Executor) runWithGob(ctx context.Context, repo repository.GitRepo, cmd string, request interface{}) (git.ObjectID, error) { input := &bytes.Buffer{} if err := gob.NewEncoder(input).Encode(request); err != nil { return "", fmt.Errorf("%s: %w", cmd, err) } - output, err := b.run(ctx, input, cmd) + output, err := b.run(ctx, repo, input, cmd) if err != nil { return "", fmt.Errorf("%s: %w", cmd, err) } diff --git a/internal/git2go/merge.go b/internal/git2go/merge.go index 3a0f6b24a..d449b7ccb 100644 --- a/internal/git2go/merge.go +++ b/internal/git2go/merge.go @@ -6,6 +6,8 @@ import ( "fmt" "io" "time" + + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) const ( @@ -61,7 +63,7 @@ func (m MergeResult) SerializeTo(w io.Writer) error { } // Merge performs a merge via gitaly-git2go. -func (b Executor) Merge(ctx context.Context, m MergeCommand) (MergeResult, error) { +func (b Executor) Merge(ctx context.Context, repo repository.GitRepo, m MergeCommand) (MergeResult, error) { if err := m.verify(); err != nil { return MergeResult{}, fmt.Errorf("merge: %w: %s", ErrInvalidArgument, err.Error()) } @@ -71,7 +73,7 @@ func (b Executor) Merge(ctx context.Context, m MergeCommand) (MergeResult, error return MergeResult{}, err } - stdout, err := b.run(ctx, nil, "merge", "-request", serialized) + stdout, err := b.run(ctx, repo, nil, "merge", "-request", serialized) if err != nil { return MergeResult{}, err } diff --git a/internal/git2go/rebase.go b/internal/git2go/rebase.go index 0b2994baa..32051fd03 100644 --- a/internal/git2go/rebase.go +++ b/internal/git2go/rebase.go @@ -4,6 +4,7 @@ import ( "context" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // RebaseCommand contains parameters to rebase a branch. @@ -19,6 +20,6 @@ type RebaseCommand struct { } // Rebase performs the rebase via gitaly-git2go -func (b Executor) Rebase(ctx context.Context, r RebaseCommand) (git.ObjectID, error) { - return b.runWithGob(ctx, "rebase", r) +func (b Executor) Rebase(ctx context.Context, repo repository.GitRepo, r RebaseCommand) (git.ObjectID, error) { + return b.runWithGob(ctx, repo, "rebase", r) } diff --git a/internal/git2go/resolve_conflicts.go b/internal/git2go/resolve_conflicts.go index e4526ab6e..62096030c 100644 --- a/internal/git2go/resolve_conflicts.go +++ b/internal/git2go/resolve_conflicts.go @@ -7,6 +7,7 @@ import ( "fmt" "gitlab.com/gitlab-org/gitaly/v14/internal/git/conflict" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // ResolveCommand contains arguments to perform a merge commit and resolve any @@ -22,7 +23,7 @@ type ResolveResult struct { } // Resolve will attempt merging and resolving conflicts for the provided request -func (b Executor) Resolve(ctx context.Context, r ResolveCommand) (ResolveResult, error) { +func (b Executor) Resolve(ctx context.Context, repo repository.GitRepo, r ResolveCommand) (ResolveResult, error) { if err := r.verify(); err != nil { return ResolveResult{}, fmt.Errorf("resolve: %w: %s", ErrInvalidArgument, err.Error()) } @@ -32,7 +33,7 @@ func (b Executor) Resolve(ctx context.Context, r ResolveCommand) (ResolveResult, return ResolveResult{}, fmt.Errorf("resolve: %w", err) } - stdout, err := b.run(ctx, input, "resolve") + stdout, err := b.run(ctx, repo, input, "resolve") if err != nil { return ResolveResult{}, err } diff --git a/internal/git2go/revert.go b/internal/git2go/revert.go index 470763dbf..33a7004ad 100644 --- a/internal/git2go/revert.go +++ b/internal/git2go/revert.go @@ -5,6 +5,7 @@ import ( "time" "gitlab.com/gitlab-org/gitaly/v14/internal/git" + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // RevertCommand contains parameters required to execute a revert via gitaly-git2go. @@ -28,6 +29,6 @@ type RevertCommand struct { } // Revert reverts a commit via gitaly-git2go. -func (b Executor) Revert(ctx context.Context, r RevertCommand) (git.ObjectID, error) { - return b.runWithGob(ctx, "revert", r) +func (b Executor) Revert(ctx context.Context, repo repository.GitRepo, r RevertCommand) (git.ObjectID, error) { + return b.runWithGob(ctx, repo, "revert", r) } diff --git a/internal/git2go/set_config.go b/internal/git2go/set_config.go index d0a4e2ba1..0375189ea 100644 --- a/internal/git2go/set_config.go +++ b/internal/git2go/set_config.go @@ -5,6 +5,8 @@ import ( "context" "encoding/gob" "fmt" + + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // ConfigEntry interface value with defined type. @@ -27,13 +29,13 @@ type SetConfingResult struct { } // SetConfig attempts to set all entries to config -func (b Executor) SetConfig(ctx context.Context, s SetConfigCommand) error { +func (b Executor) SetConfig(ctx context.Context, repo repository.GitRepo, s SetConfigCommand) error { input := &bytes.Buffer{} if err := gob.NewEncoder(input).Encode(s); err != nil { return fmt.Errorf("resolve: %w", err) } - stdout, err := b.run(ctx, input, "set_config") + stdout, err := b.run(ctx, repo, input, "set_config") if err != nil { return err } diff --git a/internal/git2go/submodule.go b/internal/git2go/submodule.go index 3c29ea409..804de88a1 100644 --- a/internal/git2go/submodule.go +++ b/internal/git2go/submodule.go @@ -5,6 +5,8 @@ import ( "fmt" "io" "time" + + "gitlab.com/gitlab-org/gitaly/v14/internal/git/repository" ) // Error strings present in the legacy Ruby implementation @@ -62,7 +64,7 @@ func (s SubmoduleResult) SerializeTo(w io.Writer) error { } // Submodule attempts to commit the request submodule change -func (b Executor) Submodule(ctx context.Context, s SubmoduleCommand) (SubmoduleResult, error) { +func (b Executor) Submodule(ctx context.Context, repo repository.GitRepo, s SubmoduleCommand) (SubmoduleResult, error) { if err := s.verify(); err != nil { return SubmoduleResult{}, fmt.Errorf("submodule: %w", err) } @@ -72,7 +74,7 @@ func (b Executor) Submodule(ctx context.Context, s SubmoduleCommand) (SubmoduleR return SubmoduleResult{}, err } - stdout, err := b.run(ctx, nil, "submodule", "-request", serialized) + stdout, err := b.run(ctx, repo, nil, "submodule", "-request", serialized) if err != nil { return SubmoduleResult{}, err } diff --git a/internal/gitaly/service/conflicts/list_conflict_files.go b/internal/gitaly/service/conflicts/list_conflict_files.go index 9d7591f64..a64d38ff6 100644 --- a/internal/gitaly/service/conflicts/list_conflict_files.go +++ b/internal/gitaly/service/conflicts/list_conflict_files.go @@ -38,7 +38,7 @@ func (s *server) ListConflictFiles(request *gitalypb.ListConflictFilesRequest, s return err } - conflicts, err := s.git2go.Conflicts(ctx, git2go.ConflictsCommand{ + conflicts, err := s.git2go.Conflicts(ctx, repo, git2go.ConflictsCommand{ Repository: repoPath, Ours: ours.String(), Theirs: theirs.String(), diff --git a/internal/gitaly/service/conflicts/resolve_conflicts.go b/internal/gitaly/service/conflicts/resolve_conflicts.go index 137a0f431..4a69c1375 100644 --- a/internal/gitaly/service/conflicts/resolve_conflicts.go +++ b/internal/gitaly/service/conflicts/resolve_conflicts.go @@ -173,7 +173,7 @@ func (s *server) resolveConflicts(header *gitalypb.ResolveConflictsRequestHeader return errors.New("Rugged::InvalidError: unable to parse OID - contains invalid characters") } - result, err := s.git2go.Resolve(ctx, git2go.ResolveCommand{ + result, err := s.git2go.Resolve(ctx, sourceRepo, git2go.ResolveCommand{ MergeCommand: git2go.MergeCommand{ Repository: repoPath, AuthorName: string(header.User.Name), diff --git a/internal/gitaly/service/operations/cherry_pick.go b/internal/gitaly/service/operations/cherry_pick.go index d1a2251fa..86bf6c593 100644 --- a/internal/gitaly/service/operations/cherry_pick.go +++ b/internal/gitaly/service/operations/cherry_pick.go @@ -50,7 +50,7 @@ func (s *Server) UserCherryPick(ctx context.Context, req *gitalypb.UserCherryPic } } - newrev, err := s.git2go.CherryPick(ctx, git2go.CherryPickCommand{ + newrev, err := s.git2go.CherryPick(ctx, localRepo, git2go.CherryPickCommand{ Repository: repoPath, CommitterName: string(req.User.Name), CommitterMail: string(req.User.Email), diff --git a/internal/gitaly/service/operations/commit_files.go b/internal/gitaly/service/operations/commit_files.go index 24f680ffb..292b01f71 100644 --- a/internal/gitaly/service/operations/commit_files.go +++ b/internal/gitaly/service/operations/commit_files.go @@ -297,7 +297,7 @@ func (s *Server) userCommitFiles(ctx context.Context, header *gitalypb.UserCommi author = git2go.NewSignature(string(header.CommitAuthorName), string(header.CommitAuthorEmail), now) } - commitID, err := s.git2go.Commit(ctx, git2go.CommitParams{ + commitID, err := s.git2go.Commit(ctx, localRepo, git2go.CommitParams{ Repository: repoPath, Author: author, Committer: committer, diff --git a/internal/gitaly/service/operations/merge.go b/internal/gitaly/service/operations/merge.go index e08a9d9cb..c56c76920 100644 --- a/internal/gitaly/service/operations/merge.go +++ b/internal/gitaly/service/operations/merge.go @@ -65,7 +65,7 @@ func (s *Server) UserMergeBranch(stream gitalypb.OperationService_UserMergeBranc return helper.ErrInvalidArgument(err) } - merge, err := s.git2go.Merge(ctx, git2go.MergeCommand{ + merge, err := s.git2go.Merge(ctx, repo, git2go.MergeCommand{ Repository: repoPath, AuthorName: string(firstRequest.User.Name), AuthorMail: string(firstRequest.User.Email), @@ -282,7 +282,7 @@ func (s *Server) UserMergeToRef(ctx context.Context, request *gitalypb.UserMerge } // Now, we create the merge commit... - merge, err := s.git2go.Merge(ctx, git2go.MergeCommand{ + merge, err := s.git2go.Merge(ctx, repo, git2go.MergeCommand{ Repository: repoPath, AuthorName: string(request.User.Name), AuthorMail: string(request.User.Email), diff --git a/internal/gitaly/service/operations/rebase.go b/internal/gitaly/service/operations/rebase.go index 64b276e88..a3fde32a8 100644 --- a/internal/gitaly/service/operations/rebase.go +++ b/internal/gitaly/service/operations/rebase.go @@ -60,7 +60,7 @@ func (s *Server) UserRebaseConfirmable(stream gitalypb.OperationService_UserReba } } - newrev, err := s.git2go.Rebase(ctx, git2go.RebaseCommand{ + newrev, err := s.git2go.Rebase(ctx, repo, git2go.RebaseCommand{ Repository: repoPath, Committer: committer, BranchName: string(header.Branch), diff --git a/internal/gitaly/service/operations/revert.go b/internal/gitaly/service/operations/revert.go index 461894a39..543b45717 100644 --- a/internal/gitaly/service/operations/revert.go +++ b/internal/gitaly/service/operations/revert.go @@ -44,7 +44,7 @@ func (s *Server) UserRevert(ctx context.Context, req *gitalypb.UserRevertRequest return nil, helper.ErrInvalidArgument(err) } - newrev, err := s.git2go.Revert(ctx, git2go.RevertCommand{ + newrev, err := s.git2go.Revert(ctx, localRepo, git2go.RevertCommand{ Repository: repoPath, AuthorName: string(req.User.Name), AuthorMail: string(req.User.Email), diff --git a/internal/gitaly/service/operations/submodules.go b/internal/gitaly/service/operations/submodules.go index 6fc4906ba..2a7b86024 100644 --- a/internal/gitaly/service/operations/submodules.go +++ b/internal/gitaly/service/operations/submodules.go @@ -91,7 +91,7 @@ func (s *Server) userUpdateSubmodule(ctx context.Context, req *gitalypb.UserUpda return nil, helper.ErrInvalidArgument(err) } - result, err := s.git2go.Submodule(ctx, git2go.SubmoduleCommand{ + result, err := s.git2go.Submodule(ctx, repo, git2go.SubmoduleCommand{ Repository: repoPath, AuthorMail: string(req.GetUser().GetEmail()), AuthorName: string(req.GetUser().GetName()), diff --git a/internal/gitaly/service/remote/update_remote_mirror_test.go b/internal/gitaly/service/remote/update_remote_mirror_test.go index 496951bb4..e2c560531 100644 --- a/internal/gitaly/service/remote/update_remote_mirror_test.go +++ b/internal/gitaly/service/remote/update_remote_mirror_test.go @@ -449,7 +449,7 @@ func testUpdateRemoteMirrorFeatured(t *testing.T, ctx context.Context, cfg confi }, } { t.Run(tc.desc, func(t *testing.T) { - _, mirrorRepoPath, cleanMirrorRepo := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) + mirrorRepoPb, mirrorRepoPath, cleanMirrorRepo := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) defer cleanMirrorRepo() sourceRepoPb, sourceRepoPath, cleanSourceRepo := gittest.InitBareRepoAt(t, cfg, cfg.Storages[0]) @@ -464,16 +464,28 @@ func testUpdateRemoteMirrorFeatured(t *testing.T, ctx context.Context, cfg confi executor := git2go.NewExecutor(cfg) // construct the starting state of the repositories - for repoPath, references := range map[string]refs{ - sourceRepoPath: tc.sourceRefs, - mirrorRepoPath: tc.mirrorRefs, + for _, c := range []struct { + repoProto *gitalypb.Repository + repoPath string + references refs + }{ + { + repoProto: sourceRepoPb, + repoPath: sourceRepoPath, + references: tc.sourceRefs, + }, + { + repoProto: mirrorRepoPb, + repoPath: mirrorRepoPath, + references: tc.mirrorRefs, + }, } { - for reference, commits := range references { + for reference, commits := range c.references { var commitOID git.ObjectID for _, commit := range commits { var err error - commitOID, err = executor.Commit(ctx, git2go.CommitParams{ - Repository: repoPath, + commitOID, err = executor.Commit(ctx, c.repoProto, git2go.CommitParams{ + Repository: c.repoPath, Author: commitSignature, Committer: commitSignature, Message: commit, @@ -482,7 +494,7 @@ func testUpdateRemoteMirrorFeatured(t *testing.T, ctx context.Context, cfg confi require.NoError(t, err) } - gittest.Exec(t, cfg, "-C", repoPath, "update-ref", reference, commitOID.String()) + gittest.Exec(t, cfg, "-C", c.repoPath, "update-ref", reference, commitOID.String()) } } for repoPath, symRefs := range map[string]map[string]string{ diff --git a/internal/gitaly/service/repository/config.go b/internal/gitaly/service/repository/config.go index 6fbf0f21d..d2375096d 100644 --- a/internal/gitaly/service/repository/config.go +++ b/internal/gitaly/service/repository/config.go @@ -133,7 +133,7 @@ func (s *server) setConfigGit2Go(ctx context.Context, req *gitalypb.SetConfigReq return nil, helper.ErrInternalf("preimage vote on config: %v", err) } - if err := s.git2go.SetConfig(ctx, git2go.SetConfigCommand{Repository: path, Entries: entries}); err != nil { + if err := s.git2go.SetConfig(ctx, reqRepo, git2go.SetConfigCommand{Repository: path, Entries: entries}); err != nil { return nil, status.Errorf(codes.Internal, "SetConfig git2go error") } |