GitRoot

craft your forge, build your project, grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: EUPL-1.2
 4
 5package background
 6
 7import (
 8	"github.com/go-git/go-git/v5/plumbing"
 9	"github.com/samber/oops"
10	"gitroot.dev/server/logger"
11)
12
13type deleteBranchTaskInput struct {
14	repoName   string
15	branchName string
16}
17
18func (m *Manager) DeleteBranch(repoName string, toDeleteBranchName string) {
19	m.Start(Task{
20		call: m.deleteBranch,
21		t: deleteBranchTaskInput{
22			repoName:   repoName,
23			branchName: toDeleteBranchName,
24		},
25	})
26}
27
28func (m *Manager) deleteBranch(input interface{}) error {
29	deleteBranchInput := input.(deleteBranchTaskInput)
30	errorHandler := oops.
31		With("repoName", deleteBranchInput.repoName).
32		With("branchName", deleteBranchInput.branchName)
33
34	m.logger.Warn("will delete branch", logger.NewLoggerPair("branch", deleteBranchInput.branchName))
35
36	repo, err := m.repoManager.Open(logger.AddCaller(m.ctx, "deleteBranch"), deleteBranchInput.repoName)
37	if err != nil {
38		return errorHandler.Wrapf(err, "can't open repository")
39	}
40	defer repo.Close()
41
42	branchRef := plumbing.NewBranchReferenceName(deleteBranchInput.branchName)
43
44	write, err := repo.WillWrite(branchRef)
45	if err != nil {
46		return errorHandler.Wrapf(err, "can't open repository in write")
47	}
48	return write.DeleteBranchInStore(branchRef)
49}