Section headers for rebase todos and actual commits (#4463)

- **PR Description**

During interactive rebase, or when stopping with conflicts in a
cherry-pick or revert, show section headers for the todo items and the
actual commits. This makes it much clearer where the current head commit
is. Get rid of the "<-- YOU ARE HERE" marker that we would previously
show; it is no longer needed. (We still show the "<-- CONFLICT" marker
though.)

For example:
```
╭─[4]─Commits - Reflog───────────────────────────╮
│--- Pending rebase todos ---                    │
│6562f903 pick  CI commit 03                     │
│--- Commits ---                                 │
│56a04448       CI ◯ commit 02                   │
│6d0c0e41       CI ◯ commit 01                   │
```
This commit is contained in:
Stefan Haller 2025-04-20 16:09:40 +02:00 committed by GitHub
commit 548d486aee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
56 changed files with 324 additions and 134 deletions

View file

@ -496,7 +496,7 @@ func (self *CommitLoader) getSequencerCommits() []*models.Commit {
commits = utils.Prepend(commits, &models.Commit{
Hash: t.Commit,
Name: t.Msg,
Status: models.StatusRebasing,
Status: models.StatusCherryPickingOrReverting,
Action: t.Command,
})
}

View file

@ -18,6 +18,7 @@ const (
StatusPushed
StatusMerged
StatusRebasing
StatusCherryPickingOrReverting
StatusConflicted
StatusReflog
)

View file

@ -26,6 +26,8 @@ type ListContextTrait struct {
func (self *ListContextTrait) IsListContext() {}
func (self *ListContextTrait) FocusLine() {
self.Context.FocusLine()
// Doing this at the end of the layout function because we need the view to be
// resized before we focus the line, otherwise if we're in accordion mode
// the view could be squashed and won't how to adjust the cursor/origin.

View file

@ -1,6 +1,7 @@
package context
import (
"fmt"
"log"
"strings"
"time"
@ -40,7 +41,6 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext {
}
}
showYouAreHereLabel := c.Model().WorkingTreeStateAtLastCommitRefresh.CanShowTodos()
hasRebaseUpdateRefsConfig := c.Git().Config.GetRebaseUpdateRefs()
return presentation.GetCommitListDisplayStrings(
@ -62,10 +62,54 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext {
endIdx,
shouldShowGraph(c),
c.Model().BisectInfo,
showYouAreHereLabel,
)
}
getNonModelItems := func() []*NonModelItem {
result := []*NonModelItem{}
if c.Model().WorkingTreeStateAtLastCommitRefresh.CanShowTodos() {
if c.Model().WorkingTreeStateAtLastCommitRefresh.Rebasing {
result = append(result, &NonModelItem{
Index: 0,
Content: fmt.Sprintf("--- %s ---", c.Tr.PendingRebaseTodosSectionHeader),
})
}
if c.Model().WorkingTreeStateAtLastCommitRefresh.CherryPicking ||
c.Model().WorkingTreeStateAtLastCommitRefresh.Reverting {
_, firstCherryPickOrRevertTodo, found := lo.FindIndexOf(
c.Model().Commits, func(c *models.Commit) bool {
return c.Status == models.StatusCherryPickingOrReverting ||
c.Status == models.StatusConflicted
})
if !found {
firstCherryPickOrRevertTodo = 0
}
label := lo.Ternary(c.Model().WorkingTreeStateAtLastCommitRefresh.CherryPicking,
c.Tr.PendingCherryPicksSectionHeader,
c.Tr.PendingRevertsSectionHeader)
result = append(result, &NonModelItem{
Index: firstCherryPickOrRevertTodo,
Content: fmt.Sprintf("--- %s ---", label),
})
}
_, firstRealCommit, found := lo.FindIndexOf(
c.Model().Commits, func(c *models.Commit) bool {
return !c.IsTODO()
})
if !found {
firstRealCommit = 0
}
result = append(result, &NonModelItem{
Index: firstRealCommit,
Content: fmt.Sprintf("--- %s ---", c.Tr.CommitsSectionHeader),
})
}
return result
}
ctx := &LocalCommitsContext{
LocalCommitsViewModel: viewModel,
SearchTrait: NewSearchTrait(c),
@ -82,6 +126,7 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext {
ListRenderer: ListRenderer{
list: viewModel,
getDisplayStrings: getDisplayStrings,
getNonModelItems: getNonModelItems,
},
c: c,
refreshViewportOnChange: true,

View file

@ -54,6 +54,9 @@ func (self *SimpleContext) HandleFocusLost(opts types.OnFocusLostOpts) {
}
}
func (self *SimpleContext) FocusLine() {
}
func (self *SimpleContext) HandleRender() {
if self.handleRenderFunc != nil {
self.handleRenderFunc()

View file

@ -77,7 +77,6 @@ func NewSubCommitsContext(
endIdx,
shouldShowGraph(c),
git_commands.NewNullBisectInfo(),
false,
)
}

View file

@ -56,7 +56,6 @@ func GetCommitListDisplayStrings(
endIdx int,
showGraph bool,
bisectInfo *git_commands.BisectInfo,
showYouAreHereLabel bool,
) [][]string {
mutex.Lock()
defer mutex.Unlock()
@ -185,11 +184,6 @@ func GetCommitListDisplayStrings(
for i, commit := range filteredCommits {
unfilteredIdx := i + startIdx
bisectStatus = getBisectStatus(unfilteredIdx, commit.Hash, bisectInfo, bisectBounds)
isYouAreHereCommit := false
if showYouAreHereLabel && (commit.Status == models.StatusConflicted || unfilteredIdx == rebaseOffset) {
isYouAreHereCommit = true
showYouAreHereLabel = false
}
isMarkedBaseCommit := commit.Hash != "" && commit.Hash == markedBaseCommit
if isMarkedBaseCommit {
willBeRebased = true
@ -211,7 +205,6 @@ func GetCommitListDisplayStrings(
fullDescription,
bisectStatus,
bisectInfo,
isYouAreHereCommit,
))
}
return lines
@ -364,7 +357,6 @@ func displayCommit(
fullDescription bool,
bisectStatus BisectStatus,
bisectInfo *git_commands.BisectInfo,
isYouAreHereCommit bool,
) []string {
bisectString := getBisectStatusText(bisectStatus, bisectInfo)
@ -427,14 +419,8 @@ func displayCommit(
}
mark := ""
if isYouAreHereCommit {
color := style.FgYellow
text := common.Tr.YouAreHere
if commit.Status == models.StatusConflicted {
color = style.FgRed
text = common.Tr.ConflictLabel
}
youAreHere := color.Sprintf("<-- %s ---", text)
youAreHere := style.FgRed.Sprintf("<-- %s ---", common.Tr.ConflictLabel)
mark = fmt.Sprintf("%s ", youAreHere)
} else if isMarkedBaseCommit {
rebaseFromHere := style.FgYellow.Sprint(common.Tr.MarkedCommitMarker)
@ -505,7 +491,7 @@ func getHashColor(
hashColor = style.FgYellow
case models.StatusMerged:
hashColor = style.FgGreen
case models.StatusRebasing, models.StatusConflicted:
case models.StatusRebasing, models.StatusCherryPickingOrReverting, models.StatusConflicted:
hashColor = style.FgBlue
case models.StatusReflog:
hashColor = style.FgBlue

View file

@ -40,7 +40,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
endIdx int
showGraph bool
bisectInfo *git_commands.BisectInfo
showYouAreHereLabel bool
expected string
focus bool
}{
@ -223,12 +222,11 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: true,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1 pick commit1
hash2 pick commit2
hash3 <-- YOU ARE HERE --- commit3
hash3 commit3
hash4 commit4
hash5 commit5
`),
@ -247,11 +245,10 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: true,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash2 pick commit2
hash3 <-- YOU ARE HERE --- commit3
hash3 commit3
hash4 commit4
hash5 commit5
`),
@ -270,7 +267,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: true,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash4 commit4
@ -291,7 +287,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: true,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1 pick commit1
@ -312,7 +307,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: true,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash5 commit5
@ -332,33 +326,12 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: true,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1 pick commit1
hash2 pick commit2
`),
},
{
testName: "don't show YOU ARE HERE label when not asked for (e.g. in branches panel)",
commits: []*models.Commit{
{Name: "commit1", Hash: "hash1", Parents: []string{"hash2"}, Action: todo.Pick},
{Name: "commit2", Hash: "hash2", Parents: []string{"hash3"}},
{Name: "commit3", Hash: "hash3", Parents: []string{"hash4"}},
},
startIdx: 0,
endIdx: 3,
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1 pick commit1
hash2 commit2
hash3 commit3
`),
},
{
testName: "graph in divergence view - all commits visible",
commits: []*models.Commit{
@ -376,7 +349,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1r commit1
@ -406,7 +378,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash3r commit3
@ -434,7 +405,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1r commit1
@ -461,7 +431,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash2l commit2
@ -487,7 +456,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1r commit1
@ -508,7 +476,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1l commit1
@ -530,7 +497,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
showGraph: true,
bisectInfo: git_commands.NewNullBisectInfo(),
cherryPickedCommitHashSet: set.New[string](),
showYouAreHereLabel: false,
now: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
expected: formatExpected(`
hash1r commit1
@ -596,7 +562,6 @@ func TestGetCommitListDisplayStrings(t *testing.T) {
s.endIdx,
s.showGraph,
s.bisectInfo,
s.showYouAreHereLabel,
)
renderedLines, _ := utils.RenderDisplayStrings(result, nil)

View file

@ -105,6 +105,7 @@ type Context interface {
HandleFocus(opts OnFocusOpts)
HandleFocusLost(opts OnFocusLostOpts)
FocusLine()
HandleRender()
HandleRenderToMain()
}
@ -173,7 +174,6 @@ type IListContext interface {
ViewIndexToModelIndex(int) int
ModelIndexToViewIndex(int) int
FocusLine()
IsListContext() // used for type switch
RangeSelectEnabled() bool
RenderOnlyVisibleLines() bool

View file

@ -136,5 +136,12 @@ func (gui *Gui) postRefreshUpdate(c types.Context) {
if gui.currentViewName() == c.GetViewName() {
c.HandleFocus(types.OnFocusOpts{})
} else {
// The FocusLine call is included in the HandleFocus method which we
// call for focused views above; but we need to call it here for
// non-focused views to ensure that an inactive selection is painted
// correctly, and that integration tests see the up to date selection
// state.
c.FocusLine()
}
}

View file

@ -348,8 +348,11 @@ type TranslationSet struct {
PullRequestNoUpstream string
ErrorOccurred string
NoRoom string
YouAreHere string
ConflictLabel string
PendingRebaseTodosSectionHeader string
PendingCherryPicksSectionHeader string
PendingRevertsSectionHeader string
CommitsSectionHeader string
YouDied string
RewordNotSupported string
ChangingThisActionIsNotAllowed string
@ -1417,8 +1420,11 @@ func EnglishTranslationSet() *TranslationSet {
PullRequestNoUpstream: "Cannot open a pull request for a branch with no upstream",
ErrorOccurred: "An error occurred! Please create an issue at",
NoRoom: "Not enough room",
YouAreHere: "YOU ARE HERE",
ConflictLabel: "CONFLICT",
PendingRebaseTodosSectionHeader: "Pending rebase todos",
PendingCherryPicksSectionHeader: "Pending cherry-picks",
PendingRevertsSectionHeader: "Pending reverts",
CommitsSectionHeader: "Commits",
YouDied: "YOU DIED!",
RewordNotSupported: "Rewording commits while interactively rebasing is not currently supported",
ChangingThisActionIsNotAllowed: "Changing this kind of rebase todo entry is not allowed",

View file

@ -51,9 +51,11 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Commits().
Focus().
TopLines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp(`pick.*to keep`).IsSelected(),
MatchesRegexp(`pick.*to remove`),
MatchesRegexp(`pick.*CONFLICT.*first change`),
Contains("--- Commits ---"),
MatchesRegexp("second-change-branch unrelated change"),
MatchesRegexp("second change"),
MatchesRegexp("original"),
@ -61,9 +63,11 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
SelectNextItem().
Press(keys.Universal.Remove).
TopLines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp(`pick.*to keep`),
MatchesRegexp(`drop.*to remove`).IsSelected(),
MatchesRegexp(`pick.*CONFLICT.*first change`),
Contains("--- Commits ---"),
MatchesRegexp("second-change-branch unrelated change"),
MatchesRegexp("second change"),
MatchesRegexp("original"),

View file

@ -59,8 +59,10 @@ var CherryPickDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
SelectNextItem().
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick CI two"),
Contains(" CI <-- YOU ARE HERE --- one").IsSelected(),
Contains("--- Commits ---"),
Contains(" CI one").IsSelected(),
Contains(" CI base"),
).
Press(keys.Commits.PasteCommits).
@ -74,8 +76,10 @@ var CherryPickDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Information().Content(DoesNotContain("commit copied"))
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick CI two"),
Contains(" CI <-- YOU ARE HERE --- three"),
Contains("--- Commits ---"),
Contains(" CI three"),
Contains(" CI one"),
Contains(" CI base"),
).

View file

@ -29,8 +29,10 @@ var AmendWhenThereAreConflictsAndAmend = NewIntegrationTest(NewIntegrationTestAr
t.Views().Commits().
Focus().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit three"),
Contains("pick").Contains("<-- CONFLICT --- file1 changed in branch"),
Contains("--- Commits ---"),
Contains("commit two"),
Contains("file1 changed in master"),
Contains("base commit"),

View file

@ -33,8 +33,10 @@ var AmendWhenThereAreConflictsAndCancel = NewIntegrationTest(NewIntegrationTestA
t.Views().Commits().
Focus().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit three"),
Contains("pick").Contains("<-- CONFLICT --- file1 changed in branch"),
Contains("--- Commits ---"),
Contains("commit two"),
Contains("file1 changed in master"),
Contains("base commit"),

View file

@ -44,8 +44,10 @@ var RevertWithConflictMultipleCommits = NewIntegrationTest(NewIntegrationTestArg
Confirm()
}).
Lines(
Contains("--- Pending reverts ---"),
Contains("revert").Contains("CI unrelated change"),
Contains("revert").Contains("CI <-- CONFLICT --- add first line"),
Contains("--- Commits ---"),
Contains("CI ◯ add second line"),
Contains("CI ◯ add first line"),
Contains("CI ◯ unrelated change"),

View file

@ -39,7 +39,9 @@ var RevertWithConflictSingleCommit = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("--- Pending reverts ---"),
Contains("revert").Contains("CI <-- CONFLICT --- add first line"),
Contains("--- Commits ---"),
Contains("CI ◯ add second line"),
Contains("CI ◯ add first line"),
Contains("CI ◯ add empty file"),

View file

@ -43,8 +43,10 @@ func doTheRebaseForAmendTests(t *TestDriver, keys config.KeybindingConfig) {
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit three"),
Contains("pick").Contains("<-- CONFLICT --- file1 changed in branch"),
Contains("--- Commits ---"),
Contains("commit two"),
Contains("file1 changed in master"),
Contains("base commit"),

View file

@ -45,20 +45,26 @@ var AdvancedInteractiveRebase = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Commits().
IsFocused().
Lines(
Contains("--- Pending rebase todos ---"),
Contains(TOP_COMMIT),
Contains(BASE_COMMIT).Contains("YOU ARE HERE"),
Contains("--- Commits ---"),
Contains(BASE_COMMIT),
).
NavigateToLine(Contains(TOP_COMMIT)).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains(TOP_COMMIT).Contains("edit"),
Contains(BASE_COMMIT).Contains("YOU ARE HERE"),
Contains("--- Commits ---"),
Contains(BASE_COMMIT),
).
Tap(func() {
t.Common().ContinueRebase()
}).
Lines(
Contains(TOP_COMMIT).Contains("YOU ARE HERE"),
Contains("--- Pending rebase todos ---"),
Contains("--- Commits ---"),
Contains(TOP_COMMIT),
Contains(BASE_COMMIT),
)
},

View file

@ -34,8 +34,10 @@ var AmendCommitWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
t.Common().AcknowledgeConflicts()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("three"),
Contains("fixup").Contains("<-- CONFLICT --- fixup! two"),
Contains("--- Commits ---"),
Contains("two"),
Contains("one"),
)
@ -66,7 +68,9 @@ var AmendCommitWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("<-- CONFLICT --- three"),
Contains("--- Commits ---"),
Contains("two"),
Contains("one"),
)

View file

@ -24,8 +24,10 @@ var AmendHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 02").IsSelected(),
Contains("commit 01"),
)
@ -48,8 +50,10 @@ var AmendHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 02").IsSelected(),
Contains("commit 01"),
)

View file

@ -24,8 +24,10 @@ var AmendNonHeadCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- commit 02"),
Contains("--- Commits ---"),
Contains("commit 02"),
Contains("commit 01"),
)

View file

@ -26,13 +26,15 @@ var DeleteUpdateRefTodo = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 06"),
Contains("pick").Contains("CI commit 05"),
Contains("pick").Contains("CI commit 04"),
Contains("update-ref").Contains("branch1"),
Contains("pick").Contains("CI commit 03"),
Contains("pick").Contains("CI commit 02"),
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI ◯ commit 01"),
).
NavigateToLine(Contains("update-ref")).
Press(keys.Universal.Remove).
@ -43,12 +45,14 @@ var DeleteUpdateRefTodo = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 06"),
Contains("pick").Contains("CI commit 05"),
Contains("pick").Contains("CI commit 04"),
Contains("pick").Contains("CI commit 03").IsSelected(),
Contains("pick").Contains("CI commit 02"),
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI ◯ commit 01"),
).
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Remove).

View file

@ -41,13 +41,15 @@ var DontShowBranchHeadsForTodoItems = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 04")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 09"),
Contains("pick").Contains("CI commit 08"),
Contains("pick").Contains("CI commit 07"),
Contains("update-ref").Contains("branch2"),
Contains("pick").Contains("CI commit 06"), // no star on this entry, even though branch2 points to it
Contains("pick").Contains("CI commit 05"),
Contains("CI <-- YOU ARE HERE --- commit 04"),
Contains("--- Commits ---"),
Contains("CI commit 04"),
Contains("CI commit 03"),
Contains("CI * commit 02"), // this star is fine though
Contains("CI commit 01"),

View file

@ -39,13 +39,15 @@ var DropTodoCommitWithUpdateRef = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 07"),
Contains("pick").Contains("CI commit 06"),
Contains("pick").Contains("CI commit 05"),
Contains("update-ref").Contains("branch1").DoesNotContain("*"),
Contains("pick").Contains("CI commit 04"),
Contains("pick").Contains("CI commit 03"),
Contains("<-- YOU ARE HERE --- commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("CI commit 02").IsSelected(),
Contains("CI commit 01"),
).
Tap(func() {

View file

@ -25,8 +25,10 @@ var EditAndAutoAmend = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
MatchesRegexp("YOU ARE HERE.*commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 02").IsSelected(),
Contains("commit 01"),
)

View file

@ -24,8 +24,10 @@ var EditFirstCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 02"),
MatchesRegexp("YOU ARE HERE.*commit 01").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 01").IsSelected(),
).
Tap(func() {
t.Common().ContinueRebase()

View file

@ -37,10 +37,12 @@ var EditLastCommitOfStackedBranch = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 03")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 05"),
Contains("pick").Contains("CI commit 04"),
Contains("update-ref").Contains("branch1"),
Contains("<-- YOU ARE HERE --- * commit 03").IsSelected(),
Contains("--- Commits ---"),
Contains("CI * commit 03").IsSelected(),
Contains("CI commit 02"),
Contains("CI commit 01"),
)

View file

@ -23,7 +23,9 @@ var EditNonTodoCommitDuringRebase = NewIntegrationTest(NewIntegrationTestArgs{
).
Press(keys.Universal.Edit).
Lines(
Contains("<-- YOU ARE HERE --- commit 02"),
Contains("--- Pending rebase todos ---"),
Contains("--- Commits ---"),
Contains("commit 02"),
Contains("commit 01"),
).
NavigateToLine(Contains("commit 01")).

View file

@ -27,9 +27,11 @@ var EditRangeSelectDownToMergeOutsideRebase = NewIntegrationTest(NewIntegrationT
Press(keys.Universal.RangeSelectDown).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("edit CI commit 02").IsSelected(),
Contains("edit CI commit 01").IsSelected(),
Contains(" CI ⏣─╮ <-- YOU ARE HERE --- Merge branch 'second-change-branch' into first-change-branch").IsSelected(),
Contains("--- Commits ---").IsSelected(),
Contains(" CI ⏣─╮ Merge branch 'second-change-branch' into first-change-branch").IsSelected(),
Contains(" CI │ ◯ * second-change-branch unrelated change"),
Contains(" CI │ ◯ second change"),
Contains(" CI ◯ │ first change"),

View file

@ -37,12 +37,14 @@ var EditRangeSelectOutsideRebase = NewIntegrationTest(NewIntegrationTestArgs{
).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("merge CI Merge branch 'second-change-branch' into first-change-branch").IsSelected(),
Contains("edit CI first change").IsSelected(),
Contains("edit CI * second-change-branch unrelated change").IsSelected(),
Contains("edit CI second change").IsSelected(),
Contains("edit CI * original").IsSelected(),
Contains(" CI ◯ <-- YOU ARE HERE --- three").IsSelected(),
Contains("--- Commits ---").IsSelected(),
Contains(" CI ◯ three").IsSelected(),
Contains(" CI ◯ two"),
Contains(" CI ◯ one"),
)

View file

@ -32,8 +32,10 @@ var EditTheConflCommit = NewIntegrationTest(NewIntegrationTestArgs{
}).
Focus().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit two"),
Contains("pick").Contains("<-- CONFLICT --- commit three"),
Contains("--- Commits ---"),
Contains("commit one"),
).
NavigateToLine(Contains("<-- CONFLICT --- commit three")).

View file

@ -32,10 +32,12 @@ var InteractiveRebaseOfCopiedBranch = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
// No update-ref todo for branch1 here, even though command-line git would have added it
Contains("pick").Contains("CI commit 03"),
Contains("pick").Contains("CI commit 02"),
Contains("CI <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI commit 01"),
)
},
})

View file

@ -52,7 +52,9 @@ var InteractiveRebaseWithConflictForEditCommand = NewIntegrationTest(NewIntegrat
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("edit").Contains("<-- CONFLICT --- this will conflict").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 03"),
Contains("commit 02"),
Contains("commit 01"),

View file

@ -24,74 +24,88 @@ var MidRebaseRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
// Start a rebase
Press(keys.Universal.Edit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("pick").Contains("commit 07"),
Contains("pick").Contains("commit 06"),
Contains("<-- YOU ARE HERE --- commit 05").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 05").IsSelected(),
Contains("commit 04"),
).
SelectPreviousItem().
// perform various actions on a range of commits
Press(keys.Universal.RangeSelectUp).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("pick").Contains("commit 07").IsSelected(),
Contains("pick").Contains("commit 06").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.MarkCommitAsFixup).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("fixup").Contains("commit 07").IsSelected(),
Contains("fixup").Contains("commit 06").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.PickCommit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("pick").Contains("commit 07").IsSelected(),
Contains("pick").Contains("commit 06").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Universal.Edit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("edit").Contains("commit 07").IsSelected(),
Contains("edit").Contains("commit 06").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.SquashDown).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("squash").Contains("commit 07").IsSelected(),
Contains("squash").Contains("commit 06").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.MoveDownCommit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("squash").Contains("commit 07").IsSelected(),
Contains("squash").Contains("commit 06").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Tap(func() {
@ -99,32 +113,38 @@ var MidRebaseRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
}).
Press(keys.Commits.MoveUpCommit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("squash").Contains("commit 07").IsSelected(),
Contains("squash").Contains("commit 06").IsSelected(),
Contains("pick").Contains("commit 08"),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.MoveUpCommit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 10"),
Contains("squash").Contains("commit 07").IsSelected(),
Contains("squash").Contains("commit 06").IsSelected(),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.MoveUpCommit).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("squash").Contains("commit 07").IsSelected(),
Contains("squash").Contains("commit 06").IsSelected(),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
Press(keys.Commits.MoveUpCommit).
@ -132,12 +152,14 @@ var MidRebaseRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectToast(Contains("Disabled: Cannot move any further"))
}).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("squash").Contains("commit 07").IsSelected(),
Contains("squash").Contains("commit 06").IsSelected(),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08"),
Contains("<-- YOU ARE HERE --- commit 05"),
Contains("--- Commits ---"),
Contains("commit 05"),
Contains("commit 04"),
).
// Verify we can't perform an action on a range that includes both
@ -145,12 +167,14 @@ var MidRebaseRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 08")).
Press(keys.Universal.RangeSelectDown).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("squash").Contains("commit 07"),
Contains("squash").Contains("commit 06"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05").IsSelected(),
Contains("--- Commits ---").IsSelected(),
Contains("commit 05").IsSelected(),
Contains("commit 04"),
).
Press(keys.Commits.MarkCommitAsFixup).
@ -158,12 +182,14 @@ var MidRebaseRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectToast(Contains("Disabled: When rebasing, this action only works on a selection of TODO commits."))
}).
TopLines(
Contains("--- Pending rebase todos ---"),
Contains("squash").Contains("commit 07"),
Contains("squash").Contains("commit 06"),
Contains("pick").Contains("commit 10"),
Contains("pick").Contains("commit 09"),
Contains("pick").Contains("commit 08").IsSelected(),
Contains("<-- YOU ARE HERE --- commit 05").IsSelected(),
Contains("--- Commits ---").IsSelected(),
Contains("commit 05").IsSelected(),
Contains("commit 04"),
).
// continue the rebase

View file

@ -25,25 +25,31 @@ var MoveInRebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 04"),
Contains("commit 03"),
Contains("commit 02"),
Contains("YOU ARE HERE").Contains("commit 01").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 01").IsSelected(),
).
SelectPreviousItem().
Press(keys.Commits.MoveUpCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 04"),
Contains("commit 02").IsSelected(),
Contains("commit 03"),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
Press(keys.Commits.MoveUpCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 02").IsSelected(),
Contains("commit 04"),
Contains("commit 03"),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
// assert we can't move past the top
Press(keys.Commits.MoveUpCommit).
@ -51,24 +57,30 @@ var MoveInRebase = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectToast(Contains("Disabled: Cannot move any further"))
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 02").IsSelected(),
Contains("commit 04"),
Contains("commit 03"),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
Press(keys.Commits.MoveDownCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 04"),
Contains("commit 02").IsSelected(),
Contains("commit 03"),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
Press(keys.Commits.MoveDownCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 04"),
Contains("commit 03"),
Contains("commit 02").IsSelected(),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
// assert we can't move past the bottom
Press(keys.Commits.MoveDownCommit).
@ -76,18 +88,22 @@ var MoveInRebase = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectToast(Contains("Disabled: Cannot move any further"))
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 04"),
Contains("commit 03"),
Contains("commit 02").IsSelected(),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
// move it back up one so that we land in a different order than we started with
Press(keys.Commits.MoveUpCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 04"),
Contains("commit 02").IsSelected(),
Contains("commit 03"),
Contains("YOU ARE HERE").Contains("commit 01"),
Contains("--- Commits ---"),
Contains("commit 01"),
).
Tap(func() {
t.Common().ContinueRebase()
@ -96,7 +112,7 @@ var MoveInRebase = NewIntegrationTest(NewIntegrationTestArgs{
Contains("commit 04"),
Contains("commit 02").IsSelected(),
Contains("commit 03"),
DoesNotContain("YOU ARE HERE").Contains("commit 01"),
Contains("commit 01"),
)
},
})

View file

@ -26,25 +26,29 @@ var MoveUpdateRefTodo = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 01")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 06"),
Contains("pick").Contains("CI commit 05"),
Contains("pick").Contains("CI commit 04"),
Contains("update-ref").Contains("branch1"),
Contains("pick").Contains("CI commit 03"),
Contains("pick").Contains("CI commit 02"),
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI ◯ commit 01"),
).
NavigateToLine(Contains("update-ref")).
Press(keys.Commits.MoveUpCommit).
Press(keys.Commits.MoveUpCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 06"),
Contains("update-ref").Contains("branch1"),
Contains("pick").Contains("CI commit 05"),
Contains("pick").Contains("CI commit 04"),
Contains("pick").Contains("CI commit 03"),
Contains("pick").Contains("CI commit 02"),
Contains("CI ◯ <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI ◯ commit 01"),
).
Tap(func() {
t.Common().ContinueRebase()

View file

@ -26,9 +26,11 @@ var PickRescheduled = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("one")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("three"),
Contains("pick").Contains("two"),
Contains("<-- YOU ARE HERE --- one").IsSelected(),
Contains("--- Commits ---"),
Contains("one").IsSelected(),
).
Tap(func() {
t.Shell().CreateFile("file3", "other content\n")
@ -39,8 +41,10 @@ var PickRescheduled = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("three"),
Contains("<-- YOU ARE HERE --- two"),
Contains("--- Commits ---"),
Contains("two"),
Contains("one"),
)
},

View file

@ -73,9 +73,11 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
// Verify quick start picks the last commit on the main branch
Press(keys.Commits.StartInteractiveRebase).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("feature-branch two").IsSelected(),
Contains("feature-branch one"),
Contains("last main commit").Contains("YOU ARE HERE"),
Contains("--- Commits ---"),
Contains("last main commit"),
Contains("initial commit"),
).
// Try again, verify we fail because we're already rebasing
@ -104,8 +106,10 @@ var QuickStart = NewIntegrationTest(NewIntegrationTestArgs{
).
Press(keys.Commits.StartInteractiveRebase).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("branch-with-merge three").IsSelected(),
Contains("Merge branch 'branch-to-merge'").Contains("YOU ARE HERE"),
Contains("--- Commits ---"),
Contains("Merge branch 'branch-to-merge'"),
Contains("branch-to-merge two"),
Contains("branch-to-merge one"),
Contains("branch-with-merge two"),

View file

@ -39,6 +39,7 @@ var QuickStartKeepSelection = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 02")).
Press(keys.Commits.StartInteractiveRebase).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 07"),
Contains("pick").Contains("CI commit 06"),
Contains("pick").Contains("CI commit 05"),
@ -46,7 +47,8 @@ var QuickStartKeepSelection = NewIntegrationTest(NewIntegrationTestArgs{
Contains("pick").Contains("CI commit 04"),
Contains("pick").Contains("CI commit 03"),
Contains("CI commit 02").IsSelected(),
Contains("CI <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI commit 01"),
)
},
})

View file

@ -43,6 +43,7 @@ var QuickStartKeepSelectionRange = NewIntegrationTest(NewIntegrationTestArgs{
).
Press(keys.Commits.StartInteractiveRebase).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("CI commit 07"),
Contains("CI commit 06"),
Contains("update-ref").Contains("branch2"),
@ -51,7 +52,8 @@ var QuickStartKeepSelectionRange = NewIntegrationTest(NewIntegrationTestArgs{
Contains("update-ref").Contains("branch1").IsSelected(),
Contains("CI commit 03").IsSelected(),
Contains("CI commit 02").IsSelected(),
Contains("CI <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI commit 01"),
)
},
})

View file

@ -34,60 +34,72 @@ var Rebase = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("first commit to edit")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp("pick.*commit to fixup"),
MatchesRegexp("pick.*commit to drop"),
MatchesRegexp("pick.*second commit to edit"),
MatchesRegexp("pick.*commit to squash"),
MatchesRegexp("YOU ARE HERE.*first commit to edit").IsSelected(),
Contains("--- Commits ---"),
Contains("first commit to edit").IsSelected(),
Contains("initial commit"),
).
SelectPreviousItem().
Press(keys.Commits.SquashDown).
Lines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp("pick.*commit to fixup"),
MatchesRegexp("pick.*commit to drop"),
MatchesRegexp("pick.*second commit to edit"),
MatchesRegexp("squash.*commit to squash").IsSelected(),
MatchesRegexp("YOU ARE HERE.*first commit to edit"),
Contains("--- Commits ---"),
Contains("first commit to edit"),
Contains("initial commit"),
).
SelectPreviousItem().
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp("pick.*commit to fixup"),
MatchesRegexp("pick.*commit to drop"),
MatchesRegexp("edit.*second commit to edit").IsSelected(),
MatchesRegexp("squash.*commit to squash"),
MatchesRegexp("YOU ARE HERE.*first commit to edit"),
Contains("--- Commits ---"),
Contains("first commit to edit"),
Contains("initial commit"),
).
SelectPreviousItem().
Press(keys.Universal.Remove).
Lines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp("pick.*commit to fixup"),
MatchesRegexp("drop.*commit to drop").IsSelected(),
MatchesRegexp("edit.*second commit to edit"),
MatchesRegexp("squash.*commit to squash"),
MatchesRegexp("YOU ARE HERE.*first commit to edit"),
Contains("--- Commits ---"),
Contains("first commit to edit"),
Contains("initial commit"),
).
SelectPreviousItem().
Press(keys.Commits.MarkCommitAsFixup).
Lines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp("fixup.*commit to fixup").IsSelected(),
MatchesRegexp("drop.*commit to drop"),
MatchesRegexp("edit.*second commit to edit"),
MatchesRegexp("squash.*commit to squash"),
MatchesRegexp("YOU ARE HERE.*first commit to edit"),
Contains("--- Commits ---"),
Contains("first commit to edit"),
Contains("initial commit"),
).
Tap(func() {
t.Common().ContinueRebase()
}).
Lines(
Contains("--- Pending rebase todos ---"),
MatchesRegexp("fixup.*commit to fixup").IsSelected(),
MatchesRegexp("drop.*commit to drop"),
MatchesRegexp("YOU ARE HERE.*second commit to edit"),
Contains("--- Commits ---"),
Contains("second commit to edit"),
MatchesRegexp("first commit to edit"),
Contains("initial commit"),
).

View file

@ -30,8 +30,10 @@ var RevertDuringRebaseWhenStoppedOnEdit = NewIntegrationTest(NewIntegrationTestA
NavigateToLine(Contains("commit 03")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 04"),
Contains("<-- YOU ARE HERE --- commit 03").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 03").IsSelected(),
Contains("commit 02"),
Contains("commit 01"),
Contains("master commit 2"),
@ -47,8 +49,10 @@ var RevertDuringRebaseWhenStoppedOnEdit = NewIntegrationTest(NewIntegrationTestA
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit 04"),
Contains(`<-- YOU ARE HERE --- Revert "commit 01"`),
Contains("--- Commits ---"),
Contains(`Revert "commit 01"`),
Contains(`Revert "commit 02"`),
Contains("commit 03"),
Contains("commit 02").IsSelected(),

View file

@ -50,10 +50,13 @@ var RevertMultipleCommitsInInteractiveRebase = NewIntegrationTest(NewIntegration
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("CI unrelated change 3"),
Contains("CI unrelated change 2"),
Contains("--- Pending reverts ---"),
Contains("revert").Contains("CI unrelated change 1"),
Contains("revert").Contains("CI <-- CONFLICT --- add first line"),
Contains("--- Commits ---"),
Contains("CI ◯ add second line"),
Contains("CI ◯ add first line"),
Contains("CI ◯ unrelated change 1"),
@ -80,9 +83,11 @@ var RevertMultipleCommitsInInteractiveRebase = NewIntegrationTest(NewIntegration
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI unrelated change 3"),
Contains("pick").Contains("CI unrelated change 2"),
Contains(`CI ◯ <-- YOU ARE HERE --- Revert "unrelated change 1"`),
Contains("--- Commits ---"),
Contains(`CI ◯ Revert "unrelated change 1"`),
Contains(`CI ◯ Revert "add first line"`),
Contains("CI ◯ add second line"),
Contains("CI ◯ add first line"),

View file

@ -45,9 +45,12 @@ var RevertSingleCommitInInteractiveRebase = NewIntegrationTest(NewIntegrationTes
Cancel() // stay in commits panel
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("CI unrelated change 2"),
Contains("CI unrelated change 1"),
Contains("--- Pending reverts ---"),
Contains("revert").Contains("CI <-- CONFLICT --- add first line"),
Contains("--- Commits ---"),
Contains("CI ◯ add second line"),
Contains("CI ◯ add first line").IsSelected(),
Contains("CI ◯ add empty file"),
@ -81,9 +84,11 @@ var RevertSingleCommitInInteractiveRebase = NewIntegrationTest(NewIntegrationTes
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI unrelated change 2"),
Contains("pick").Contains("CI unrelated change 1"),
Contains(`CI ◯ <-- YOU ARE HERE --- Revert "add first line"`),
Contains("--- Commits ---"),
Contains(`CI ◯ Revert "add first line"`),
Contains("CI ◯ add second line"),
Contains("CI ◯ add first line"),
Contains("CI ◯ add empty file"),

View file

@ -33,8 +33,10 @@ var RewordCommitWithEditorAndFail = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 02").IsSelected(),
Contains("commit 01"),
)

View file

@ -25,8 +25,10 @@ var RewordYouAreHereCommit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 02").IsSelected(),
Contains("commit 01"),
).
Press(keys.Commits.RenameCommit).
@ -39,8 +41,10 @@ var RewordYouAreHereCommit = NewIntegrationTest(NewIntegrationTestArgs{
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- renamed 02").IsSelected(),
Contains("--- Commits ---"),
Contains("renamed 02").IsSelected(),
Contains("commit 01"),
)
},

View file

@ -27,8 +27,10 @@ var RewordYouAreHereCommitWithEditor = NewIntegrationTest(NewIntegrationTestArgs
NavigateToLine(Contains("commit 02")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- commit 02").IsSelected(),
Contains("--- Commits ---"),
Contains("commit 02").IsSelected(),
Contains("commit 01"),
).
Press(keys.Commits.RenameCommitWithEditor).
@ -39,8 +41,10 @@ var RewordYouAreHereCommitWithEditor = NewIntegrationTest(NewIntegrationTestArgs
Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit 03"),
Contains("<-- YOU ARE HERE --- renamed 02").IsSelected(),
Contains("--- Commits ---"),
Contains("renamed 02").IsSelected(),
Contains("commit 01"),
)
},

View file

@ -9,8 +9,10 @@ func handleConflictsFromSwap(t *TestDriver, expectedCommand string) {
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("commit two"),
Contains(expectedCommand).Contains("<-- CONFLICT --- commit three"),
Contains("--- Commits ---"),
Contains("commit one"),
)

View file

@ -31,9 +31,11 @@ var ShowExecTodos = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("Rebasing (2/4)Executing: false")).Confirm()
}).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("exec").Contains("false"),
Contains("pick").Contains("CI commit 03"),
Contains("CI ◯ <-- YOU ARE HERE --- commit 02"),
Contains("--- Commits ---"),
Contains("CI ◯ commit 02"),
Contains("CI ◯ commit 01"),
).
Tap(func() {
@ -41,7 +43,9 @@ var ShowExecTodos = NewIntegrationTest(NewIntegrationTestArgs{
t.ExpectPopup().Alert().Title(Equals("Error")).Content(Contains("exit status 1")).Confirm()
}).
Lines(
Contains("CI ◯ <-- YOU ARE HERE --- commit 03"),
Contains("--- Pending rebase todos ---"),
Contains("--- Commits ---"),
Contains("CI ◯ commit 03"),
Contains("CI ◯ commit 02"),
Contains("CI ◯ commit 01"),
).

View file

@ -29,16 +29,20 @@ var SwapInRebaseWithConflict = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit one")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit three"),
Contains("commit two"),
Contains("YOU ARE HERE").Contains("commit one").IsSelected(),
Contains("--- Commits ---"),
Contains("commit one").IsSelected(),
).
SelectPreviousItem().
Press(keys.Commits.MoveUpCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit two").IsSelected(),
Contains("commit three"),
Contains("YOU ARE HERE").Contains("commit one"),
Contains("--- Commits ---"),
Contains("commit one"),
).
Tap(func() {
t.Common().ContinueRebase()

View file

@ -29,16 +29,20 @@ var SwapInRebaseWithConflictAndEdit = NewIntegrationTest(NewIntegrationTestArgs{
NavigateToLine(Contains("commit one")).
Press(keys.Universal.Edit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit three"),
Contains("commit two"),
Contains("<-- YOU ARE HERE --- commit one").IsSelected(),
Contains("--- Commits ---"),
Contains("commit one").IsSelected(),
).
NavigateToLine(Contains("commit two")).
Press(keys.Commits.MoveUpCommit).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("commit two").IsSelected(),
Contains("commit three"),
Contains("<-- YOU ARE HERE --- commit one"),
Contains("--- Commits ---"),
Contains("commit one"),
).
NavigateToLine(Contains("commit three")).
Press(keys.Universal.Edit).

View file

@ -28,10 +28,12 @@ var ViewFilesOfTodoEntries = NewIntegrationTest(NewIntegrationTestArgs{
Focus().
Press(keys.Commits.StartInteractiveRebase).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("CI commit 03").IsSelected(),
Contains("update-ref").Contains("branch1"),
Contains("pick").Contains("CI commit 02"),
Contains("CI <-- YOU ARE HERE --- commit 01"),
Contains("--- Commits ---"),
Contains("CI commit 01"),
).
Press(keys.Universal.GoInto)

View file

@ -107,8 +107,8 @@ var Reset = NewIntegrationTest(NewIntegrationTestArgs{
// submodule has been hard reset to the commit the parent repo specifies
t.Views().Branches().Lines(
Contains("HEAD detached").IsSelected(),
Contains("master"),
Contains("HEAD detached"),
Contains("master").IsSelected(),
)
// empty commit is gone

View file

@ -48,8 +48,10 @@ var PullRebaseInteractiveConflict = NewIntegrationTest(NewIntegrationTestArgs{
t.Views().Commits().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("five"),
Contains("pick").Contains("CONFLICT").Contains("four"),
Contains("--- Commits ---"),
Contains("three"),
Contains("two"),
Contains("one"),

View file

@ -49,16 +49,20 @@ var PullRebaseInteractiveConflictDrop = NewIntegrationTest(NewIntegrationTestArg
t.Views().Commits().
Focus().
Lines(
Contains("--- Pending rebase todos ---"),
Contains("pick").Contains("five").IsSelected(),
Contains("pick").Contains("CONFLICT").Contains("four"),
Contains("--- Commits ---"),
Contains("three"),
Contains("two"),
Contains("one"),
).
Press(keys.Universal.Remove).
Lines(
Contains("--- Pending rebase todos ---"),
Contains("drop").Contains("five").IsSelected(),
Contains("pick").Contains("CONFLICT").Contains("four"),
Contains("--- Commits ---"),
Contains("three"),
Contains("two"),
Contains("one"),