aboutsummaryrefslogtreecommitdiffstats
path: root/bug/bug.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2020-06-23 18:02:54 +0200
committerMichael Muré <batolettre@gmail.com>2020-06-26 19:14:22 +0200
commit88ad7e606f1cbf9e47b968a208e3510f7f9a81c5 (patch)
tree00e847500b34c6f9a721c71474993d1c08ae8fb1 /bug/bug.go
parent2dd0dbb1344ae9293aae05346f977b5d5907934b (diff)
downloadgit-bug-88ad7e606f1cbf9e47b968a208e3510f7f9a81c5.tar.gz
repository: remove tie to Bug, improved and reusable testing
- allow the creation of arbitrary Lamport clocks, freeing the way to new entities and removing Bug specific (upper layer) code. - generalize the memory-only and persisted Lamport clocks behind a common interface - rework the tests to provide reusable testing code for a Repo, a Clock, a Config, opening a path to add a new Repo implementation more easily - test previously untested components with those new tests Note: one problem found during this endeavor is that `identity.Version` also need to store one time + Lamport time for each other Entity (Bug, config, PR ...). This could possibly done without breaking change but it would be much easier to wait for https://github.com/MichaelMure/git-bug-migration to happen.
Diffstat (limited to 'bug/bug.go')
-rw-r--r--bug/bug.go27
1 files changed, 23 insertions, 4 deletions
diff --git a/bug/bug.go b/bug/bug.go
index e3378770..66609e6c 100644
--- a/bug/bug.go
+++ b/bug/bug.go
@@ -27,6 +27,9 @@ const createClockEntryPattern = "create-clock-%d"
const editClockEntryPrefix = "edit-clock-"
const editClockEntryPattern = "edit-clock-%d"
+const creationClockName = "bug-create"
+const editClockName = "bug-edit"
+
var ErrBugNotExist = errors.New("bug doesn't exist")
func NewErrMultipleMatchBug(matching []entity.Id) *entity.ErrMultipleMatch {
@@ -197,10 +200,18 @@ func readBug(repo repository.ClockedRepo, ref string) (*Bug, error) {
}
// Update the clocks
- if err := repo.WitnessCreate(bug.createTime); err != nil {
+ createClock, err := repo.GetOrCreateClock(creationClockName)
+ if err != nil {
+ return nil, err
+ }
+ if err := createClock.Witness(bug.createTime); err != nil {
return nil, errors.Wrap(err, "failed to update create lamport clock")
}
- if err := repo.WitnessEdit(bug.editTime); err != nil {
+ editClock, err := repo.GetOrCreateClock(editClockName)
+ if err != nil {
+ return nil, err
+ }
+ if err := editClock.Witness(bug.editTime); err != nil {
return nil, errors.Wrap(err, "failed to update edit lamport clock")
}
@@ -412,7 +423,11 @@ func (bug *Bug) Commit(repo repository.ClockedRepo) error {
return err
}
- bug.editTime, err = repo.EditTimeIncrement()
+ editClock, err := repo.GetOrCreateClock(editClockName)
+ if err != nil {
+ return err
+ }
+ bug.editTime, err = editClock.Increment()
if err != nil {
return err
}
@@ -423,7 +438,11 @@ func (bug *Bug) Commit(repo repository.ClockedRepo) error {
Name: fmt.Sprintf(editClockEntryPattern, bug.editTime),
})
if bug.lastCommit == "" {
- bug.createTime, err = repo.CreateTimeIncrement()
+ createClock, err := repo.GetOrCreateClock(creationClockName)
+ if err != nil {
+ return err
+ }
+ bug.createTime, err = createClock.Increment()
if err != nil {
return err
}