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}