add repo caching for non-chan

This commit is contained in:
2023-02-07 00:27:02 -08:00
parent f5f268dff7
commit c2d04ed3b0
6 changed files with 42 additions and 24 deletions

View File

@@ -26,6 +26,23 @@ func init() {
repoCache = make(map[string][]types.Commit)
}
func CacheRepo(path string, commits []types.Commit) {
mapTex.Lock()
defer mapTex.Unlock()
repoCache[path] = commits
}
func GetCachedRepo(path string, head string) ([]types.Commit, bool) {
mapTex.RLock()
defer mapTex.RUnlock()
if commits, ok := repoCache[path]; !ok {
return []types.Commit{}, false
} else if len(commits) > 0 && commits[0].Hash == head {
return commits, true
}
return []types.Commit{}, false
}
func IsRepoCached(path string, head string) bool {
mapTex.RLock()
defer mapTex.RUnlock()
@@ -36,12 +53,6 @@ func IsRepoCached(path string, head string) bool {
}
}
func CacheRepo(path string, commits []types.Commit) {
mapTex.Lock()
defer mapTex.Unlock()
repoCache[path] = commits
}
func hashSlice(in []string) string {
sort.Strings(in)
sb := strings.Builder{}

View File

@@ -66,7 +66,7 @@ func YearFreqFromChan(cc chan types.Commit, year int) types.Freq {
func (repo Repo) GetCommitChan() (chan types.Commit, error) {
cc := make(chan types.Commit, 30)
r := git.Repository(repo)
r := git.Repository(repo.Repo)
ref, err := r.Head()
if err != nil {
return cc, err

View File

@@ -61,14 +61,26 @@ func (paths RepoSet) Frequency(year int, authors []string) (types.Freq, error) {
return gfreq, nil
}
func (repo Repo) GetHead() (string, error) {
r := git.Repository(repo.Repo)
ref, err := r.Head()
if err != nil {
return "", err
}
return ref.String(), nil
}
func (repo Repo) GetCommitSet() (CommitSet, error) {
cs := CommitSet{}
commits := []types.Commit{}
r := git.Repository(repo)
r := git.Repository(repo.Repo)
ref, err := r.Head()
if err != nil {
return cs, err
}
if cachedRepo, ok := GetCachedRepo(repo.Path, ref.String()); ok {
return CommitSet{Commits: cachedRepo}, nil
}
cIter, err := r.Log(&git.LogOptions{From: ref.Hash()})
if err != nil {
return cs, err
@@ -80,6 +92,7 @@ func (repo Repo) GetCommitSet() (CommitSet, error) {
return nil
})
cs.Commits = commits
CacheRepo(repo.Path, cs.Commits)
return cs, nil
}

View File

@@ -11,7 +11,10 @@ import (
)
type (
Repo git.Repository
Repo struct {
Repo git.Repository
Path string
}
CommitSet struct {
Commits []types.Commit
Year int
@@ -28,7 +31,7 @@ func OpenRepo(directory string) (Repo, error) {
}
}
r, err := git.PlainOpenWithOptions(directory, &(git.PlainOpenOptions{DetectDotGit: true}))
return Repo(*r), err
return Repo{Repo: *r, Path: directory}, err
}
func GetMRRepos() (RepoSet, error) {