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}