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}