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