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