Skip to content

Commit d55102c

Browse files
committed
Allowing to go back to main from testing on no change
1 parent 4eb600b commit d55102c

File tree

2 files changed

+78
-12
lines changed

2 files changed

+78
-12
lines changed

internal/repository/repository.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ func (r *repository) Fetch(remoteName string) (err error) {
8686
}
8787

8888
func (r *repository) Update() error {
89+
selectedCommitId := ""
90+
8991
// We first walk on all Main branches in order to get a commit
9092
// from a Main branch. Once found, we could then walk on all
9193
// Testing branches to get a testing commit on top of the Main
@@ -116,15 +118,15 @@ func (r *repository) Update() error {
116118
remote.Main.CommitMsg = msg
117119
remote.Main.OnTopOf = r.RepositoryStatus.MainCommitId
118120

119-
if r.RepositoryStatus.SelectedCommitId == "" {
120-
r.RepositoryStatus.SelectedCommitId = head.String()
121+
if selectedCommitId == "" {
122+
selectedCommitId = head.String()
121123
r.RepositoryStatus.SelectedCommitMsg = msg
122124
r.RepositoryStatus.SelectedBranchName = remote.Main.Name
123125
r.RepositoryStatus.SelectedRemoteName = remote.Name
124126
r.RepositoryStatus.SelectedBranchIsTesting = false
125127
}
126128
if head.String() != r.RepositoryStatus.MainCommitId {
127-
r.RepositoryStatus.SelectedCommitId = head.String()
129+
selectedCommitId = head.String()
128130
r.RepositoryStatus.SelectedCommitMsg = msg
129131
r.RepositoryStatus.SelectedBranchName = remote.Main.Name
130132
r.RepositoryStatus.SelectedBranchIsTesting = false
@@ -166,8 +168,8 @@ func (r *repository) Update() error {
166168
remote.Testing.CommitMsg = msg
167169
remote.Testing.OnTopOf = r.RepositoryStatus.MainCommitId
168170

169-
if head.String() != r.RepositoryStatus.SelectedCommitId && head.String() != r.RepositoryStatus.MainCommitId {
170-
r.RepositoryStatus.SelectedCommitId = head.String()
171+
if head.String() != selectedCommitId && head.String() != r.RepositoryStatus.MainCommitId {
172+
selectedCommitId = head.String()
171173
r.RepositoryStatus.SelectedCommitMsg = msg
172174
r.RepositoryStatus.SelectedBranchName = remote.Testing.Name
173175
r.RepositoryStatus.SelectedBranchIsTesting = true
@@ -176,7 +178,11 @@ func (r *repository) Update() error {
176178
}
177179
}
178180

179-
if err := hardReset(*r, plumbing.NewHash(r.RepositoryStatus.SelectedCommitId)); err != nil {
181+
if selectedCommitId != "" {
182+
r.RepositoryStatus.SelectedCommitId = selectedCommitId
183+
}
184+
185+
if err := hardReset(*r, plumbing.NewHash(selectedCommitId)); err != nil {
180186
r.RepositoryStatus.Error = err
181187
r.RepositoryStatus.ErrorMsg = err.Error()
182188
return err

internal/repository/repository_test.go

+66-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package repository
22

33
import (
4+
"testing"
5+
46
"github.com/go-git/go-git/v5/plumbing"
57
"github.com/nlewo/comin/internal/types"
68
"github.com/stretchr/testify/assert"
7-
"testing"
89
)
910

1011
func TestNew(t *testing.T) {
@@ -272,16 +273,15 @@ func TestMultipleRemote(t *testing.T) {
272273
assert.Equal(t, "main", r.RepositoryStatus.SelectedBranchName)
273274
assert.Equal(t, "r2", r.RepositoryStatus.SelectedRemoteName)
274275

275-
// r1/main: c1 - c2 - c3 - c4 - c5
276-
// r2/main: c1 - c2 - c3 - c4 - *c5
277-
// FIXME: maybe it could be better to switch to the first remote, ie r1/main
276+
// r1/main: c1 - c2 - c3 - c4 - *c5
277+
// r2/main: c1 - c2 - c3 - c4 - c5
278278
newCommitId, err = commitFile(r1, r1Dir, "main", "file-5")
279279
assert.Nil(t, err)
280280
_ = r.Fetch("")
281281
_ = r.Update()
282282
assert.Equal(t, newCommitId, r.RepositoryStatus.SelectedCommitId)
283283
assert.Equal(t, "main", r.RepositoryStatus.SelectedBranchName)
284-
assert.Equal(t, "r2", r.RepositoryStatus.SelectedRemoteName)
284+
assert.Equal(t, "r1", r.RepositoryStatus.SelectedRemoteName)
285285

286286
// r1/main: c1 - c2 - c3 - c4 - c5 - c6
287287
// r2/main: c1 - c2 - c3 - c4 - c5 - c6
@@ -413,9 +413,9 @@ func TestTestingSwitch(t *testing.T) {
413413
// r2/testing: c1 - c2 - c3 - *c4
414414
_ = r.Fetch("")
415415
_ = r.Update()
416-
assert.Equal(t, c4, r.RepositoryStatus.SelectedCommitId)
417416
assert.Equal(t, "testing", r.RepositoryStatus.SelectedBranchName)
418417
assert.Equal(t, "r2", r.RepositoryStatus.SelectedRemoteName)
418+
assert.Equal(t, c4, r.RepositoryStatus.SelectedCommitId)
419419

420420
// r1/main: c1 - c2 - c3
421421
// r1/testing: c1 - c2 - c3
@@ -647,3 +647,63 @@ func TestRepositoryUpdateTesting(t *testing.T) {
647647
assert.Equal(t, "main", r.RepositoryStatus.SelectedBranchName)
648648
assert.Equal(t, "origin", r.RepositoryStatus.SelectedRemoteName)
649649
}
650+
651+
func TestTestingHardReset(t *testing.T) {
652+
var err error
653+
r1Dir := t.TempDir()
654+
cominRepositoryDir := t.TempDir()
655+
r1, err := initRemoteRepostiory(r1Dir, true)
656+
cMain := HeadCommitId(r1)
657+
gitConfig := types.GitConfig{
658+
Path: cominRepositoryDir,
659+
Remotes: []types.Remote{
660+
{
661+
Name: "r1",
662+
URL: r1Dir,
663+
Branches: types.Branches{
664+
Main: types.Branch{
665+
Name: "main",
666+
},
667+
Testing: types.Branch{
668+
Name: "testing",
669+
},
670+
},
671+
Timeout: 30,
672+
},
673+
},
674+
}
675+
r, err := New(gitConfig, RepositoryStatus{})
676+
assert.Nil(t, err)
677+
// r1/main: c1 - c2 - *c3
678+
// r1/testing: c1 - c2 - c3
679+
err = r.Fetch("")
680+
assert.Nil(t, err)
681+
err = r.Update()
682+
assert.Nil(t, err)
683+
assert.Equal(t, cMain, r.RepositoryStatus.SelectedCommitId)
684+
assert.Equal(t, "main", r.RepositoryStatus.SelectedBranchName)
685+
assert.Equal(t, "r1", r.RepositoryStatus.SelectedRemoteName)
686+
687+
// r1/main: c1 - c2 - c3
688+
// r1/testing: c1 - c2 - c3 - *c4
689+
c4, err := commitFile(r1, r1Dir, "testing", "file-4")
690+
err = r.Fetch("")
691+
assert.Nil(t, err)
692+
err = r.Update()
693+
assert.Nil(t, err)
694+
assert.Equal(t, c4, r.RepositoryStatus.SelectedCommitId)
695+
assert.Equal(t, "testing", r.RepositoryStatus.SelectedBranchName)
696+
assert.Equal(t, "r1", r.RepositoryStatus.SelectedRemoteName)
697+
698+
// r1/main: c1 - c2 - *c3
699+
// r1/testing: c1 - c2 - c3
700+
ref := plumbing.NewHashReference("refs/heads/testing", plumbing.NewHash(cMain))
701+
r1.Storer.SetReference(ref)
702+
err = r.Fetch("")
703+
assert.Nil(t, err)
704+
err = r.Update()
705+
assert.Nil(t, err)
706+
assert.Equal(t, cMain, r.RepositoryStatus.SelectedCommitId)
707+
assert.Equal(t, "main", r.RepositoryStatus.SelectedBranchName)
708+
assert.Equal(t, "r1", r.RepositoryStatus.SelectedRemoteName)
709+
}

0 commit comments

Comments
 (0)