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 "gitroot.dev/server/logger"
9 "gitroot.dev/server/repository"
10 "gitroot.dev/server/user"
11)
12
13func (m *Manager) syncRepos(reposToCreate []repository.RepoConf, reposToDelete []string, pusher user.SimpleUser) {
14 if len(reposToCreate) > 0 {
15 plugins, err := m.pluginManager.Availables(m.ctx)
16 if err != nil {
17 m.logger.Error("can't get availables plugins", err)
18 return
19 }
20 contentPlugins, users := m.pluginManager.ToNewRepo(false, true, plugins)
21
22 users = append(users, pusher)
23
24 for _, repo := range reposToCreate {
25 m.Start(Task{
26 call: m.createRepo,
27 t: repoToCreateTaskInput{
28 conf: repo,
29 users: users,
30 availablePlugins: contentPlugins,
31 },
32 })
33 }
34 }
35 for _, repo := range reposToDelete {
36 m.Start(Task{
37 call: m.deleteRepo,
38 t: repoToDeleteTaskInput{
39 repoName: repo,
40 },
41 })
42 }
43}
44
45type repoToCreateTaskInput struct {
46 conf repository.RepoConf
47 users []user.SimpleUser
48 availablePlugins []byte
49}
50
51func (m *Manager) createRepo(input interface{}) error {
52 repo := input.(repoToCreateTaskInput)
53 m.logger.Info("create repo", logger.NewLoggerPair("name", repo.conf.Name))
54 return m.repoManager.CreateUserRepo(m.ctx, repo.conf, repo.users, repo.availablePlugins)
55}
56
57type repoToDeleteTaskInput struct {
58 repoName string
59}
60
61func (m *Manager) deleteRepo(input interface{}) error {
62 repo := input.(repoToDeleteTaskInput)
63 m.logger.Info("delete repo", logger.NewLoggerPair("name", repo.repoName))
64 return m.repoManager.Delete(repo.repoName)
65}