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}