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 repository
6
7import (
8 "context"
9
10 "github.com/go-git/go-git/v5/plumbing"
11 "github.com/samber/oops"
12 "gitroot.dev/server/logger"
13 "gitroot.dev/server/user"
14)
15
16func (m *Manager) ForgeRepoNeedOwner(ctx context.Context, u user.SimpleUser) error {
17 errBuilder := oops.Code("NeedOwner").With("FirstPull add owner", u.Pseudo)
18
19 repo, err := m.OpenForgeRepo(logger.AddCaller(ctx, "ForgeRepoNeedOwner"))
20 defer repo.Close()
21 if err != nil {
22 return errBuilder.Wrapf(err, "OpenFile")
23 }
24
25 if !repo.Exists("first_pull") {
26 return nil
27 }
28
29 repoWriter, err := repo.WillWrite(plumbing.HEAD)
30 if err != nil {
31 return errBuilder.Wrapf(err, "will write")
32 }
33
34 fileUsersContent, err := repo.AppendUserToGroup("owner", u)
35 if err != nil {
36 return errBuilder.Wrapf(err, "AppendUser")
37 }
38
39 if err := repoWriter.Write(m.conf.PathFileUsers(), fileUsersContent); err != nil {
40 return errBuilder.Wrapf(err, "WriteUser")
41 }
42
43 _, err = repoWriter.worktree.Remove("first_pull")
44 if err != nil {
45 return errBuilder.Wrapf(err, "remove first_pull")
46 }
47
48 if _, err := repoWriter.CommitAll("init", m.userManager.RootCommiter()); err != nil {
49 return errBuilder.Wrapf(err, "CommitAll")
50 }
51
52 return nil
53}