diff --git a/repository/git.go b/repository/git.go index e67e12f54735dba5fc8091a39fbe900a1f692c20..2348f5d57e9140d2df8b568e2304f154418c4dd3 100644 --- a/repository/git.go +++ b/repository/git.go @@ -367,6 +367,9 @@ func (repo *GitRepo) GetTreeHash(commit Hash) (Hash, error) { // GetOrCreateClock return a Lamport clock stored in the Repo. // If the clock doesn't exist, it's created. func (repo *GitRepo) GetOrCreateClock(name string) (lamport.Clock, error) { + repo.clocksMutex.Lock() + defer repo.clocksMutex.Unlock() + c, err := repo.getClock(name) if err == nil { return c, nil @@ -375,9 +378,6 @@ func (repo *GitRepo) GetOrCreateClock(name string) (lamport.Clock, error) { return nil, err } - repo.clocksMutex.Lock() - defer repo.clocksMutex.Unlock() - c, err = lamport.NewPersistedClock(repo.LocalStorage(), name+"-clock") if err != nil { return nil, err @@ -388,9 +388,6 @@ func (repo *GitRepo) GetOrCreateClock(name string) (lamport.Clock, error) { } func (repo *GitRepo) getClock(name string) (lamport.Clock, error) { - repo.clocksMutex.Lock() - defer repo.clocksMutex.Unlock() - if c, ok := repo.clocks[name]; ok { return c, nil } diff --git a/repository/gogit.go b/repository/gogit.go index 0d34c00aa5a11ca92a5374e7f88e27a3e8ffab9c..741982aaddc91a2a5ddecb927bc33a12c9eaf6f3 100644 --- a/repository/gogit.go +++ b/repository/gogit.go @@ -604,6 +604,9 @@ func (repo *GoGitRepo) ListCommits(ref string) ([]Hash, error) { // GetOrCreateClock return a Lamport clock stored in the Repo. // If the clock doesn't exist, it's created. func (repo *GoGitRepo) GetOrCreateClock(name string) (lamport.Clock, error) { + repo.clocksMutex.Lock() + defer repo.clocksMutex.Unlock() + c, err := repo.getClock(name) if err == nil { return c, nil @@ -612,9 +615,6 @@ func (repo *GoGitRepo) GetOrCreateClock(name string) (lamport.Clock, error) { return nil, err } - repo.clocksMutex.Lock() - defer repo.clocksMutex.Unlock() - c, err = lamport.NewPersistedClock(repo.localStorage, name+"-clock") if err != nil { return nil, err @@ -625,9 +625,6 @@ func (repo *GoGitRepo) GetOrCreateClock(name string) (lamport.Clock, error) { } func (repo *GoGitRepo) getClock(name string) (lamport.Clock, error) { - repo.clocksMutex.Lock() - defer repo.clocksMutex.Unlock() - if c, ok := repo.clocks[name]; ok { return c, nil } diff --git a/repository/mock_repo.go b/repository/mock_repo.go index 74d4cae7ae635c44c84958319adb54b49d8d6d33..02e5010f39a6a25973a7b25a511ba2b32fb516fe 100644 --- a/repository/mock_repo.go +++ b/repository/mock_repo.go @@ -4,6 +4,7 @@ import ( "crypto/sha1" "fmt" "strings" + "sync" "github.com/99designs/keyring" "github.com/go-git/go-billy/v5" @@ -337,6 +338,7 @@ func (m mockRepoForTest) EraseFromDisk() error { } type mockRepoClock struct { + mu sync.Mutex clocks map[string]lamport.Clock } @@ -347,6 +349,9 @@ func NewMockRepoClock() *mockRepoClock { } func (r *mockRepoClock) GetOrCreateClock(name string) (lamport.Clock, error) { + r.mu.Lock() + defer r.mu.Unlock() + if c, ok := r.clocks[name]; ok { return c, nil }