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	"sync"
 9)
10
11type cacheRepos struct {
12	mu    sync.Mutex
13	repos map[string]*cacheRepo
14}
15
16type cacheRepo struct {
17	nb   int
18	repo *GitRootRepository
19}
20
21func (c *cacheRepos) Get(repoName string) (*GitRootRepository, bool) {
22	c.mu.Lock()
23	defer c.mu.Unlock()
24	l, ok := c.repos[repoName]
25	if !ok {
26		return nil, false
27	}
28	return l.repo, ok
29}
30
31func (c *cacheRepos) Add(repo *GitRootRepository) {
32	c.mu.Lock()
33	defer c.mu.Unlock()
34	if l, ok := c.repos[repo.name]; !ok {
35		c.repos[repo.name] = &cacheRepo{nb: 1, repo: repo}
36	} else {
37		l.nb++
38	}
39}
40
41func (c *cacheRepos) Remove(repoName string) int {
42	c.mu.Lock()
43	defer c.mu.Unlock()
44	if l, ok := c.repos[repoName]; !ok {
45		return -1
46	} else {
47		l.nb--
48		return l.nb
49	}
50}
51
52func (c *cacheRepos) Delete(repoName string, beforeDelete func() error) error {
53	c.mu.Lock()
54	defer c.mu.Unlock()
55	defer delete(c.repos, repoName)
56	return beforeDelete()
57}