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}