diff options
author | Jesse Duffield Duffield <jesseduffieldduffield@Jesses-MacBook-Pro-3.local> | 2019-02-24 09:42:24 +1100 |
---|---|---|
committer | Jesse Duffield Duffield <jesseduffieldduffield@Jesses-MacBook-Pro-3.local> | 2019-02-24 10:58:15 +1100 |
commit | 95d451e59a419933f6e5f90305ffc6fe8dbc448f (patch) | |
tree | 25aba410c18655c6e59d80da4aef612c43193f7b /pkg/gui | |
parent | 6c1d2d45ef2d001e28ec31095826422ba7461664 (diff) |
Make it easier to run sync/async commands, switch to interactive rebase when rebasing on branches
Diffstat (limited to 'pkg/gui')
-rw-r--r-- | pkg/gui/commit_message_panel.go | 26 | ||||
-rw-r--r-- | pkg/gui/commits_panel.go | 10 | ||||
-rw-r--r-- | pkg/gui/files_panel.go | 22 |
3 files changed, 30 insertions, 28 deletions
diff --git a/pkg/gui/commit_message_panel.go b/pkg/gui/commit_message_panel.go index 130ec3401..b05a7df6c 100644 --- a/pkg/gui/commit_message_panel.go +++ b/pkg/gui/commit_message_panel.go @@ -1,28 +1,38 @@ package gui import ( + "os/exec" "strconv" "strings" "github.com/jesseduffield/gocui" ) -func (gui *Gui) handleCommitConfirm(g *gocui.Gui, v *gocui.View) error { - message := gui.trimmedContent(v) - if message == "" { - return gui.createErrorPanel(g, gui.Tr.SLocalize("CommitWithoutMessageErr")) - } - sub, err := gui.GitCommand.Commit(message, false) +// runSyncOrAsyncCommand takes the output of a command that may have returned +// either no error, an error, or a subprocess to execute, and if a subprocess +// needs to be set on the gui object, it does so, and then returns the error +func (gui *Gui) runSyncOrAsyncCommand(sub *exec.Cmd, err error) error { if err != nil { - // TODO need to find a way to send through this error if err != gui.Errors.ErrSubProcess { - return gui.createErrorPanel(g, err.Error()) + return gui.createErrorPanel(gui.g, err.Error()) } } if sub != nil { gui.SubProcess = sub return gui.Errors.ErrSubProcess } + return nil +} + +func (gui *Gui) handleCommitConfirm(g *gocui.Gui, v *gocui.View) error { + message := gui.trimmedContent(v) + if message == "" { + return gui.createErrorPanel(g, gui.Tr.SLocalize("CommitWithoutMessageErr")) + } + if err := gui.runSyncOrAsyncCommand(gui.GitCommand.Commit(message)); err != nil { + return err + } + v.Clear() _ = v.SetCursor(0, 0) _ = v.SetOrigin(0, 0) diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go index a2f3e858c..383f9b6ba 100644 --- a/pkg/gui/commits_panel.go +++ b/pkg/gui/commits_panel.go @@ -212,6 +212,11 @@ func (gui *Gui) handleRenameCommitEditor(g *gocui.Gui, v *gocui.View) error { // commit meaning you are trying to edit the todo file rather than actually // begin a rebase. It then updates the todo file with that action func (gui *Gui) handleMidRebaseCommand(action string) (bool, error) { + selectedCommit := gui.State.Commits[gui.State.Panels.Commits.SelectedLine] + if selectedCommit.Status != "rebasing" { + return false, nil + } + // for now we do not support setting 'reword' because it requires an editor // and that means we either unconditionally wait around for the subprocess to ask for // our input or we set a lazygit client as the EDITOR env variable and have it @@ -220,10 +225,6 @@ func (gui *Gui) handleMidRebaseCommand(action string) (bool, error) { return true, gui.createErrorPanel(gui.g, gui.Tr.SLocalize("rewordNotSupported")) } - selectedCommit := gui.State.Commits[gui.State.Panels.Commits.SelectedLine] - if selectedCommit.Status != "rebasing" { - return false, nil - } if err := gui.GitCommand.EditRebaseTodo(gui.State.Panels.Commits.SelectedLine, action); err != nil { return false, gui.createErrorPanel(gui.g, err.Error()) } @@ -318,6 +319,7 @@ func (gui *Gui) handleCommitEdit(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleCommitAmendTo(g *gocui.Gui, v *gocui.View) error { + // TODO: i18n return gui.createConfirmationPanel(gui.g, v, "Amend Commit", "Are you sure you want to amend this commit with your staged files?", func(*gocui.Gui, *gocui.View) error { err := gui.GitCommand.AmendTo(gui.State.Commits[gui.State.Panels.Commits.SelectedLine].Sha) return gui.handleGenericMergeCommandResult(err) diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index c6f5cd7d5..1f57e91e8 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -287,18 +287,16 @@ func (gui *Gui) handleAmendCommitPress(g *gocui.Gui, filesView *gocui.View) erro if len(gui.stagedFiles()) == 0 && gui.State.WorkingTreeState == "normal" { return gui.createErrorPanel(g, gui.Tr.SLocalize("NoStagedFilesToCommit")) } - title := strings.Title(gui.Tr.SLocalize("AmendLastCommit")) - question := gui.Tr.SLocalize("SureToAmend") - if len(gui.State.Commits) == 0 { return gui.createErrorPanel(g, gui.Tr.SLocalize("NoCommitToAmend")) } + title := strings.Title(gui.Tr.SLocalize("AmendLastCommit")) + question := gui.Tr.SLocalize("SureToAmend") + return gui.createConfirmationPanel(g, filesView, title, question, func(g *gocui.Gui, v *gocui.View) error { - lastCommitMsg := gui.State.Commits[0].Name - _, err := gui.GitCommand.Commit(lastCommitMsg, true) - if err != nil { - return gui.createErrorPanel(g, err.Error()) + if err := gui.runSyncOrAsyncCommand(gui.GitCommand.AmendHead()); err != nil { + return err } return gui.refreshSidePanels(g) @@ -324,15 +322,7 @@ func (gui *Gui) PrepareSubProcess(g *gocui.Gui, commands ...string) { } func (gui *Gui) editFile(filename string) error { - sub, err := gui.OSCommand.EditFile(filename) - if err != nil { - return gui.createErrorPanel(gui.g, err.Error()) - } - if sub != nil { - gui.SubProcess = sub - return gui.Errors.ErrSubProcess - } - return nil + return gui.runSyncOrAsyncCommand(gui.OSCommand.EditFile(filename)) } func (gui *Gui) handleFileEdit(g *gocui.Gui, v *gocui.View) error { |