From 0b2a99ab965a1a90e138cc26f12c160a0dac60c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Tue, 19 Nov 2019 00:26:38 +0100 Subject: [PATCH 1/3] bug: don't forget to assign the new packs after a merge fix #235 --- bug/bug.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bug/bug.go b/bug/bug.go index eb0337a421d926afd596ee5b09ce16581f129518..911961b18aec2d356013ef76560c9a09ca64bd57 100644 --- a/bug/bug.go +++ b/bug/bug.go @@ -592,6 +592,8 @@ func (bug *Bug) Merge(repo repository.Repo, other Interface) (bool, error) { bug.lastCommit = hash } + bug.packs = newPacks + // Update the git ref err = repo.UpdateRef(bugsRefPattern+bug.id.String(), bug.lastCommit) if err != nil { From a9b32e6bdaa610e2244816618a316bcdf53545e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Tue, 19 Nov 2019 00:27:40 +0100 Subject: [PATCH 2/3] repo: esthetism rename --- bug/bug.go | 4 ++-- bug/clocks.go | 4 ++-- repository/git.go | 8 ++++---- repository/mock_repo.go | 4 ++-- repository/repo.go | 8 ++++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bug/bug.go b/bug/bug.go index 911961b18aec2d356013ef76560c9a09ca64bd57..f1d36d5229b0b0a48dd3a5b6a0fc80043356f469 100644 --- a/bug/bug.go +++ b/bug/bug.go @@ -197,10 +197,10 @@ func readBug(repo repository.ClockedRepo, ref string) (*Bug, error) { } // Update the clocks - if err := repo.CreateWitness(bug.createTime); err != nil { + if err := repo.WitnessCreate(bug.createTime); err != nil { return nil, errors.Wrap(err, "failed to update create lamport clock") } - if err := repo.EditWitness(bug.editTime); err != nil { + if err := repo.WitnessEdit(bug.editTime); err != nil { return nil, errors.Wrap(err, "failed to update edit lamport clock") } diff --git a/bug/clocks.go b/bug/clocks.go index bb3d81f0f97f58cc1939246ad8a0595fad03203d..52d2354443db67c118c560584f6ee5763d1a612f 100644 --- a/bug/clocks.go +++ b/bug/clocks.go @@ -12,12 +12,12 @@ func Witnesser(repo repository.ClockedRepo) error { return b.Err } - err := repo.CreateWitness(b.Bug.createTime) + err := repo.WitnessCreate(b.Bug.createTime) if err != nil { return err } - err = repo.EditWitness(b.Bug.editTime) + err = repo.WitnessEdit(b.Bug.editTime) if err != nil { return err } diff --git a/repository/git.go b/repository/git.go index 2c72fccd1bb1c882c15cdd64b142d32e9632557f..d4560805754e85ce27c67f49da2351f3bf48d65a 100644 --- a/repository/git.go +++ b/repository/git.go @@ -461,14 +461,14 @@ func (repo *GitRepo) EditTimeIncrement() (lamport.Time, error) { return repo.editClock.Increment() } -// CreateWitness witness another create time and increment the corresponding clock +// WitnessCreate witness another create time and increment the corresponding clock // if needed. -func (repo *GitRepo) CreateWitness(time lamport.Time) error { +func (repo *GitRepo) WitnessCreate(time lamport.Time) error { return repo.createClock.Witness(time) } -// EditWitness witness another edition time and increment the corresponding clock +// WitnessEdit witness another edition time and increment the corresponding clock // if needed. -func (repo *GitRepo) EditWitness(time lamport.Time) error { +func (repo *GitRepo) WitnessEdit(time lamport.Time) error { return repo.editClock.Witness(time) } diff --git a/repository/mock_repo.go b/repository/mock_repo.go index 26c02ede5eb14874f285793e5d79063cb7913155..88c5a1326b07d5941880ae37baf5c545a49dd3a2 100644 --- a/repository/mock_repo.go +++ b/repository/mock_repo.go @@ -236,12 +236,12 @@ func (r *mockRepoForTest) EditTimeIncrement() (lamport.Time, error) { return r.editClock.Increment(), nil } -func (r *mockRepoForTest) CreateWitness(time lamport.Time) error { +func (r *mockRepoForTest) WitnessCreate(time lamport.Time) error { r.createClock.Witness(time) return nil } -func (r *mockRepoForTest) EditWitness(time lamport.Time) error { +func (r *mockRepoForTest) WitnessEdit(time lamport.Time) error { r.editClock.Witness(time) return nil } diff --git a/repository/repo.go b/repository/repo.go index e8c67a5e31e653bd24345b70451ce63ecfdaff04..71bd7a8eeea26b3bebe182f547412c4ddb01c42e 100644 --- a/repository/repo.go +++ b/repository/repo.go @@ -111,13 +111,13 @@ type ClockedRepo interface { // EditTimeIncrement increment the edit clock and return the new value. EditTimeIncrement() (lamport.Time, error) - // CreateWitness witness another create time and increment the corresponding + // WitnessCreate witness another create time and increment the corresponding // clock if needed. - CreateWitness(time lamport.Time) error + WitnessCreate(time lamport.Time) error - // EditWitness witness another edition time and increment the corresponding + // WitnessEdit witness another edition time and increment the corresponding // clock if needed. - EditWitness(time lamport.Time) error + WitnessEdit(time lamport.Time) error } // Witnesser is a function that will initialize the clocks of a repo From ed2ac793e9f353720db2615b06569d05c253b977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Tue, 19 Nov 2019 00:28:06 +0100 Subject: [PATCH 3/3] bug: use NeedCommit() in the interface, drop HasPendingOp() --- bug/bug.go | 9 ++------- bug/bug_actions_test.go | 8 ++++++++ bug/bug_test.go | 6 ++++++ bug/interface.go | 4 ++-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/bug/bug.go b/bug/bug.go index f1d36d5229b0b0a48dd3a5b6a0fc80043356f469..ca817dc1311bdb5eb15654891d8a81b4b147ce91 100644 --- a/bug/bug.go +++ b/bug/bug.go @@ -160,7 +160,7 @@ func readBug(repo repository.ClockedRepo, ref string) (*Bug, error) { rootFound = true } if strings.HasPrefix(entry.Name, createClockEntryPrefix) { - n, err := fmt.Sscanf(string(entry.Name), createClockEntryPattern, &createTime) + n, err := fmt.Sscanf(entry.Name, createClockEntryPattern, &createTime) if err != nil { return nil, errors.Wrap(err, "can't read create lamport time") } @@ -169,7 +169,7 @@ func readBug(repo repository.ClockedRepo, ref string) (*Bug, error) { } } if strings.HasPrefix(entry.Name, editClockEntryPrefix) { - n, err := fmt.Sscanf(string(entry.Name), editClockEntryPattern, &editTime) + n, err := fmt.Sscanf(entry.Name, editClockEntryPattern, &editTime) if err != nil { return nil, errors.Wrap(err, "can't read edit lamport time") } @@ -350,11 +350,6 @@ func (bug *Bug) Append(op Operation) { bug.staging.Append(op) } -// HasPendingOp tell if the bug need to be committed -func (bug *Bug) HasPendingOp() bool { - return !bug.staging.IsEmpty() -} - // Commit write the staging area in Git and move the operations to the packs func (bug *Bug) Commit(repo repository.ClockedRepo) error { diff --git a/bug/bug_actions_test.go b/bug/bug_actions_test.go index 4bc58aea3007b845335c697a8cd5521a8674780d..38dddce218a478095d5cd4f82f7ec0c6bbe3d3ee 100644 --- a/bug/bug_actions_test.go +++ b/bug/bug_actions_test.go @@ -4,6 +4,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/MichaelMure/git-bug/identity" @@ -18,8 +19,10 @@ func TestPushPull(t *testing.T) { bug1, _, err := Create(reneA, time.Now().Unix(), "bug1", "message") require.NoError(t, err) + assert.True(t, bug1.NeedCommit()) err = bug1.Commit(repoA) require.NoError(t, err) + assert.False(t, bug1.NeedCommit()) // distribute the identity _, err = identity.Push(repoA, "origin") @@ -91,8 +94,10 @@ func _RebaseTheirs(t testing.TB) { bug1, _, err := Create(reneA, time.Now().Unix(), "bug1", "message") require.NoError(t, err) + assert.True(t, bug1.NeedCommit()) err = bug1.Commit(repoA) require.NoError(t, err) + assert.False(t, bug1.NeedCommit()) // distribute the identity _, err = identity.Push(repoA, "origin") @@ -111,18 +116,21 @@ func _RebaseTheirs(t testing.TB) { bug2, err := ReadLocalBug(repoB, bug1.Id()) require.NoError(t, err) + assert.False(t, bug2.NeedCommit()) reneB, err := identity.ReadLocal(repoA, reneA.Id()) require.NoError(t, err) _, err = AddComment(bug2, reneB, time.Now().Unix(), "message2") require.NoError(t, err) + assert.True(t, bug2.NeedCommit()) _, err = AddComment(bug2, reneB, time.Now().Unix(), "message3") require.NoError(t, err) _, err = AddComment(bug2, reneB, time.Now().Unix(), "message4") require.NoError(t, err) err = bug2.Commit(repoB) require.NoError(t, err) + assert.False(t, bug2.NeedCommit()) // B --> remote _, err = Push(repoB, "origin") diff --git a/bug/bug_test.go b/bug/bug_test.go index 4e8a94409bca5cebb8dad736951cbc11da65ab12..35e8a39597936f43945259ecc990dc96a1687c60 100644 --- a/bug/bug_test.go +++ b/bug/bug_test.go @@ -78,8 +78,11 @@ func TestBugCommitLoad(t *testing.T) { repo := repository.NewMockRepoForTest() + assert.True(t, bug1.NeedCommit()) + err := bug1.Commit(repo) assert.Nil(t, err) + assert.False(t, bug1.NeedCommit()) bug2, err := ReadLocalBug(repo, bug1.Id()) assert.NoError(t, err) @@ -90,8 +93,11 @@ func TestBugCommitLoad(t *testing.T) { bug1.Append(setTitleOp) bug1.Append(addCommentOp) + assert.True(t, bug1.NeedCommit()) + err = bug1.Commit(repo) assert.Nil(t, err) + assert.False(t, bug1.NeedCommit()) bug3, err := ReadLocalBug(repo, bug1.Id()) assert.NoError(t, err) diff --git a/bug/interface.go b/bug/interface.go index 8266e99e3dea77821626d670d477e2c09b8f86f5..796ee569d7f86a8d6ed67acd9545ae49753a6f3e 100644 --- a/bug/interface.go +++ b/bug/interface.go @@ -16,8 +16,8 @@ type Interface interface { // Append an operation into the staging area, to be committed later Append(op Operation) - // Append an operation into the staging area, to be committed later - HasPendingOp() bool + // Indicate that the in-memory state changed and need to be commit in the repository + NeedCommit() bool // Commit write the staging area in Git and move the operations to the packs Commit(repo repository.ClockedRepo) error