Merge pull request #257 from MichaelMure/core-fixes

Michael Muré created

Core fixes

Change summary

bug/bug.go              | 15 ++++++---------
bug/bug_actions_test.go |  8 ++++++++
bug/bug_test.go         |  6 ++++++
bug/clocks.go           |  4 ++--
bug/interface.go        |  4 ++--
repository/git.go       |  8 ++++----
repository/mock_repo.go |  4 ++--
repository/repo.go      |  8 ++++----
8 files changed, 34 insertions(+), 23 deletions(-)

Detailed changes

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")
 				}
@@ -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")
 		}
 
@@ -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 {
 
@@ -592,6 +587,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 {

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

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)

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
 		}

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

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

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
 }

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