summaryrefslogtreecommitdiffstats
path: root/pkg/gui
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-02-18 23:27:54 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-02-18 23:27:54 +1100
commitd44638130c8d07c648b45796cc6b0dff221c7d82 (patch)
tree71b1bfdc271de1cac8fffe223d23fe7295c0158d /pkg/gui
parent76a27f417fc7fd24b4fdf12f0aeeb94ecca958d3 (diff)
add various interactive rebase commands
Diffstat (limited to 'pkg/gui')
-rw-r--r--pkg/gui/commits_panel.go38
-rw-r--r--pkg/gui/keybindings.go24
-rw-r--r--pkg/gui/status_panel.go4
3 files changed, 59 insertions, 7 deletions
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go
index 4bf0d4362..374f7ccf0 100644
--- a/pkg/gui/commits_panel.go
+++ b/pkg/gui/commits_panel.go
@@ -181,17 +181,45 @@ func (gui *Gui) handleRenameCommit(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) handleRenameCommitEditor(g *gocui.Gui, v *gocui.View) error {
- subProcess, err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "reword")
+ subProcess, err := gui.GitCommand.RewordCommit(gui.State.Commits, gui.State.Panels.Commits.SelectedLine)
if err != nil {
- return err
+ return gui.createErrorPanel(gui.g, err.Error())
}
if subProcess != nil {
gui.SubProcess = subProcess
- // g.Update(func(g *gocui.Gui) error {
- // return gui.Errors.ErrSubProcess
- // })
return gui.Errors.ErrSubProcess
}
return nil
}
+
+func (gui *Gui) handleCommitDelete(g *gocui.Gui, v *gocui.View) error {
+ // TODO: i18n
+ return gui.createConfirmationPanel(gui.g, v, "Delete Commit", "Are you sure you want to delete this commit?", func(*gocui.Gui, *gocui.View) error {
+ err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "drop")
+ return gui.handleGenericMergeCommandResult(err)
+ }, nil)
+}
+
+func (gui *Gui) handleCommitMoveDown(g *gocui.Gui, v *gocui.View) error {
+ gui.State.Panels.Commits.SelectedLine++
+
+ err := gui.GitCommand.MoveCommitDown(gui.State.Commits, gui.State.Panels.Commits.SelectedLine-1)
+ 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
+ }
+
+ gui.State.Panels.Commits.SelectedLine--
+
+ err := gui.GitCommand.MoveCommitDown(gui.State.Commits, gui.State.Panels.Commits.SelectedLine)
+ return gui.handleGenericMergeCommandResult(err)
+}
+
+func (gui *Gui) handleCommitEdit(g *gocui.Gui, v *gocui.View) error {
+ err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "edit")
+ return gui.handleGenericMergeCommandResult(err)
+}
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index df6bd8ee3..c0becfe2b 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -311,6 +311,30 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
Handler: gui.handleCommitFixup,
Description: gui.Tr.SLocalize("fixupCommit"),
}, {
+ ViewName: "commits",
+ Key: 'd',
+ Modifier: gocui.ModNone,
+ Handler: gui.handleCommitDelete,
+ Description: gui.Tr.SLocalize("deleteCommit"),
+ }, {
+ ViewName: "commits",
+ Key: 'J',
+ Modifier: gocui.ModNone,
+ Handler: gui.handleCommitMoveDown,
+ Description: gui.Tr.SLocalize("moveDownCommit"),
+ }, {
+ ViewName: "commits",
+ Key: 'K',
+ Modifier: gocui.ModNone,
+ Handler: gui.handleCommitMoveUp,
+ Description: gui.Tr.SLocalize("moveUpCommit"),
+ }, {
+ ViewName: "commits",
+ Key: 'e',
+ Modifier: gocui.ModNone,
+ Handler: gui.handleCommitEdit,
+ Description: gui.Tr.SLocalize("editCommit"),
+ }, {
ViewName: "stash",
Key: gocui.KeySpace,
Modifier: gocui.ModNone,
diff --git a/pkg/gui/status_panel.go b/pkg/gui/status_panel.go
index 06b94d722..a6bed8f83 100644
--- a/pkg/gui/status_panel.go
+++ b/pkg/gui/status_panel.go
@@ -94,11 +94,11 @@ func (gui *Gui) updateWorkTreeState() error {
gui.State.WorkingTreeState = "merging"
return nil
}
- rebasing, err := gui.GitCommand.IsInRebaseState()
+ rebaseMode, err := gui.GitCommand.RebaseMode()
if err != nil {
return err
}
- if rebasing {
+ if rebaseMode != "" {
gui.State.WorkingTreeState = "rebasing"
return nil
}