1package cache
2
3import (
4 "github.com/MichaelMure/git-bug/entity"
5 "github.com/MichaelMure/git-bug/identity"
6)
7
8var _ identity.Resolver = &identityCacheResolver{}
9
10// identityCacheResolver is an identity Resolver that retrieve identities from
11// the cache
12type identityCacheResolver struct {
13 cache *RepoCache
14}
15
16func newIdentityCacheResolver(cache *RepoCache) *identityCacheResolver {
17 return &identityCacheResolver{cache: cache}
18}
19
20func (i *identityCacheResolver) ResolveIdentity(id entity.Id) (identity.Interface, error) {
21 return i.cache.ResolveIdentity(id)
22}
23
24var _ identity.Resolver = &identityCacheResolverNoLock{}
25
26// identityCacheResolverNoLock is an identity Resolver that retrieve identities from
27// the cache, without locking it.
28type identityCacheResolverNoLock struct {
29 cache *RepoCache
30}
31
32func newIdentityCacheResolverNoLock(cache *RepoCache) *identityCacheResolverNoLock {
33 return &identityCacheResolverNoLock{cache: cache}
34}
35
36func (ir *identityCacheResolverNoLock) ResolveIdentity(id entity.Id) (identity.Interface, error) {
37 cached, ok := ir.cache.identities[id]
38 if ok {
39 return cached, nil
40 }
41
42 i, err := identity.ReadLocal(ir.cache.repo, id)
43 if err != nil {
44 return nil, err
45 }
46
47 cached = NewIdentityCache(ir.cache, i)
48 ir.cache.identities[id] = cached
49
50 return cached, nil
51}