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}