diff --git a/changelogs/unreleased/avar-user-delete-and-create-branch-GetBranch-vs-GetReference-bugfix.yml b/changelogs/unreleased/avar-user-delete-and-create-branch-GetBranch-vs-GetReference-bugfix.yml new file mode 100644 index 0000000000000000000000000000000000000000..de315c9bb555a8acb3f9812d61a65b68fa884037 --- /dev/null +++ b/changelogs/unreleased/avar-user-delete-and-create-branch-GetBranch-vs-GetReference-bugfix.yml @@ -0,0 +1,5 @@ +--- +title: 'Branch: fix API use bug in User(Create|Delete)Branch' +merge_request: 2838 +author: +type: fixed diff --git a/internal/gitaly/service/operations/branches.go b/internal/gitaly/service/operations/branches.go index f1cb37c043f8dfa2098b92c13b1e99da2301b0e1..b2697451b72c61e8c26500ba786f744579f5fafb 100644 --- a/internal/gitaly/service/operations/branches.go +++ b/internal/gitaly/service/operations/branches.go @@ -39,16 +39,15 @@ func (s *server) UserCreateBranch(ctx context.Context, req *gitalypb.UserCreateB return nil, helper.ErrPreconditionFailed(err) } - _, err = git.NewRepository(req.Repository).GetBranch(ctx, string(req.BranchName)) + referenceName := fmt.Sprintf("refs/heads/%s", req.BranchName) + _, err = git.NewRepository(req.Repository).GetReference(ctx, referenceName) if err == nil { return nil, status.Errorf(codes.FailedPrecondition, "Bad Request (branch exists)") } else if !errors.Is(err, git.ErrReferenceNotFound) { return nil, status.Error(codes.Internal, err.Error()) } - branch := fmt.Sprintf("refs/heads/%s", req.BranchName) - - if err := s.updateReferenceWithHooks(ctx, req.Repository, req.User, branch, string(req.StartPoint), git.NullSHA); err != nil { + if err := s.updateReferenceWithHooks(ctx, req.Repository, req.User, referenceName, string(req.StartPoint), git.NullSHA); err != nil { var preReceiveError preReceiveError if errors.As(err, &preReceiveError) { return &gitalypb.UserCreateBranchResponse{ @@ -118,14 +117,13 @@ func (s *server) UserDeleteBranch(ctx context.Context, req *gitalypb.UserDeleteB // Implement UserDeleteBranch in Go - revision, err := git.NewRepository(req.Repository).GetBranch(ctx, string(req.BranchName)) + referenceName := fmt.Sprintf("refs/heads/%s", req.BranchName) + revision, err := git.NewRepository(req.Repository).GetReference(ctx, referenceName) if err != nil { return nil, helper.ErrPreconditionFailed(err) } - branch := fmt.Sprintf("refs/heads/%s", req.BranchName) - - if err := s.updateReferenceWithHooks(ctx, req.Repository, req.User, branch, git.NullSHA, revision.Name); err != nil { + if err := s.updateReferenceWithHooks(ctx, req.Repository, req.User, referenceName, git.NullSHA, revision.Name); err != nil { var preReceiveError preReceiveError if errors.As(err, &preReceiveError) { return &gitalypb.UserDeleteBranchResponse{