mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 02:01:43 +03:00
commit
abae3c245e
15
bug/bug.go
15
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 {
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user