diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-02-20 20:51:24 +1100 |
---|---|---|
committer | Jesse Duffield Duffield <jesseduffieldduffield@Jesses-MacBook-Pro-3.local> | 2019-02-24 09:42:34 +1100 |
commit | f6b3a9b1842438ece889ce4ef7045365325e53fe (patch) | |
tree | 970b6e2c899ec58e9183064eb9e17bbb25cf515c /pkg/gui | |
parent | cdc50e8557442fbe471c7f45cd88d6f2088dae71 (diff) |
rearranging todo items while interactively rebasing
Diffstat (limited to 'pkg/gui')
-rw-r--r-- | pkg/gui/commits_panel.go | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go index 77b0b54dd..8189079c2 100644 --- a/pkg/gui/commits_panel.go +++ b/pkg/gui/commits_panel.go @@ -222,6 +222,21 @@ func (gui *Gui) handleMidRebaseCommand(action string) (bool, error) { return true, gui.refreshCommits(gui.g) } +// handleMoveTodoDown like handleMidRebaseCommand but for moving an item up in the todo list +func (gui *Gui) handleMoveTodoDown(index int) (bool, error) { + selectedCommit := gui.State.Commits[index] + if selectedCommit.Status != "rebasing" { + return false, nil + } + if gui.State.Commits[index+1].Status != "rebasing" { + return true, nil + } + if err := gui.GitCommand.MoveTodoDown(index); err != nil { + return true, gui.createErrorPanel(gui.g, err.Error()) + } + return true, gui.refreshCommits(gui.g) +} + func (gui *Gui) handleCommitDelete(g *gocui.Gui, v *gocui.View) error { applied, err := gui.handleMidRebaseCommand("drop") if err != nil { @@ -239,20 +254,45 @@ func (gui *Gui) handleCommitDelete(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleCommitMoveDown(g *gocui.Gui, v *gocui.View) error { - gui.State.Panels.Commits.SelectedLine++ + index := gui.State.Panels.Commits.SelectedLine + selectedCommit := gui.State.Commits[index] + if selectedCommit.Status == "rebasing" { + if gui.State.Commits[index+1].Status != "rebasing" { + return nil + } + if err := gui.GitCommand.MoveTodoDown(index); err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + gui.State.Panels.Commits.SelectedLine++ + return gui.refreshCommits(gui.g) + } - err := gui.GitCommand.MoveCommitDown(gui.State.Commits, gui.State.Panels.Commits.SelectedLine-1) + err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index) + if err == nil { + gui.State.Panels.Commits.SelectedLine++ + } return gui.handleGenericMergeCommandResult(err) } func (gui *Gui) handleCommitMoveUp(g *gocui.Gui, v *gocui.View) error { - if gui.State.Panels.Commits.SelectedLine == 0 { - return gui.createErrorPanel(gui.g, "You cannot move the topmost commit up") // TODO: i18n + index := gui.State.Panels.Commits.SelectedLine + if index == 0 { + return nil } - gui.State.Panels.Commits.SelectedLine-- + selectedCommit := gui.State.Commits[index] + if selectedCommit.Status == "rebasing" { + if err := gui.GitCommand.MoveTodoDown(index - 1); err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + gui.State.Panels.Commits.SelectedLine-- + return gui.refreshCommits(gui.g) + } - err := gui.GitCommand.MoveCommitDown(gui.State.Commits, gui.State.Panels.Commits.SelectedLine) + err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index-1) + if err == nil { + gui.State.Panels.Commits.SelectedLine-- + } return gui.handleGenericMergeCommandResult(err) } |