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:
authorJames Fargher <proglottis@gmail.com>2020-10-20 03:21:02 +0300
committerJames Fargher <proglottis@gmail.com>2020-12-03 01:49:09 +0300
commit35bb5b034e1e80a8aadaf77fb23c26411e6d3ad7 (patch)
treeb1b78c0be128287e08211b4188d9c9fe5fd74cb4 /internal/gitaly/service/operations/merge.go
parentc06b7d8c8d5373294138005db807d61e939dd0bf (diff)
Port UserRevert to go
Diffstat (limited to 'internal/gitaly/service/operations/merge.go')
-rw-r--r--internal/gitaly/service/operations/merge.go44
1 files changed, 28 insertions, 16 deletions
diff --git a/internal/gitaly/service/operations/merge.go b/internal/gitaly/service/operations/merge.go
index 64c6ad276..aa44e1861 100644
--- a/internal/gitaly/service/operations/merge.go
+++ b/internal/gitaly/service/operations/merge.go
@@ -8,6 +8,7 @@ import (
"gitlab.com/gitlab-org/gitaly/internal/command"
"gitlab.com/gitlab-org/gitaly/internal/git"
+ "gitlab.com/gitlab-org/gitaly/internal/git/repository"
"gitlab.com/gitlab-org/gitaly/internal/git2go"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/rubyserver"
"gitlab.com/gitlab-org/gitaly/internal/helper"
@@ -209,24 +210,11 @@ func (s *Server) UserFFBranch(ctx context.Context, in *gitalypb.UserFFBranchRequ
return nil, helper.ErrInvalidArgument(err)
}
- cmd, err := git.SafeCmd(ctx, in.Repository, nil, git.SubCmd{
- Name: "merge-base",
- Flags: []git.Option{git.Flag{Name: "--is-ancestor"}},
- Args: []string{revision, in.CommitId},
- })
+ ancestor, err := isAncestor(ctx, in.Repository, revision, in.CommitId)
if err != nil {
- return nil, helper.ErrInternal(err)
+ return nil, err
}
- if err := cmd.Wait(); err != nil {
- status, ok := command.ExitStatus(err)
- if !ok {
- return nil, helper.ErrInternal(err)
- }
- // --is-ancestor errors are signaled by a non-zero status that is not 1.
- // https://git-scm.com/docs/git-merge-base#Documentation/git-merge-base.txt---is-ancestor
- if status != 1 {
- return nil, helper.ErrInvalidArgument(err)
- }
+ if !ancestor {
return nil, helper.ErrPreconditionFailedf("not fast forward")
}
@@ -378,3 +366,27 @@ func (s *Server) UserMergeToRef(ctx context.Context, in *gitalypb.UserMergeToRef
return client.UserMergeToRef(clientCtx, in)
}
+
+func isAncestor(ctx context.Context, repo repository.GitRepo, ancestor, descendant string) (bool, error) {
+ cmd, err := git.SafeCmd(ctx, repo, nil, git.SubCmd{
+ Name: "merge-base",
+ Flags: []git.Option{git.Flag{Name: "--is-ancestor"}},
+ Args: []string{ancestor, descendant},
+ })
+ if err != nil {
+ return false, helper.ErrInternalf("isAncestor: %w", err)
+ }
+ if err := cmd.Wait(); err != nil {
+ status, ok := command.ExitStatus(err)
+ if !ok {
+ return false, helper.ErrInternalf("isAncestor: %w", err)
+ }
+ // --is-ancestor errors are signaled by a non-zero status that is not 1.
+ // https://git-scm.com/docs/git-merge-base#Documentation/git-merge-base.txt---is-ancestor
+ if status != 1 {
+ return false, helper.ErrInvalidArgumentf("isAncestor: %w", err)
+ }
+ return false, nil
+ }
+ return true, nil
+}