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

@@ -4,7 +4,6 @@ import (
"flag"
"fmt"
"os"
"time"
"github.com/taigrr/gico/types"
"github.com/taigrr/gico/ui"
@@ -43,15 +42,6 @@ func NewDataSet() types.DataSet {
return make(types.DataSet)
}
func NewCommit(Author, Message, Repo, Path string, LOC int) types.Commit {
ci := types.Commit{
Message: Message,
Author: Author, LOC: LOC, TimeStamp: time.Now(),
Repo: Repo, Path: Path,
}
return ci
}
func loadRepo() {
}

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 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) {

View File

@@ -10,12 +10,13 @@ func NewDataSet() DataSet {
return make(DataSet)
}
func NewCommit(Author, Message, Repo, Path string, LOC int) Commit {
return Commit{
Message: Message,
Author: Author, LOC: LOC, TimeStamp: time.Now(),
func NewCommit(Author, Message, Repo, Path string, Added, Deleted, FilesChanged int) Commit {
ci := Commit{
Message: Message, Added: Added, Deleted: Deleted,
Author: Author, FilesChanged: FilesChanged, TimeStamp: time.Now(),
Repo: Repo, Path: Path,
}
return ci
}
func (yf Freq) String() string {