From 850360eeeab09b8e36fe70d191b768523fddb6f2 Mon Sep 17 00:00:00 2001
From: Patrick Steinhardt <psteinhardt@gitlab.com>
Date: Mon, 7 Aug 2023 11:02:17 +0200
Subject: [PATCH] operations: Support SHA256 in UserDeleteBranch

Support the SHA256 object format in the UserDeleteBranch RPC.

Changelog: added
---
 .../service/operations/user_delete_branch.go      | 15 ++++++++++-----
 .../service/operations/user_delete_branch_test.go |  2 --
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/internal/gitaly/service/operations/user_delete_branch.go b/internal/gitaly/service/operations/user_delete_branch.go
index 2cf59a595e..530a1f9212 100644
--- a/internal/gitaly/service/operations/user_delete_branch.go
+++ b/internal/gitaly/service/operations/user_delete_branch.go
@@ -34,15 +34,20 @@ func (s *Server) UserDeleteBranch(ctx context.Context, req *gitalypb.UserDeleteB
 	}
 	referenceName := git.NewReferenceNameFromBranchName(string(req.BranchName))
 
-	var err error
+	repo := s.localrepo(req.GetRepository())
+	objectHash, err := repo.ObjectHash(ctx)
+	if err != nil {
+		return nil, fmt.Errorf("detecting object format: %w", err)
+	}
+
 	var referenceValue git.ObjectID
 
 	if expectedOldOID := req.GetExpectedOldOid(); expectedOldOID != "" {
-		referenceValue, err = git.ObjectHashSHA1.FromHex(expectedOldOID)
+		referenceValue, err = objectHash.FromHex(expectedOldOID)
 		if err != nil {
 			return nil, structerr.NewInvalidArgument("invalid expected old object ID: %w", err).WithMetadata("old_object_id", expectedOldOID)
 		}
-		referenceValue, err = s.localrepo(req.GetRepository()).ResolveRevision(
+		referenceValue, err = repo.ResolveRevision(
 			ctx, git.Revision(fmt.Sprintf("%s^{object}", referenceValue)),
 		)
 		if err != nil {
@@ -50,13 +55,13 @@ func (s *Server) UserDeleteBranch(ctx context.Context, req *gitalypb.UserDeleteB
 				WithMetadata("old_object_id", expectedOldOID)
 		}
 	} else {
-		referenceValue, err = s.localrepo(req.GetRepository()).ResolveRevision(ctx, referenceName.Revision())
+		referenceValue, err = repo.ResolveRevision(ctx, referenceName.Revision())
 		if err != nil {
 			return nil, structerr.NewFailedPrecondition("branch not found: %q", req.BranchName)
 		}
 	}
 
-	if err := s.updateReferenceWithHooks(ctx, req.Repository, req.User, nil, referenceName, git.ObjectHashSHA1.ZeroOID, referenceValue); err != nil {
+	if err := s.updateReferenceWithHooks(ctx, req.Repository, req.User, nil, referenceName, objectHash.ZeroOID, referenceValue); err != nil {
 		var notAllowedError hook.NotAllowedError
 		var customHookErr updateref.CustomHookError
 		var updateRefError updateref.Error
diff --git a/internal/gitaly/service/operations/user_delete_branch_test.go b/internal/gitaly/service/operations/user_delete_branch_test.go
index 7976fa4163..918cf855d7 100644
--- a/internal/gitaly/service/operations/user_delete_branch_test.go
+++ b/internal/gitaly/service/operations/user_delete_branch_test.go
@@ -1,5 +1,3 @@
-//go:build !gitaly_test_sha256
-
 package operations
 
 import (
-- 
GitLab