summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-08-15 16:36:39 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-08-15 18:01:43 +1000
commitd9fa02c53bb9b401f1b5ca07e8ed239862052a42 (patch)
tree9ce89793ba22ffc190ab6133365035dda4ec1ade /pkg
parentc44ee71ad4ca44a407613c1e91f7d720acfa84f6 (diff)
clean up interface for popup panels
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/app_status_manager.go2
-rw-r--r--pkg/gui/branches_panel.go149
-rw-r--r--pkg/gui/commit_files_panel.go65
-rw-r--r--pkg/gui/commit_message_panel.go6
-rw-r--r--pkg/gui/commits_panel.go166
-rw-r--r--pkg/gui/confirmation_panel.go145
-rw-r--r--pkg/gui/credentials_panel.go10
-rw-r--r--pkg/gui/diffing.go4
-rw-r--r--pkg/gui/files_panel.go102
-rw-r--r--pkg/gui/filtering.go16
-rw-r--r--pkg/gui/filtering_menu_panel.go4
-rw-r--r--pkg/gui/git_flow.go3
-rw-r--r--pkg/gui/global_handlers.go8
-rw-r--r--pkg/gui/gui.go37
-rw-r--r--pkg/gui/layout.go4
-rw-r--r--pkg/gui/menu_panel.go2
-rw-r--r--pkg/gui/merge_panel.go14
-rw-r--r--pkg/gui/patch_building_panel.go6
-rw-r--r--pkg/gui/patch_options_panel.go12
-rw-r--r--pkg/gui/quitting.go12
-rw-r--r--pkg/gui/rebase_options_panel.go13
-rw-r--r--pkg/gui/reflog_panel.go12
-rw-r--r--pkg/gui/remote_branches_panel.go45
-rw-r--r--pkg/gui/remotes_panel.go31
-rw-r--r--pkg/gui/searching.go10
-rw-r--r--pkg/gui/staging_panel.go16
-rw-r--r--pkg/gui/stash_panel.go46
-rw-r--r--pkg/gui/status_panel.go2
-rw-r--r--pkg/gui/tags_panel.go25
-rw-r--r--pkg/gui/tasks_adapter.go2
-rw-r--r--pkg/gui/undoing.go38
-rw-r--r--pkg/gui/updates.go33
-rw-r--r--pkg/gui/view_helpers.go26
-rw-r--r--pkg/i18n/english.go6
34 files changed, 675 insertions, 397 deletions
diff --git a/pkg/gui/app_status_manager.go b/pkg/gui/app_status_manager.go
index 54393c443..9d8ac3725 100644
--- a/pkg/gui/app_status_manager.go
+++ b/pkg/gui/app_status_manager.go
@@ -66,7 +66,7 @@ func (gui *Gui) WithWaitingStatus(name string, f func() error) error {
if appStatus == "" {
return
}
- gui.renderString(gui.g, "appStatus", appStatus)
+ gui.renderString("appStatus", appStatus)
}
}()
diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go
index ed8e7819e..22dddb65e 100644
--- a/pkg/gui/branches_panel.go
+++ b/pkg/gui/branches_panel.go
@@ -125,7 +125,7 @@ func (gui *Gui) handleCreatePullRequestPress(g *gocui.Gui, v *gocui.View) error
}
func (gui *Gui) handleGitFetch(g *gocui.Gui, v *gocui.View) error {
- if err := gui.createLoaderPanel(gui.g, v, gui.Tr.SLocalize("FetchWait")); err != nil {
+ if err := gui.createLoaderPanel(v, gui.Tr.SLocalize("FetchWait")); err != nil {
return err
}
go func() {
@@ -140,12 +140,19 @@ func (gui *Gui) handleForceCheckout(g *gocui.Gui, v *gocui.View) error {
branch := gui.getSelectedBranch()
message := gui.Tr.SLocalize("SureForceCheckout")
title := gui.Tr.SLocalize("ForceCheckoutBranch")
- return gui.createConfirmationPanel(g, v, true, title, message, func(g *gocui.Gui, v *gocui.View) error {
- if err := gui.GitCommand.Checkout(branch.Name, commands.CheckoutOptions{Force: true}); err != nil {
- _ = gui.surfaceError(err)
- }
- return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
- }, nil)
+
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: title,
+ prompt: message,
+ handleConfirm: func() error {
+ if err := gui.GitCommand.Checkout(branch.Name, commands.CheckoutOptions{Force: true}); err != nil {
+ _ = gui.surfaceError(err)
+ }
+ return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
+ },
+ })
}
type handleCheckoutRefOptions struct {
@@ -179,24 +186,29 @@ func (gui *Gui) handleCheckoutRef(ref string, options handleCheckoutRefOptions)
if strings.Contains(err.Error(), "Please commit your changes or stash them before you switch branch") {
// offer to autostash changes
- return gui.createConfirmationPanel(gui.g, gui.getBranchesView(), true, gui.Tr.SLocalize("AutoStashTitle"), gui.Tr.SLocalize("AutoStashPrompt"), func(g *gocui.Gui, v *gocui.View) error {
-
- if err := gui.GitCommand.StashSave(gui.Tr.SLocalize("StashPrefix") + ref); err != nil {
- return gui.surfaceError(err)
- }
- if err := gui.GitCommand.Checkout(ref, cmdOptions); err != nil {
- return gui.surfaceError(err)
- }
-
- onSuccess()
- if err := gui.GitCommand.StashDo(0, "pop"); err != nil {
- if err := gui.refreshSidePanels(refreshOptions{mode: BLOCK_UI}); err != nil {
- return err
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: gui.getBranchesView(),
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("AutoStashTitle"),
+ prompt: gui.Tr.SLocalize("AutoStashPrompt"),
+ handleConfirm: func() error {
+ if err := gui.GitCommand.StashSave(gui.Tr.SLocalize("StashPrefix") + ref); err != nil {
+ return gui.surfaceError(err)
}
- return gui.surfaceError(err)
- }
- return gui.refreshSidePanels(refreshOptions{mode: BLOCK_UI})
- }, nil)
+ if err := gui.GitCommand.Checkout(ref, cmdOptions); err != nil {
+ return gui.surfaceError(err)
+ }
+
+ onSuccess()
+ if err := gui.GitCommand.StashDo(0, "pop"); err != nil {
+ if err := gui.refreshSidePanels(refreshOptions{mode: BLOCK_UI}); err != nil {
+ return err
+ }
+ return gui.surfaceError(err)
+ }
+ return gui.refreshSidePanels(refreshOptions{mode: BLOCK_UI})
+ },
+ })
}
if err := gui.surfaceError(err); err != nil {
@@ -210,12 +222,19 @@ func (gui *Gui) handleCheckoutRef(ref string, options handleCheckoutRefOptions)
}
func (gui *Gui) handleCheckoutByName(g *gocui.Gui, v *gocui.View) error {
- return gui.createPromptPanel(g, v, gui.Tr.SLocalize("BranchName")+":", "", func(g *gocui.Gui, v *gocui.View) error {
- return gui.handleCheckoutRef(gui.trimmedContent(v), handleCheckoutRefOptions{
+ return gui.createPromptPanel(v, gui.Tr.SLocalize("BranchName")+":", "", func(response string) error {
+ return gui.handleCheckoutRef(response, handleCheckoutRefOptions{
onRefNotFound: func(ref string) error {
- return gui.createConfirmationPanel(gui.g, v, true, gui.Tr.SLocalize("BranchNotFoundTitle"), fmt.Sprintf("%s %s%s", gui.Tr.SLocalize("BranchNotFoundPrompt"), ref, "?"), func(_g *gocui.Gui, _v *gocui.View) error {
- return gui.createNewBranchWithName(ref)
- }, nil)
+
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("BranchNotFoundTitle"),
+ prompt: fmt.Sprintf("%s %s%s", gui.Tr.SLocalize("BranchNotFoundPrompt"), ref, "?"),
+ handleConfirm: func() error {
+ return gui.createNewBranchWithName(ref)
+ },
+ })
},
})
})
@@ -240,8 +259,8 @@ func (gui *Gui) handleNewBranch(g *gocui.Gui, v *gocui.View) error {
"branchName": branch.Name,
},
)
- return gui.createPromptPanel(g, v, message, "", func(g *gocui.Gui, v *gocui.View) error {
- return gui.createNewBranchWithName(gui.trimmedContent(v))
+ return gui.createPromptPanel(v, message, "", func(response string) error {
+ return gui.createNewBranchWithName(response)
})
}
@@ -288,16 +307,23 @@ func (gui *Gui) deleteNamedBranch(g *gocui.Gui, v *gocui.View, selectedBranch *c
"selectedBranchName": selectedBranch.Name,
},
)
- return gui.createConfirmationPanel(g, v, true, title, message, func(g *gocui.Gui, v *gocui.View) error {
- if err := gui.GitCommand.DeleteBranch(selectedBranch.Name, force); err != nil {
- errMessage := err.Error()
- if !force && strings.Contains(errMessage, "is not fully merged") {
- return gui.deleteNamedBranch(g, v, selectedBranch, true)
+
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: title,
+ prompt: message,
+ handleConfirm: func() error {
+ if err := gui.GitCommand.DeleteBranch(selectedBranch.Name, force); err != nil {
+ errMessage := err.Error()
+ if !force && strings.Contains(errMessage, "is not fully merged") {
+ return gui.deleteNamedBranch(g, v, selectedBranch, true)
+ }
+ return gui.createErrorPanel(errMessage)
}
- return gui.createErrorPanel(errMessage)
- }
- return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{BRANCHES}})
- }, nil)
+ return gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{BRANCHES}})
+ },
+ })
}
func (gui *Gui) mergeBranchIntoCheckedOutBranch(branchName string) error {
@@ -319,12 +345,17 @@ func (gui *Gui) mergeBranchIntoCheckedOutBranch(branchName string) error {
"selectedBranch": branchName,
},
)
- return gui.createConfirmationPanel(gui.g, gui.getBranchesView(), true, gui.Tr.SLocalize("MergingTitle"), prompt,
- func(g *gocui.Gui, v *gocui.View) error {
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: gui.getBranchesView(),
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("MergingTitle"),
+ prompt: prompt,
+ handleConfirm: func() error {
err := gui.GitCommand.Merge(branchName, commands.MergeOpts{})
return gui.handleGenericMergeCommandResult(err)
- }, nil)
+ },
+ })
}
func (gui *Gui) handleMerge(g *gocui.Gui, v *gocui.View) error {
@@ -357,11 +388,17 @@ func (gui *Gui) handleRebaseOntoBranch(selectedBranchName string) error {
"selectedBranch": selectedBranchName,
},
)
- return gui.createConfirmationPanel(gui.g, gui.getBranchesView(), true, gui.Tr.SLocalize("RebasingTitle"), prompt,
- func(g *gocui.Gui, v *gocui.View) error {
+
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: gui.getBranchesView(),
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("RebasingTitle"),
+ prompt: prompt,
+ handleConfirm: func() error {
err := gui.GitCommand.RebaseBranch(selectedBranchName)
return gui.handleGenericMergeCommandResult(err)
- }, nil)
+ },
+ })
}
func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error {
@@ -396,7 +433,7 @@ func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error {
},
)
go func() {
- _ = gui.createLoaderPanel(gui.g, v, message)
+ _ = gui.createLoaderPanel(v, message)
if gui.State.Panels.Branches.SelectedLine == 0 {
_ = gui.pullWithMode("ff-only", PullFilesOptions{})
@@ -500,14 +537,13 @@ func (gui *Gui) handleRenameBranch(g *gocui.Gui, v *gocui.View) error {
// way to get it to show up in the reflog)
promptForNewName := func() error {
- return gui.createPromptPanel(g, v, gui.Tr.SLocalize("NewBranchNamePrompt")+" "+branch.Name+":", "", func(g *gocui.Gui, v *gocui.View) error {
- newName := gui.trimmedContent(v)
- if err := gui.GitCommand.RenameBranch(branch.Name, newName); err != nil {
+ return gui.createPromptPanel(v, gui.Tr.SLocalize("NewBranchNamePrompt")+" "+branch.Name+":", "", func(newBranchName string) error {
+ if err := gui.GitCommand.RenameBranch(branch.Name, newBranchName); err != nil {
return gui.surfaceError(err)
}
// need to checkout so that the branch shows up in our reflog and therefore
// doesn't get lost among all the other branches when we switch to something else
- if err := gui.GitCommand.Checkout(newName, commands.CheckoutOptions{Force: false}); err != nil {
+ if err := gui.GitCommand.Checkout(newBranchName, commands.CheckoutOptions{Force: false}); err != nil {
return gui.surfaceError(err)
}
@@ -522,9 +558,14 @@ func (gui *Gui) handleRenameBranch(g *gocui.Gui, v *gocui.View) error {
if notTrackingRemote {
return promptForNewName()
}
- return gui.createConfirmationPanel(gui.g, v, true, gui.Tr.SLocalize("renameBranch"), gui.Tr.SLocalize("RenameBranchWarning"), func(_g *gocui.Gui, _v *gocui.View) error {
- return promptForNewName()
- }, nil)
+
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("renameBranch"),
+ prompt: gui.Tr.SLocalize("RenameBranchWarning"),
+ handleConfirm: promptForNewName,
+ })
}
func (gui *Gui) currentBranch() *commands.Branch {
diff --git a/pkg/gui/commit_files_panel.go b/pkg/gui/commit_files_panel.go
index 886fe3d7b..b10f0f4bb 100644
--- a/pkg/gui/commit_files_panel.go
+++ b/pkg/gui/commit_files_panel.go
@@ -36,7 +36,7 @@ func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error {
commitFile := gui.getSelectedCommitFile()
if commitFile == nil {
- gui.renderString(g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
+ gui.renderString("commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
return nil
}
@@ -57,7 +57,7 @@ func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error {
}
func (gui *Gui) handleSwitchToCommitsPanel(g *gocui.Gui, v *gocui.View) error {
- return gui.switchFocus(g, v, gui.getCommitsView())
+ return gui.switchFocus(v, gui.getCommitsView())
}
func (gui *Gui) handleCheckoutCommitFile(g *gocui.Gui, v *gocui.View) error {
@@ -77,17 +77,23 @@ func (gui *Gui) handleDiscardOldFileChange(g *gocui.Gui, v *gocui.View) error {
fileName := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine].Name
- return gui.createConfirmationPanel(gui.g, v, true, gui.Tr.SLocalize("DiscardFileChangesTitle"), gui.Tr.SLocalize("DiscardFileChangesPrompt"), func(g *gocui.Gui, v *gocui.View) error {
- return gui.WithWaitingStatus(gui.Tr.SLocalize("RebasingStatus"), func() error {
- if err := gui.GitCommand.DiscardOldFileChanges(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, fileName); err != nil {
- if err := gui.handleGenericMergeCommandResult(err); err != nil {
- return err
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("DiscardFileChangesTitle"),
+ prompt: gui.Tr.SLocalize("DiscardFileChangesPrompt"),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("RebasingStatus"), func() error {
+ if err := gui.GitCommand.DiscardOldFileChanges(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, fileName); err != nil {
+ if err := gui.handleGenericMergeCommandResult(err); err != nil {
+ return err
+ }
}
- }
- return gui.refreshSidePanels(refreshOptions{mode: BLOCK_UI})
- })
- }, nil)
+ return gui.refreshSidePanels(refreshOptions{mode: BLOCK_UI})
+ })
+ },
+ })
}
func (gui *Gui) refreshCommitFilesView() error {
@@ -144,7 +150,7 @@ func (gui *Gui) handleToggleFileForPatch(g *gocui.Gui, v *gocui.View) error {
commitFile := gui.getSelectedCommitFile()
if commitFile == nil {
- gui.renderString(g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
+ gui.renderString("commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
return nil
}
@@ -161,10 +167,16 @@ func (gui *Gui) handleToggleFileForPatch(g *gocui.Gui, v *gocui.View) error {
}
if gui.GitCommand.PatchManager.CommitSelected() && gui.GitCommand.PatchManager.CommitSha != commitFile.Sha {
- return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("DiscardPatch"), gui.Tr.SLocalize("DiscardPatchConfirm"), func(g *gocui.Gui, v *gocui.View) error {
- gui.GitCommand.PatchManager.Reset()
- return toggleTheFile()
- }, nil)
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("DiscardPatch"),
+ prompt: gui.Tr.SLocalize("DiscardPatchConfirm"),
+ handleConfirm: func() error {
+ gui.GitCommand.PatchManager.Reset()
+ return toggleTheFile()
+ },
+ })
}
return toggleTheFile()
@@ -200,7 +212,7 @@ func (gui *Gui) enterCommitFile(selectedLineIdx int) error {
commitFile := gui.getSelectedCommitFile()
if commitFile == nil {
- gui.renderString(gui.g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
+ gui.renderString("commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
return nil
}
@@ -212,18 +224,25 @@ func (gui *Gui) enterCommitFile(selectedLineIdx int) error {
}
gui.changeMainViewsContext("patch-building")
- if err := gui.switchFocus(gui.g, gui.getCommitFilesView(), gui.getMainView()); err != nil {
+ if err := gui.switchFocus(gui.getCommitFilesView(), gui.getMainView()); err != nil {
return err
}
return gui.refreshPatchBuildingPanel(selectedLineIdx)
}
if gui.GitCommand.PatchManager.CommitSelected() && gui.GitCommand.PatchManager.CommitSha != commitFile.Sha {
- return gui.createConfirmationPanel(gui.g, gui.getCommitFilesView(), false, gui.Tr.SLocalize("DiscardPatch"), gui.Tr.SLocalize("DiscardPatchConfirm"), func(g *gocui.Gui, v *gocui.View) error {
- gui.GitCommand.PatchManager.Reset()
- return enterTheFile(selectedLineIdx)
- }, func(g *gocui.Gui, v *gocui.View) error {
- return gui.switchFocus(gui.g, nil, gui.getCommitFilesView())
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: gui.getCommitFilesView(),
+ returnFocusOnClose: false,
+ title: gui.Tr.SLocalize("DiscardPatch"),
+ prompt: gui.Tr.SLocalize("DiscardPatchConfirm"),
+ handleConfirm: func() error {
+ gui.GitCommand.PatchManager.Reset()
+ return enterTheFile(selectedLineIdx)
+ },
+ handleClose: func() error {
+ return gui.switchFocus(nil, gui.getCommitFilesView())
+ },
})
}
diff --git a/pkg/gui/commit_message_panel.go b/pkg/gui/commit_message_panel.go
index bcc47f6b5..af79795f1 100644
--- a/pkg/gui/commit_message_panel.go
+++ b/pkg/gui/commit_message_panel.go
@@ -47,13 +47,13 @@ func (gui *Gui) handleCommitConfirm(g *gocui.Gui, v *gocui.View) error {
_ = v.SetCursor(0, 0)
_ = v.SetOrigin(0, 0)
_, _ = g.SetViewOnBottom("commitMessage")
- _ = gui.switchFocus(g, v, gui.getFilesView())
+ _ = gui.switchFocus(v, gui.getFilesView())
return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
}
func (gui *Gui) handleCommitClose(g *gocui.Gui, v *gocui.View) error {
_, _ = g.SetViewOnBottom("commitMessage")
- return gui.switchFocus(g, v, gui.getFilesView())
+ return gui.switchFocus(v, gui.getFilesView())
}
func (gui *Gui) handleCommitFocused(g *gocui.Gui, v *gocui.View) error {
@@ -69,7 +69,7 @@ func (gui *Gui) handleCommitFocused(g *gocui.Gui, v *gocui.View) error {
"keyBindNewLine": "tab",
},
)
- gui.renderString(g, "options", message)
+ gui.renderString("options", message)
return nil
}
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go
index c7ea04b20..2c1beafc7 100644
--- a/pkg/gui/commits_panel.go
+++ b/pkg/gui/commits_panel.go
@@ -155,12 +155,18 @@ func (gui *Gui) handleCommitSquashDown(g *gocui.Gui, v *gocui.View) error {
return nil
}
- return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("Squash"), gui.Tr.SLocalize("SureSquashThisCommit"), func(g *gocui.Gui, v *gocui.View) error {
- return gui.WithWaitingStatus(gui.Tr.SLocalize("SquashingStatus"), func() error {
- err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "squash")
- return gui.handleGenericMergeCommandResult(err)
- })
- }, nil)
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("Squash"),
+ prompt: gui.Tr.SLocalize("SureSquashThisCommit"),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("SquashingStatus"), func() error {
+ err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "squash")
+ return gui.handleGenericMergeCommandResult(err)
+ })
+ },
+ })
}
func (gui *Gui) handleCommitFixup(g *gocui.Gui, v *gocui.View) error {
@@ -180,12 +186,18 @@ func (gui *Gui) handleCommitFixup(g *gocui.Gui, v *gocui.View) error {
return nil
}
- return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("Fixup"), gui.Tr.SLocalize("SureFixupThisCommit"), func(g *gocui.Gui, v *gocui.View) error {
- return gui.WithWaitingStatus(gui.Tr.SLocalize("FixingStatus"), func() error {
- err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "fixup")
- return gui.handleGenericMergeCommandResult(err)
- })
- }, nil)
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("Fixup"),
+ prompt: gui.Tr.SLocalize("SureFixupThisCommit"),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("FixingStatus"), func() error {
+ err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "fixup")
+ return gui.handleGenericMergeCommandResult(err)
+ })
+ },
+ })
}
func (gui *Gui) handleRenameCommit(g *gocui.Gui, v *gocui.View) error {
@@ -204,8 +216,8 @@ func (gui *Gui) handleRenameCommit(g *gocui.Gui, v *gocui.View) error {
if gui.State.Panels.Commits.SelectedLine != 0 {
return gui.createErrorPanel(gui.Tr.SLocalize("OnlyRenameTopCommit"))
}
- return gui.createPromptPanel(g, v, gui.Tr.SLocalize("renameCommit"), "", func(g *gocui.Gui, v *gocui.View) error {
- if err := gui.GitCommand.RenameCommit(v.Buffer()); err != nil {
+ return gui.createPromptPanel(v, gui.Tr.SLocalize("renameCommit"), "", func(response string) error {
+ if err := gui.GitCommand.RenameCommit(response); err != nil {
return gui.surfaceError(err)
}
@@ -276,12 +288,18 @@ func (gui *Gui) handleCommitDelete(g *gocui.Gui, v *gocui.View) error {
return nil
}
- return gui.createConfirmationPanel(gui.g, v, true, gui.Tr.SLocalize("DeleteCommitTitle"), gui.Tr.SLocalize("DeleteCommitPrompt"), func(*gocui.Gui, *gocui.View) error {
- return gui.WithWaitingStatus(gui.Tr.SLocalize("DeletingStatus"), func() error {
- err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "drop")
- return gui.handleGenericMergeCommandResult(err)
- })
- }, nil)
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("DeleteCommitTitle"),
+ prompt: gui.Tr.SLocalize("DeleteCommitPrompt"),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("DeletingStatus"), func() error {
+ err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, "drop")
+ return gui.handleGenericMergeCommandResult(err)
+ })
+ },
+ })
}
func (gui *Gui) handleCommitMoveDown(g *gocui.Gui, v *gocui.View) error {
@@ -362,12 +380,18 @@ func (gui *Gui) handleCommitAmendTo(g *gocui.Gui, v *gocui.View) error {
return err
}
- return gui.createConfirmationPanel(gui.g, v, true, gui.Tr.SLocalize("AmendCommitTitle"), gui.Tr.SLocalize("AmendCommitPrompt"), func(*gocui.Gui, *gocui.View) error {
- return gui.WithWaitingStatus(gui.Tr.SLocalize("AmendingStatus"), func() error {
- err := gui.GitCommand.AmendTo(gui.State.Commits[gui.State.Panels.Commits.SelectedLine].Sha)
- return gui.handleGenericMergeCommandResult(err)
- })
- }, nil)
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("AmendCommitTitle"),
+ prompt: gui.Tr.SLocalize("AmendCommitPrompt"),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("AmendingStatus"), func() error {
+ err := gui.GitCommand.AmendTo(gui.State.Commits[gui.State.Panels.Commits.SelectedLine].Sha)
+ return gui.handleGenericMergeCommandResult(err)
+ })
+ },
+ })
}
func (gui *Gui) handleCommitPick(g *gocui.Gui, v *gocui.View) error {
@@ -474,12 +498,18 @@ func (gui *Gui) HandlePasteCommits(g *gocui.Gui, v *gocui.View) error {
return err
}
- return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("CherryPick"), gui.Tr.SLocalize("SureCherryPick"), func(g *gocui.Gui, v *gocui.View) error {
- return gui.WithWaitingStatus(gui.Tr.SLocalize("CherryPickingStatus"), func() error {
- err := gui.GitCommand.CherryPickCommits(gui.State.CherryPickedCommits)
- return gui.handleGenericMergeCommandResult(err)
- })
- }, nil)
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("CherryPick"),
+ prompt: gui.Tr.SLocalize("SureCherryPick"),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("CherryPickingStatus"), func() error {
+ err := gui.GitCommand.CherryPickCommits(gui.State.CherryPickedCommits)
+ return gui.handleGenericMergeCommandResult(err)
+ })
+ },
+ })
}
func (gui *Gui) handleSwitchToCommitFilesPanel(g *gocui.Gui, v *gocui.View) error {
@@ -487,7 +517,7 @@ func (gui *Gui) handleSwitchToCommitFilesPanel(g *gocui.Gui, v *gocui.View) erro
return err
}
- return gui.switchFocus(g, gui.getCommitsView(), gui.getCommitFilesView())
+ return gui.switchFocus(gui.getCommitsView(), gui.getCommitFilesView())
}
func (gui *Gui) hasCommit(commits []*commands.Commit, target string) (int, bool) {
@@ -513,18 +543,24 @@ func (gui *Gui) handleCreateFixupCommit(g *gocui.Gui, v *gocui.View) error {
return nil
}
- return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("CreateFixupCommit"), gui.Tr.TemplateLocalize(
- "SureCreateFixupCommit",
- Teml{
- "commit": commit.Sha,
- },
- ), func(g *gocui.Gui, v *gocui.View) error {
- if err := gui.GitCommand.CreateFixupCommit(commit.Sha); err != nil {
- return gui.surfaceError(err)
- }
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("CreateFixupCommit"),
+ prompt: gui.Tr.TemplateLocalize(
+ "SureCreateFixupCommit",
+ Teml{
+ "commit": commit.Sha,
+ },
+ ),
+ handleConfirm: func() error {
+ if err := gui.GitCommand.CreateFixupCommit(commit.Sha); err != nil {
+ return gui.surfaceError(err)
+ }
- return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
- }, nil)
+ return gui.refreshSidePanels(refreshOptions{mode: ASYNC})
+ },
+ })
}
func (gui *Gui) handleSquashAllAboveFixupCommits(g *gocui.Gui, v *gocui.View) error {
@@ -537,17 +573,23 @@ func (gui *Gui) handleSquashAllAboveFixupCommits(g *gocui.Gui, v *gocui.View) er
return nil
}
- return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("SquashAboveCommits"), gui.Tr.TemplateLocalize(
- "SureSquashAboveCommits",
- Teml{
- "commit": commit.Sha,
+ return gui.createConfirmationPanel(createConfirmationPanelOpts{
+ returnToView: v,
+ returnFocusOnClose: true,
+ title: gui.Tr.SLocalize("SquashAboveCommits"),
+ prompt: gui.Tr.TemplateLocalize(
+ "SureSquashAboveCommits",
+ Teml{
+ "commit": commit.Sha,
+ },
+ ),
+ handleConfirm: func() error {
+ return gui.WithWaitingStatus(gui.Tr.SLocalize("SquashingStatus"), func() error {
+ err := gui.GitCommand.SquashAllAboveFixupCommits(commit.Sha)
+ return gui.handleGenericMergeCommandResult(err)
+ })
},