mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-27 23:08:02 +02:00
refactor
This commit is contained in:
parent
bbb5eee23a
commit
91fe68576c
@ -12,6 +12,7 @@ type ICmdObj interface {
|
||||
// using NewFromArgs, the output won't be quite the same as what you would type
|
||||
// into a terminal e.g. 'sh -c git commit' as opposed to 'sh -c "git commit"'
|
||||
ToString() string
|
||||
|
||||
AddEnvVars(...string) ICmdObj
|
||||
GetEnvVars() []string
|
||||
|
||||
@ -22,9 +23,16 @@ type ICmdObj interface {
|
||||
// runs the command and runs a callback function on each line of the output. If the callback returns true for the boolean value, we kill the process and return.
|
||||
RunAndProcessLines(onLine func(line string) (bool, error)) error
|
||||
|
||||
// Marks the command object as readonly, so that when it is run, we don't log it to the user.
|
||||
// We only want to log commands to the user which change state in some way.
|
||||
// Be calling DontLog(), we're saying that once we call Run(), we don't want to
|
||||
// log the command in the UI (it'll still be logged in the log file). The general rule
|
||||
// is that if a command doesn't change the git state (e.g. read commands like `git diff`)
|
||||
// then we don't want to log it. If we are changing something (e.g. `git add .`) then
|
||||
// we do. The only exception is if we're running a command in the background periodically
|
||||
// like `git fetch`, which technically does mutate stuff but isn't something we need
|
||||
// to notify the user about.
|
||||
DontLog() ICmdObj
|
||||
|
||||
// This returns false if DontLog() was called
|
||||
ShouldLog() bool
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,8 @@ type ICmdObjBuilder interface {
|
||||
}
|
||||
|
||||
type CmdObjBuilder struct {
|
||||
runner ICmdObjRunner
|
||||
logCmdObj func(ICmdObj)
|
||||
platform *Platform
|
||||
runner ICmdObjRunner
|
||||
platform *Platform
|
||||
}
|
||||
|
||||
// poor man's version of explicitly saying that struct X implements interface Y
|
||||
@ -76,8 +75,27 @@ func (self *CmdObjBuilder) CloneWithNewRunner(decorate func(ICmdObjRunner) ICmdO
|
||||
decoratedRunner := decorate(self.runner)
|
||||
|
||||
return &CmdObjBuilder{
|
||||
runner: decoratedRunner,
|
||||
logCmdObj: self.logCmdObj,
|
||||
platform: self.platform,
|
||||
runner: decoratedRunner,
|
||||
platform: self.platform,
|
||||
}
|
||||
}
|
||||
|
||||
func (self *CmdObjBuilder) Quote(message string) string {
|
||||
var quote string
|
||||
if self.platform.OS == "windows" {
|
||||
quote = `\"`
|
||||
message = strings.NewReplacer(
|
||||
`"`, `"'"'"`,
|
||||
`\"`, `\\"`,
|
||||
).Replace(message)
|
||||
} else {
|
||||
quote = `"`
|
||||
message = strings.NewReplacer(
|
||||
`\`, `\\`,
|
||||
`"`, `\"`,
|
||||
`$`, `\$`,
|
||||
"`", "\\`",
|
||||
).Replace(message)
|
||||
}
|
||||
return quote + message + quote
|
||||
}
|
||||
|
@ -22,10 +22,6 @@ type cmdObjRunner struct {
|
||||
var _ ICmdObjRunner = &cmdObjRunner{}
|
||||
|
||||
func (self *cmdObjRunner) Run(cmdObj ICmdObj) error {
|
||||
if cmdObj.ShouldLog() {
|
||||
self.logCmdObj(cmdObj)
|
||||
}
|
||||
|
||||
_, err := self.RunWithOutput(cmdObj)
|
||||
return err
|
||||
}
|
||||
|
@ -13,9 +13,8 @@ func NewDummyOSCommand() *OSCommand {
|
||||
|
||||
func NewDummyCmdObjBuilder(runner ICmdObjRunner) *CmdObjBuilder {
|
||||
return &CmdObjBuilder{
|
||||
runner: runner,
|
||||
logCmdObj: func(ICmdObj) {},
|
||||
platform: dummyPlatform,
|
||||
runner: runner,
|
||||
platform: dummyPlatform,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,11 +22,11 @@ type OSCommand struct {
|
||||
Platform *Platform
|
||||
Getenv func(string) string
|
||||
|
||||
// callback to run before running a command, i.e. for the purposes of logging
|
||||
onRunCommand func(CmdLogEntry)
|
||||
|
||||
// something like 'Staging File': allows us to group cmd logs under a single title
|
||||
CmdLogSpan string
|
||||
// callback to run before running a command, i.e. for the purposes of logging.
|
||||
// the string argument is the command string e.g. 'git add .' and the bool is
|
||||
// whether we're dealing with a command line command or something more general
|
||||
// like 'Opening PR URL', or something handled by Go's standard library.
|
||||
logCommandFn func(string, bool)
|
||||
|
||||
removeFile func(string) error
|
||||
|
||||
@ -42,36 +42,6 @@ type Platform struct {
|
||||
OpenLinkCommand string
|
||||
}
|
||||
|
||||
// TODO: make these fields private
|
||||
type CmdLogEntry struct {
|
||||
// e.g. 'git commit -m "haha"'
|
||||
cmdStr string
|
||||
// Span is something like 'Staging File'. Multiple commands can be grouped under the same
|
||||
// span
|
||||
span string
|
||||
|
||||
// sometimes our command is direct like 'git commit', and sometimes it's a
|
||||
// command to remove a file but through Go's standard library rather than the
|
||||
// command line
|
||||
commandLine bool
|
||||
}
|
||||
|
||||
func (e CmdLogEntry) GetCmdStr() string {
|
||||
return e.cmdStr
|
||||
}
|
||||
|
||||
func (e CmdLogEntry) GetSpan() string {
|
||||
return e.span
|
||||
}
|
||||
|
||||
func (e CmdLogEntry) GetCommandLine() bool {
|
||||
return e.commandLine
|
||||
}
|
||||
|
||||
func NewCmdLogEntry(cmdStr string, span string, commandLine bool) CmdLogEntry {
|
||||
return CmdLogEntry{cmdStr: cmdStr, span: span, commandLine: commandLine}
|
||||
}
|
||||
|
||||
// NewOSCommand os command runner
|
||||
func NewOSCommand(common *common.Common, platform *Platform) *OSCommand {
|
||||
c := &OSCommand{
|
||||
@ -82,7 +52,7 @@ func NewOSCommand(common *common.Common, platform *Platform) *OSCommand {
|
||||
}
|
||||
|
||||
runner := &cmdObjRunner{log: common.Log, logCmdObj: c.LogCmdObj}
|
||||
c.Cmd = &CmdObjBuilder{runner: runner, logCmdObj: c.LogCmdObj, platform: platform}
|
||||
c.Cmd = &CmdObjBuilder{runner: runner, platform: platform}
|
||||
|
||||
return c
|
||||
}
|
||||
@ -94,13 +64,13 @@ func (c *OSCommand) LogCmdObj(cmdObj ICmdObj) {
|
||||
func (c *OSCommand) LogCommand(cmdStr string, commandLine bool) {
|
||||
c.Log.WithField("command", cmdStr).Info("RunCommand")
|
||||
|
||||
if c.onRunCommand != nil {
|
||||
c.onRunCommand(NewCmdLogEntry(cmdStr, c.CmdLogSpan, commandLine))
|
||||
if c.logCommandFn != nil {
|
||||
c.logCommandFn(cmdStr, commandLine)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *OSCommand) SetOnRunCommand(f func(CmdLogEntry)) {
|
||||
c.onRunCommand = f
|
||||
func (c *OSCommand) SetLogCommandFn(f func(string, bool)) {
|
||||
c.logCommandFn = f
|
||||
}
|
||||
|
||||
// To be used for testing only
|
||||
@ -145,26 +115,6 @@ func (c *OSCommand) Quote(message string) string {
|
||||
return c.Cmd.Quote(message)
|
||||
}
|
||||
|
||||
func (self *CmdObjBuilder) Quote(message string) string {
|
||||
var quote string
|
||||
if self.platform.OS == "windows" {
|
||||
quote = `\"`
|
||||
message = strings.NewReplacer(
|
||||
`"`, `"'"'"`,
|
||||
`\"`, `\\"`,
|
||||
).Replace(message)
|
||||
} else {
|
||||
quote = `"`
|
||||
message = strings.NewReplacer(
|
||||
`\`, `\\`,
|
||||
`"`, `\"`,
|
||||
`$`, `\$`,
|
||||
"`", "\\`",
|
||||
).Replace(message)
|
||||
}
|
||||
return quote + message + quote
|
||||
}
|
||||
|
||||
// AppendLineToFile adds a new line in file
|
||||
func (c *OSCommand) AppendLineToFile(filename, line string) error {
|
||||
c.LogCommand(fmt.Sprintf("Appending '%s' to file '%s'", line, filename), false)
|
||||
@ -236,15 +186,6 @@ func (c *OSCommand) FileExists(path string) (bool, error) {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// GetLazygitPath returns the path of the currently executed file
|
||||
func (c *OSCommand) GetLazygitPath() string {
|
||||
ex, err := os.Executable() // get the executable path for git to use
|
||||
if err != nil {
|
||||
ex = os.Args[0] // fallback to the first call argument if needed
|
||||
}
|
||||
return `"` + filepath.ToSlash(ex) + `"`
|
||||
}
|
||||
|
||||
// PipeCommands runs a heap of commands and pipes their inputs/outputs together like A | B | C
|
||||
func (c *OSCommand) PipeCommands(commandStrings ...string) error {
|
||||
cmds := make([]*exec.Cmd, len(commandStrings))
|
||||
@ -333,3 +274,12 @@ func (c *OSCommand) RemoveFile(path string) error {
|
||||
func GetTempDir() string {
|
||||
return filepath.Join(os.TempDir(), "lazygit")
|
||||
}
|
||||
|
||||
// GetLazygitPath returns the path of the currently executed file
|
||||
func GetLazygitPath() string {
|
||||
ex, err := os.Executable() // get the executable path for git to use
|
||||
if err != nil {
|
||||
ex = os.Args[0] // fallback to the first call argument if needed
|
||||
}
|
||||
return `"` + filepath.ToSlash(ex) + `"`
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ func (c *GitCommand) InteractiveRebase(commits []*models.Commit, index int, acti
|
||||
// we tell git to run lazygit to edit the todo list, and we pass the client
|
||||
// lazygit a todo string to write to the todo file
|
||||
func (c *GitCommand) PrepareInteractiveRebaseCommand(baseSha string, todo string, overrideEditor bool) (oscommands.ICmdObj, error) {
|
||||
ex := c.OSCommand.GetLazygitPath()
|
||||
ex := oscommands.GetLazygitPath()
|
||||
|
||||
debug := "FALSE"
|
||||
if c.Debug {
|
||||
@ -267,8 +267,8 @@ func (c *GitCommand) GenericMergeOrRebaseAction(commandType string, command stri
|
||||
}
|
||||
|
||||
func (c *GitCommand) runSkipEditorCommand(command string) error {
|
||||
cmdObj := c.OSCommand.Cmd.New(command)
|
||||
lazyGitPath := c.OSCommand.GetLazygitPath()
|
||||
cmdObj := c.Cmd.New(command)
|
||||
lazyGitPath := oscommands.GetLazygitPath()
|
||||
return cmdObj.
|
||||
AddEnvVars(
|
||||
"LAZYGIT_CLIENT_COMMAND=EXIT_IMMEDIATELY",
|
||||
|
@ -7,7 +7,6 @@ import (
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
)
|
||||
|
||||
@ -80,7 +79,7 @@ func (gui *Gui) handleBranchPress() error {
|
||||
return gui.createErrorPanel(gui.Tr.AlreadyCheckedOutBranch)
|
||||
}
|
||||
branch := gui.getSelectedBranch()
|
||||
gui.logSpan(gui.Tr.Spans.CheckoutBranch)
|
||||
gui.logAction(gui.Tr.Actions.CheckoutBranch)
|
||||
return gui.handleCheckoutRef(branch.Name, handleCheckoutRefOptions{})
|
||||
}
|
||||
|
||||
@ -114,12 +113,11 @@ func (gui *Gui) handleCopyPullRequestURLPress() error {
|
||||
if err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
gui.logAction(gui.Tr.Actions.CopyPullRequestURL)
|
||||
if err := gui.GitCommand.OSCommand.CopyToClipboard(url); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(fmt.Sprintf("Copying to clipboard: '%s'", url), "Copy URL", false))
|
||||
|
||||
gui.raiseToast(gui.Tr.PullRequestURLCopiedToClipboard)
|
||||
|
||||
return nil
|
||||
@ -146,7 +144,7 @@ func (gui *Gui) handleForceCheckout() error {
|
||||
title: title,
|
||||
prompt: message,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.ForceCheckoutBranch)
|
||||
gui.logAction(gui.Tr.Actions.ForceCheckoutBranch)
|
||||
if err := gui.GitCommand.Checkout(branch.Name, commands.CheckoutOptions{Force: true}); err != nil {
|
||||
_ = gui.surfaceError(err)
|
||||
}
|
||||
@ -225,7 +223,7 @@ func (gui *Gui) handleCheckoutByName() error {
|
||||
title: gui.Tr.BranchName + ":",
|
||||
findSuggestionsFunc: gui.getRefsSuggestionsFunc(),
|
||||
handleConfirm: func(response string) error {
|
||||
gui.logSpan("Checkout branch")
|
||||
gui.logAction("Checkout branch")
|
||||
return gui.handleCheckoutRef(response, handleCheckoutRefOptions{
|
||||
onRefNotFound: func(ref string) error {
|
||||
return gui.ask(askOpts{
|
||||
@ -298,7 +296,7 @@ func (gui *Gui) deleteNamedBranch(selectedBranch *models.Branch, force bool) err
|
||||
title: title,
|
||||
prompt: message,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DeleteBranch)
|
||||
gui.logAction(gui.Tr.Actions.DeleteBranch)
|
||||
if err := gui.GitCommand.DeleteBranch(selectedBranch.Name, force); err != nil {
|
||||
errMessage := err.Error()
|
||||
if !force && strings.Contains(errMessage, "git branch -D ") {
|
||||
@ -335,7 +333,7 @@ func (gui *Gui) mergeBranchIntoCheckedOutBranch(branchName string) error {
|
||||
title: gui.Tr.MergingTitle,
|
||||
prompt: prompt,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.Merge)
|
||||
gui.logAction(gui.Tr.Actions.Merge)
|
||||
err := gui.GitCommand.Merge(branchName, commands.MergeOpts{})
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
},
|
||||
@ -377,7 +375,7 @@ func (gui *Gui) handleRebaseOntoBranch(selectedBranchName string) error {
|
||||
title: gui.Tr.RebasingTitle,
|
||||
prompt: prompt,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.RebaseBranch)
|
||||
gui.logAction(gui.Tr.Actions.RebaseBranch)
|
||||
err := gui.GitCommand.RebaseBranch(selectedBranchName)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
},
|
||||
@ -402,7 +400,7 @@ func (gui *Gui) handleFastForward() error {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
span := gui.Tr.Spans.FastForwardBranch
|
||||
action := gui.Tr.Actions.FastForwardBranch
|
||||
|
||||
split := strings.Split(upstream, "/")
|
||||
remoteName := split[0]
|
||||
@ -419,9 +417,9 @@ func (gui *Gui) handleFastForward() error {
|
||||
_ = gui.createLoaderPanel(message)
|
||||
|
||||
if gui.State.Panels.Branches.SelectedLineIdx == 0 {
|
||||
_ = gui.pullWithLock(PullFilesOptions{span: span, FastForwardOnly: true})
|
||||
_ = gui.pullWithLock(PullFilesOptions{action: action, FastForwardOnly: true})
|
||||
} else {
|
||||
gui.logSpan(span)
|
||||
gui.logAction(action)
|
||||
err := gui.GitCommand.FastForward(branch.Name, remoteName, remoteBranchName, gui.promptUserForCredential)
|
||||
gui.handleCredentialsPopup(err)
|
||||
_ = gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []RefreshableView{BRANCHES}})
|
||||
@ -450,7 +448,7 @@ func (gui *Gui) handleRenameBranch() error {
|
||||
title: gui.Tr.NewBranchNamePrompt + " " + branch.Name + ":",
|
||||
initialContent: branch.Name,
|
||||
handleConfirm: func(newBranchName string) error {
|
||||
gui.logSpan(gui.Tr.Spans.RenameBranch)
|
||||
gui.logAction(gui.Tr.Actions.RenameBranch)
|
||||
if err := gui.GitCommand.RenameBranch(branch.Name, newBranchName); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -519,7 +517,7 @@ func (gui *Gui) handleNewBranchOffCurrentItem() error {
|
||||
title: message,
|
||||
initialContent: prefilledName,
|
||||
handleConfirm: func(response string) error {
|
||||
gui.logSpan(gui.Tr.Spans.CreateBranch)
|
||||
gui.logAction(gui.Tr.Actions.CreateBranch)
|
||||
if err := gui.GitCommand.NewBranch(sanitizedBranchName(response), item.ID()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ func (gui *Gui) HandlePasteCommits() error {
|
||||
prompt: gui.Tr.SureCherryPick,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.CherryPickingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.CherryPick)
|
||||
gui.logAction(gui.Tr.Actions.CherryPick)
|
||||
err := gui.GitCommand.CherryPickCommits(gui.State.Modes.CherryPicking.CherryPickedCommits)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
|
@ -6,38 +6,48 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
"github.com/jesseduffield/lazygit/pkg/constants"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
||||
"github.com/jesseduffield/lazygit/pkg/theme"
|
||||
)
|
||||
|
||||
func (gui *Gui) GetOnRunCommand() func(entry oscommands.CmdLogEntry) {
|
||||
return func(entry oscommands.CmdLogEntry) {
|
||||
if gui.Views.Extras == nil {
|
||||
return
|
||||
}
|
||||
|
||||
gui.Views.Extras.Autoscroll = true
|
||||
|
||||
textStyle := theme.DefaultTextColor
|
||||
if !entry.GetCommandLine() {
|
||||
textStyle = style.FgMagenta
|
||||
}
|
||||
gui.CmdLog = append(gui.CmdLog, entry.GetCmdStr())
|
||||
indentedCmdStr := " " + strings.Replace(entry.GetCmdStr(), "\n", "\n ", -1)
|
||||
fmt.Fprint(gui.Views.Extras, "\n"+textStyle.Sprint(indentedCmdStr))
|
||||
}
|
||||
}
|
||||
|
||||
func (gui *Gui) logSpan(span string) {
|
||||
// our UI command log looks like this:
|
||||
// Stage File
|
||||
// git add -- 'filename'
|
||||
// Unstage File
|
||||
// git reset HEAD 'filename'
|
||||
//
|
||||
// The 'Stage File' and 'Unstage File' lines are actions i.e they group up a set
|
||||
// of command logs (typically there's only one command under an action but there may be more).
|
||||
// So we call logAction to log the 'Stage File' part and then we call logCommand to log the command itself.
|
||||
// We pass logCommand to our OSCommand struct so that it can handle logging commands
|
||||
// for us.
|
||||
func (gui *Gui) logAction(action string) {
|
||||
if gui.Views.Extras == nil {
|
||||
return
|
||||
}
|
||||
|
||||
gui.Views.Extras.Autoscroll = true
|
||||
|
||||
fmt.Fprint(gui.Views.Extras, "\n"+style.FgYellow.Sprint(span))
|
||||
fmt.Fprint(gui.Views.Extras, "\n"+style.FgYellow.Sprint(action))
|
||||
}
|
||||
|
||||
func (gui *Gui) logCommand(cmdStr string, commandLine bool) {
|
||||
if gui.Views.Extras == nil {
|
||||
return
|
||||
}
|
||||
|
||||
gui.Views.Extras.Autoscroll = true
|
||||
|
||||
textStyle := theme.DefaultTextColor
|
||||
if !commandLine {
|
||||
// if we're not dealing with a direct command that could be run on the command line,
|
||||
// we style it differently to communicate that
|
||||
textStyle = style.FgMagenta
|
||||
}
|
||||
gui.CmdLog = append(gui.CmdLog, cmdStr)
|
||||
indentedCmdStr := " " + strings.Replace(cmdStr, "\n", "\n ", -1)
|
||||
fmt.Fprint(gui.Views.Extras, "\n"+textStyle.Sprint(indentedCmdStr))
|
||||
}
|
||||
|
||||
func (gui *Gui) printCommandLogHeader() {
|
||||
|
@ -63,7 +63,7 @@ func (gui *Gui) handleCheckoutCommitFile() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.CheckoutFile)
|
||||
gui.logAction(gui.Tr.Actions.CheckoutFile)
|
||||
if err := gui.GitCommand.CheckoutFile(gui.State.CommitFileManager.GetParent(), node.GetPath()); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -83,7 +83,7 @@ func (gui *Gui) handleDiscardOldFileChange() error {
|
||||
prompt: gui.Tr.DiscardFileChangesPrompt,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.RebasingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DiscardOldFileChange)
|
||||
gui.logAction(gui.Tr.Actions.DiscardOldFileChange)
|
||||
if err := gui.GitCommand.DiscardOldFileChanges(gui.State.Commits, gui.State.Panels.Commits.SelectedLineIdx, fileName); err != nil {
|
||||
if err := gui.handleGenericMergeCommandResult(err); err != nil {
|
||||
return err
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
)
|
||||
|
||||
@ -25,7 +24,7 @@ func (gui *Gui) handleCommitConfirm() error {
|
||||
}
|
||||
|
||||
cmdObj := gui.GitCommand.CommitCmdObj(message, strings.Join(flags, " "))
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(cmdObj.ToString(), gui.Tr.Spans.Commit, true))
|
||||
gui.logAction(gui.Tr.Actions.Commit)
|
||||
|
||||
_ = gui.returnFromContext()
|
||||
return gui.withGpgHandling(cmdObj, gui.Tr.CommittingStatus, func() error {
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/loaders"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
)
|
||||
|
||||
@ -173,7 +172,7 @@ func (gui *Gui) handleCommitSquashDown() error {
|
||||
prompt: gui.Tr.SureSquashThisCommit,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.SquashingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.SquashCommitDown)
|
||||
gui.logAction(gui.Tr.Actions.SquashCommitDown)
|
||||
err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLineIdx, "squash")
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -203,7 +202,7 @@ func (gui *Gui) handleCommitFixup() error {
|
||||
prompt: gui.Tr.SureFixupThisCommit,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.FixingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.FixupCommit)
|
||||
gui.logAction(gui.Tr.Actions.FixupCommit)
|
||||
err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLineIdx, "fixup")
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -242,7 +241,7 @@ func (gui *Gui) handleRenameCommit() error {
|
||||
title: gui.Tr.LcRenameCommit,
|
||||
initialContent: message,
|
||||
handleConfirm: func(response string) error {
|
||||
gui.logSpan(gui.Tr.Spans.RewordCommit)
|
||||
gui.logAction(gui.Tr.Actions.RewordCommit)
|
||||
if err := gui.GitCommand.RenameCommit(response); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -265,7 +264,7 @@ func (gui *Gui) handleRenameCommitEditor() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.RewordCommit)
|
||||
gui.logAction(gui.Tr.Actions.RewordCommit)
|
||||
subProcess, err := gui.GitCommand.RewordCommit(gui.State.Commits, gui.State.Panels.Commits.SelectedLineIdx)
|
||||
if err != nil {
|
||||
return gui.surfaceError(err)
|
||||
@ -294,11 +293,11 @@ func (gui *Gui) handleMidRebaseCommand(action string) (bool, error) {
|
||||
return true, gui.createErrorPanel(gui.Tr.LcRewordNotSupported)
|
||||
}
|
||||
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(
|
||||
gui.logAction("Update rebase TODO")
|
||||
gui.logCommand(
|
||||
fmt.Sprintf("Updating rebase action of commit %s to '%s'", selectedCommit.ShortSha(), action),
|
||||
"Update rebase TODO",
|
||||
false,
|
||||
))
|
||||
)
|
||||
|
||||
if err := gui.GitCommand.EditRebaseTodo(gui.State.Panels.Commits.SelectedLineIdx, action); err != nil {
|
||||
return false, gui.surfaceError(err)
|
||||
@ -325,7 +324,7 @@ func (gui *Gui) handleCommitDelete() error {
|
||||
prompt: gui.Tr.DeleteCommitPrompt,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.DeletingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DropCommit)
|
||||
gui.logAction(gui.Tr.Actions.DropCommit)
|
||||
err := gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLineIdx, "drop")
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -338,8 +337,6 @@ func (gui *Gui) handleCommitMoveDown() error {
|
||||
return err
|
||||
}
|
||||
|
||||
span := gui.Tr.Spans.MoveCommitDown
|
||||
|
||||
index := gui.State.Panels.Commits.SelectedLineIdx
|
||||
selectedCommit := gui.State.Commits[index]
|
||||
if selectedCommit.Status == "rebasing" {
|
||||
@ -349,11 +346,8 @@ func (gui *Gui) handleCommitMoveDown() error {
|
||||
|
||||
// logging directly here because MoveTodoDown doesn't have enough information
|
||||
// to provide a useful log
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(
|
||||
fmt.Sprintf("Moving commit %s down", selectedCommit.ShortSha()),
|
||||
span,
|
||||
false,
|
||||
))
|
||||
gui.logAction(gui.Tr.Actions.MoveCommitDown)
|
||||
gui.logCommand(fmt.Sprintf("Moving commit %s down", selectedCommit.ShortSha()), false)
|
||||
|
||||
if err := gui.GitCommand.MoveTodoDown(index); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
@ -363,7 +357,7 @@ func (gui *Gui) handleCommitMoveDown() error {
|
||||
}
|
||||
|
||||
return gui.WithWaitingStatus(gui.Tr.MovingStatus, func() error {
|
||||
gui.logSpan(span)
|
||||
gui.logAction(gui.Tr.Actions.MoveCommitDown)
|
||||
err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index)
|
||||
if err == nil {
|
||||
gui.State.Panels.Commits.SelectedLineIdx++
|
||||
@ -382,17 +376,15 @@ func (gui *Gui) handleCommitMoveUp() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
span := gui.Tr.Spans.MoveCommitUp
|
||||
|
||||
selectedCommit := gui.State.Commits[index]
|
||||
if selectedCommit.Status == "rebasing" {
|
||||
// logging directly here because MoveTodoDown doesn't have enough information
|
||||
// to provide a useful log
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(
|
||||
gui.logAction(gui.Tr.Actions.MoveCommitUp)
|
||||
gui.logCommand(
|
||||
fmt.Sprintf("Moving commit %s up", selectedCommit.ShortSha()),
|
||||
span,
|
||||
false,
|
||||
))
|
||||
)
|
||||
|
||||
if err := gui.GitCommand.MoveTodoDown(index - 1); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
@ -402,7 +394,7 @@ func (gui *Gui) handleCommitMoveUp() error {
|
||||
}
|
||||
|
||||
return gui.WithWaitingStatus(gui.Tr.MovingStatus, func() error {
|
||||
gui.logSpan(span)
|
||||
gui.logAction(gui.Tr.Actions.MoveCommitUp)
|
||||
err := gui.GitCommand.MoveCommitDown(gui.State.Commits, index-1)
|
||||
if err == nil {
|
||||
gui.State.Panels.Commits.SelectedLineIdx--
|
||||
@ -425,7 +417,7 @@ func (gui *Gui) handleCommitEdit() error {
|
||||
}
|
||||
|
||||
return gui.WithWaitingStatus(gui.Tr.RebasingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.EditCommit)
|
||||
gui.logAction(gui.Tr.Actions.EditCommit)
|
||||
err = gui.GitCommand.InteractiveRebase(gui.State.Commits, gui.State.Panels.Commits.SelectedLineIdx, "edit")
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -441,7 +433,7 @@ func (gui *Gui) handleCommitAmendTo() error {
|
||||
prompt: gui.Tr.AmendCommitPrompt,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.AmendingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.AmendCommit)
|
||||
gui.logAction(gui.Tr.Actions.AmendCommit)
|
||||
err := gui.GitCommand.AmendTo(gui.State.Commits[gui.State.Panels.Commits.SelectedLineIdx].Sha)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -477,7 +469,7 @@ func (gui *Gui) handleCommitRevert() error {
|
||||
if commit.IsMerge() {
|
||||
return gui.createRevertMergeCommitMenu(commit)
|
||||
} else {
|
||||
gui.logSpan(gui.Tr.Spans.RevertCommit)
|
||||
gui.logAction(gui.Tr.Actions.RevertCommit)
|
||||
if err := gui.GitCommand.Revert(commit.Sha); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -498,7 +490,7 @@ func (gui *Gui) createRevertMergeCommitMenu(commit *models.Commit) error {
|
||||
displayString: fmt.Sprintf("%s: %s", utils.SafeTruncate(parentSha, 8), message),
|
||||
onPress: func() error {
|
||||
parentNumber := i + 1
|
||||
gui.logSpan(gui.Tr.Spans.RevertCommit)
|
||||
gui.logAction(gui.Tr.Actions.RevertCommit)
|
||||
if err := gui.GitCommand.RevertMerge(commit.Sha, parentNumber); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -545,7 +537,7 @@ func (gui *Gui) handleCreateFixupCommit() error {
|
||||
title: gui.Tr.CreateFixupCommit,
|
||||
prompt: prompt,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.CreateFixupCommit)
|
||||
gui.logAction(gui.Tr.Actions.CreateFixupCommit)
|
||||
if err := gui.GitCommand.CreateFixupCommit(commit.Sha); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -577,7 +569,7 @@ func (gui *Gui) handleSquashAllAboveFixupCommits() error {
|
||||
prompt: prompt,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.SquashingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.SquashAllAboveFixupCommits)
|
||||
gui.logAction(gui.Tr.Actions.SquashAllAboveFixupCommits)
|
||||
err := gui.GitCommand.SquashAllAboveFixupCommits(commit.Sha)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -625,7 +617,7 @@ func (gui *Gui) handleCreateAnnotatedTag(commitSha string) error {
|
||||
return gui.prompt(promptOpts{
|
||||
title: gui.Tr.TagMessageTitle,
|
||||
handleConfirm: func(msg string) error {
|
||||
gui.logSpan(gui.Tr.Spans.CreateAnnotatedTag)
|
||||
gui.logAction(gui.Tr.Actions.CreateAnnotatedTag)
|
||||
if err := gui.GitCommand.CreateAnnotatedTag(tagName, commitSha, msg); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -640,7 +632,7 @@ func (gui *Gui) handleCreateLightweightTag(commitSha string) error {
|
||||
return gui.prompt(promptOpts{
|
||||
title: gui.Tr.TagNameTitle,
|
||||
handleConfirm: func(tagName string) error {
|
||||
gui.logSpan(gui.Tr.Spans.CreateLightweightTag)
|
||||
gui.logAction(gui.Tr.Actions.CreateLightweightTag)
|
||||
if err := gui.GitCommand.CreateLightweightTag(tagName, commitSha); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -659,7 +651,7 @@ func (gui *Gui) handleCheckoutCommit() error {
|
||||
title: gui.Tr.LcCheckoutCommit,
|
||||
prompt: gui.Tr.SureCheckoutThisCommit,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.CheckoutCommit)
|
||||
gui.logAction(gui.Tr.Actions.CheckoutCommit)
|
||||
return gui.handleCheckoutRef(commit.Sha, handleCheckoutRefOptions{})
|
||||
},
|
||||
})
|
||||
@ -715,7 +707,7 @@ func (gui *Gui) handleCopySelectedCommitMessageToClipboard() error {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.CopyCommitMessageToClipboard)
|
||||
gui.logAction(gui.Tr.Actions.CopyCommitMessageToClipboard)
|
||||
if err := gui.OSCommand.CopyToClipboard(message); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -826,7 +818,8 @@ func (gui *Gui) handleOpenCommitInBrowser() error {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(fmt.Sprintf(gui.Tr.OpeningCommitInBrowser, url), gui.Tr.CreatePullRequest, false))
|
||||
gui.logAction(gui.Tr.CreatePullRequest)
|
||||
gui.logCommand(fmt.Sprintf(gui.Tr.OpeningCommitInBrowser, url), false)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ func (gui *Gui) handleCustomCommandKeybinding(customCommand config.CustomCommand
|
||||
loadingText = gui.Tr.LcRunningCustomCommandStatus
|
||||
}
|
||||
return gui.WithWaitingStatus(loadingText, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.CustomCommand)
|
||||
gui.logAction(gui.Tr.Actions.CustomCommand)
|
||||
err := gui.OSCommand.Cmd.NewShell(cmdStr).Run()
|
||||
if err != nil {
|
||||
return gui.surfaceError(err)
|
||||
|
@ -12,7 +12,7 @@ func (gui *Gui) handleCreateDiscardMenu() error {
|
||||
{
|
||||
displayString: gui.Tr.LcDiscardAllChanges,
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DiscardAllChangesInDirectory)
|
||||
gui.logAction(gui.Tr.Actions.DiscardAllChangesInDirectory)
|
||||
if err := gui.GitCommand.DiscardAllDirChanges(node); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -25,7 +25,7 @@ func (gui *Gui) handleCreateDiscardMenu() error {
|
||||
menuItems = append(menuItems, &menuItem{
|
||||
displayString: gui.Tr.LcDiscardUnstagedChanges,
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DiscardUnstagedChangesInDirectory)
|
||||
gui.logAction(gui.Tr.Actions.DiscardUnstagedChangesInDirectory)
|
||||
if err := gui.GitCommand.DiscardUnstagedDirChanges(node); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -54,7 +54,7 @@ func (gui *Gui) handleCreateDiscardMenu() error {
|
||||
{
|
||||
displayString: gui.Tr.LcDiscardAllChanges,
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DiscardAllChangesInFile)
|
||||
gui.logAction(gui.Tr.Actions.DiscardAllChangesInFile)
|
||||
if err := gui.GitCommand.DiscardAllFileChanges(file); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -67,7 +67,7 @@ func (gui *Gui) handleCreateDiscardMenu() error {
|
||||
menuItems = append(menuItems, &menuItem{
|
||||
displayString: gui.Tr.LcDiscardUnstagedChanges,
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DiscardAllUnstagedChangesInFile)
|
||||
gui.logAction(gui.Tr.Actions.DiscardAllUnstagedChangesInFile)
|
||||
if err := gui.GitCommand.DiscardUnstagedFileChanges(file); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ import (
|
||||
"github.com/jesseduffield/lazygit/pkg/commands"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/loaders"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
"github.com/jesseduffield/lazygit/pkg/config"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/filetree"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
@ -207,12 +206,12 @@ func (gui *Gui) handleFilePress() error {
|
||||
}
|
||||
|
||||
if file.HasUnstagedChanges {
|
||||
gui.logSpan(gui.Tr.Spans.StageFile)
|
||||
gui.logAction(gui.Tr.Actions.StageFile)
|
||||
if err := gui.GitCommand.StageFile(file.Name); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
} else {
|
||||
gui.logSpan(gui.Tr.Spans.UnstageFile)
|
||||
gui.logAction(gui.Tr.Actions.UnstageFile)
|
||||
if err := gui.GitCommand.UnStageFile(file.Names(), file.Tracked); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -225,13 +224,13 @@ func (gui *Gui) handleFilePress() error {
|
||||
}
|
||||
|
||||
if node.GetHasUnstagedChanges() {
|
||||
gui.logSpan(gui.Tr.Spans.StageFile)
|
||||
gui.logAction(gui.Tr.Actions.StageFile)
|
||||
if err := gui.GitCommand.StageFile(node.Path); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
} else {
|
||||
// pretty sure it doesn't matter that we're always passing true here
|
||||
gui.logSpan(gui.Tr.Spans.UnstageFile)
|
||||
gui.logAction(gui.Tr.Actions.UnstageFile)
|
||||
if err := gui.GitCommand.UnStageFile([]string{node.Path}, true); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -262,10 +261,10 @@ func (gui *Gui) onFocusFile() error {
|
||||
func (gui *Gui) handleStageAll() error {
|
||||
var err error
|
||||
if gui.allFilesStaged() {
|
||||
gui.logSpan(gui.Tr.Spans.UnstageAllFiles)
|
||||
gui.logAction(gui.Tr.Actions.UnstageAllFiles)
|
||||
err = gui.GitCommand.UnstageAll()
|
||||
} else {
|
||||
gui.logSpan(gui.Tr.Spans.StageAllFiles)
|
||||
gui.logAction(gui.Tr.Actions.StageAllFiles)
|
||||
err = gui.GitCommand.StageAll()
|
||||
}
|
||||
if err != nil {
|
||||
@ -289,7 +288,7 @@ func (gui *Gui) handleIgnoreFile() error {
|
||||
return gui.createErrorPanel("Cannot ignore .gitignore")
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.IgnoreFile)
|
||||
gui.logAction(gui.Tr.Actions.IgnoreFile)
|
||||
|
||||
unstageFiles := func() error {
|
||||
return node.ForEachFile(func(file *models.File) error {
|
||||
@ -362,7 +361,7 @@ func (gui *Gui) commitPrefixConfigForRepo() *config.CommitPrefixConfig {
|
||||
func (gui *Gui) prepareFilesForCommit() error {
|
||||
noStagedFiles := len(gui.stagedFiles()) == 0
|
||||
if noStagedFiles && gui.UserConfig.Gui.SkipNoStagedFilesWarning {
|
||||
gui.logSpan(gui.Tr.Spans.StageAllFiles)
|
||||
gui.logAction(gui.Tr.Actions.StageAllFiles)
|
||||
err := gui.GitCommand.StageAll()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -417,7 +416,7 @@ func (gui *Gui) promptToStageAllAndRetry(retry func() error) error {
|
||||
title: gui.Tr.NoFilesStagedTitle,
|
||||
prompt: gui.Tr.NoFilesStagedPrompt,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.StageAllFiles)
|
||||
gui.logAction(gui.Tr.Actions.StageAllFiles)
|
||||
if err := gui.GitCommand.StageAll(); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -448,7 +447,7 @@ func (gui *Gui) handleAmendCommitPress() error {
|
||||
prompt: gui.Tr.SureToAmend,
|
||||
handleConfirm: func() error {
|
||||
cmdObj := gui.GitCommand.AmendHeadCmdObj()
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(cmdObj.ToString(), gui.Tr.Spans.AmendCommit, true))
|
||||
gui.logAction(gui.Tr.Actions.AmendCommit)
|
||||
return gui.withGpgHandling(cmdObj, gui.Tr.AmendingStatus, nil)
|
||||
},
|
||||
})
|
||||
@ -473,7 +472,7 @@ func (gui *Gui) handleCommitEditorPress() error {
|
||||
|
||||
cmdStr := "git " + strings.Join(args, " ")
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.Commit)
|
||||
gui.logAction(gui.Tr.Actions.Commit)
|
||||
return gui.runSubprocessWithSuspenseAndRefresh(
|
||||
gui.GitCommand.Cmd.New(cmdStr),
|
||||
)
|
||||
@ -520,7 +519,7 @@ func (gui *Gui) editFileAtLine(filename string, lineNumber int) error {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.EditFile)
|
||||
gui.logAction(gui.Tr.Actions.EditFile)
|
||||
return gui.runSubprocessWithSuspenseAndRefresh(
|
||||
gui.OSCommand.Cmd.NewShell(cmdStr),
|
||||
)
|
||||
@ -652,7 +651,7 @@ func (gui *Gui) handlePullFiles() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
span := gui.Tr.Spans.Pull
|
||||
action := gui.Tr.Actions.Pull
|
||||
|
||||
currentBranch := gui.currentBranch()
|
||||
if currentBranch == nil {
|
||||
@ -669,7 +668,7 @@ func (gui *Gui) handlePullFiles() error {
|
||||
}
|
||||
for branchName, branch := range conf.Branches {
|
||||
if branchName == currentBranch.Name {
|
||||
return gui.pullFiles(PullFilesOptions{RemoteName: branch.Remote, BranchName: branch.Name, span: span})
|
||||
return gui.pullFiles(PullFilesOptions{RemoteName: branch.Remote, BranchName: branch.Name, action: action})
|
||||
}
|
||||
}
|
||||
|
||||
@ -687,19 +686,19 @@ func (gui *Gui) handlePullFiles() error {
|
||||
}
|
||||
return gui.createErrorPanel(errorMessage)
|
||||
}
|
||||
return gui.pullFiles(PullFilesOptions{span: span})
|
||||
return gui.pullFiles(PullFilesOptions{action: action})
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return gui.pullFiles(PullFilesOptions{span: span})
|
||||
return gui.pullFiles(PullFilesOptions{action: action})
|
||||
}
|
||||
|
||||
type PullFilesOptions struct {
|
||||
RemoteName string
|
||||
BranchName string
|
||||
FastForwardOnly bool
|
||||
span string
|
||||
action string
|
||||
}
|
||||
|
||||
func (gui *Gui) pullFiles(opts PullFilesOptions) error {
|
||||
@ -717,7 +716,7 @@ func (gui *Gui) pullWithLock(opts PullFilesOptions) error {
|
||||
gui.Mutexes.FetchMutex.Lock()
|
||||
defer gui.Mutexes.FetchMutex.Unlock()
|
||||
|
||||
gui.logSpan(opts.span)
|
||||
gui.logAction(opts.action)
|
||||
|
||||
err := gui.GitCommand.Pull(
|
||||
commands.PullOptions{
|
||||
@ -745,7 +744,7 @@ func (gui *Gui) push(opts pushOpts) error {
|
||||
return err
|
||||
}
|
||||
go utils.Safe(func() {
|
||||
gui.logSpan(gui.Tr.Spans.Push)
|
||||
gui.logAction(gui.Tr.Actions.Push)
|
||||
err := gui.GitCommand.Push(commands.PushOpts{
|
||||
Force: opts.force,
|
||||
UpstreamRemote: opts.upstreamRemote,
|
||||
@ -902,7 +901,7 @@ func (gui *Gui) handleSwitchToMerge() error {
|
||||
}
|
||||
|
||||
func (gui *Gui) openFile(filename string) error {
|
||||
gui.logSpan(gui.Tr.Spans.OpenFile)
|
||||
gui.logAction(gui.Tr.Actions.OpenFile)
|
||||
if err := gui.OSCommand.OpenFile(filename); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -935,7 +934,7 @@ func (gui *Gui) handleCustomCommand() error {
|
||||
gui.Log.Error(err)
|
||||
}
|
||||
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(command, gui.Tr.Spans.CustomCommand, true))
|
||||
gui.logAction(gui.Tr.Actions.CustomCommand)
|
||||
return gui.runSubprocessWithSuspenseAndRefresh(
|
||||
gui.OSCommand.Cmd.NewShell(command),
|
||||
)
|
||||
@ -948,14 +947,14 @@ func (gui *Gui) handleCreateStashMenu() error {
|
||||
{
|
||||
displayString: gui.Tr.LcStashAllChanges,
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.StashAllChanges)
|
||||
gui.logAction(gui.Tr.Actions.StashAllChanges)
|
||||
return gui.handleStashSave(gui.GitCommand.StashSave)
|
||||
},
|
||||
},
|
||||
{
|
||||
displayString: gui.Tr.LcStashStagedChanges,
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.StashStagedChanges)
|
||||
gui.logAction(gui.Tr.Actions.StashStagedChanges)
|
||||
return gui.handleStashSave(gui.GitCommand.StashSaveStagedChanges)
|
||||
},
|
||||
},
|
||||
@ -1019,6 +1018,7 @@ func (gui *Gui) handleOpenMergeTool() error {
|
||||
title: gui.Tr.MergeToolTitle,
|
||||
prompt: gui.Tr.MergeToolPrompt,
|
||||
handleConfirm: func() error {
|
||||
gui.logAction(gui.Tr.Actions.OpenMergeTool)
|
||||
return gui.runSubprocessWithSuspenseAndRefresh(
|
||||
gui.GitCommand.OpenMergeToolCmdObj(),
|
||||
)
|
||||
|
@ -31,7 +31,7 @@ func (gui *Gui) gitFlowFinishBranch(gitFlowConfig string, branchName string) err
|
||||
return gui.createErrorPanel(gui.Tr.NotAGitFlowBranch)
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.GitFlowFinish)
|
||||
gui.logAction(gui.Tr.Actions.GitFlowFinish)
|
||||
return gui.runSubprocessWithSuspenseAndRefresh(
|
||||
gui.GitCommand.Cmd.New("git flow " + branchType + " finish " + suffix),
|
||||
)
|
||||
@ -56,7 +56,7 @@ func (gui *Gui) handleCreateGitFlowMenu() error {
|
||||
return gui.prompt(promptOpts{
|
||||
title: title,
|
||||
handleConfirm: func(name string) error {
|
||||
gui.logSpan(gui.Tr.Spans.GitFlowStart)
|
||||
gui.logAction(gui.Tr.Actions.GitFlowStart)
|
||||
return gui.runSubprocessWithSuspenseAndRefresh(
|
||||
gui.GitCommand.Cmd.New("git flow " + branchType + " start " + name),
|
||||
)
|
||||
|
@ -210,13 +210,13 @@ func (gui *Gui) handleMouseDownSecondary() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (gui *Gui) fetch(canPromptForCredentials bool, span string) (err error) {
|
||||
func (gui *Gui) fetch(canPromptForCredentials bool, action string) (err error) {
|
||||
gui.Mutexes.FetchMutex.Lock()
|
||||
defer gui.Mutexes.FetchMutex.Unlock()
|
||||
|
||||
fetchOpts := commands.FetchOptions{}
|
||||
if canPromptForCredentials {
|
||||
gui.logSpan(span)
|
||||
gui.logAction(action)
|
||||
fetchOpts.PromptUserForCredential = gui.promptUserForCredential
|
||||
}
|
||||
|
||||
@ -239,7 +239,7 @@ func (gui *Gui) handleCopySelectedSideContextItemToClipboard() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.CopyToClipboard)
|
||||
gui.logAction(gui.Tr.Actions.CopyToClipboard)
|
||||
if err := gui.OSCommand.CopyToClipboard(itemId); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -13,6 +13,8 @@ import (
|
||||
// we don't need to see a loading status if we're in a subprocess.
|
||||
// TODO: work out if we actually need to use a shell command here
|
||||
func (gui *Gui) withGpgHandling(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error {
|
||||
gui.logCommand(cmdObj.ToString(), true)
|
||||
|
||||
useSubprocess := gui.GitCommand.UsingGpg()
|
||||
if useSubprocess {
|
||||
success, err := gui.runSubprocessWithSuspense(gui.OSCommand.Cmd.NewShell(cmdObj.ToString()))
|
||||
|
@ -111,8 +111,7 @@ type Gui struct {
|
||||
PauseBackgroundThreads bool
|
||||
|
||||
// Log of the commands that get run, to be displayed to the user.
|
||||
CmdLog []string
|
||||
OnRunCommand func(entry oscommands.CmdLogEntry)
|
||||
CmdLog []string
|
||||
|
||||
// the extras window contains things like the command log
|
||||
ShowExtrasWindow bool
|
||||
@ -457,9 +456,7 @@ func NewGui(cmn *common.Common, gitCommand *commands.GitCommand, oSCommand *osco
|
||||
|
||||
gui.watchFilesForChanges()
|
||||
|
||||
onRunCommand := gui.GetOnRunCommand()
|
||||
oSCommand.SetOnRunCommand(onRunCommand)
|
||||
gui.OnRunCommand = onRunCommand
|
||||
oSCommand.SetLogCommandFn(gui.logCommand)
|
||||
gui.PopupHandler = &RealPopupHandler{gui: gui}
|
||||
|
||||
authors.SetCustomAuthors(gui.UserConfig.Gui.AuthorColors)
|
||||
@ -625,6 +622,8 @@ func (gui *Gui) runSubprocessWithSuspense(subprocess oscommands.ICmdObj) (bool,
|
||||
}
|
||||
|
||||
func (gui *Gui) runSubprocess(cmdObj oscommands.ICmdObj) error {
|
||||
gui.logCommand(cmdObj.ToString(), true)
|
||||
|
||||
subprocess := cmdObj.GetCmd()
|
||||
subprocess.Stdout = os.Stdout
|
||||
subprocess.Stderr = os.Stdout
|
||||
|
@ -90,7 +90,7 @@ func (gui *Gui) copySelectedToClipboard() error {
|
||||
return gui.withLBLActiveCheck(func(state *LblPanelState) error {
|
||||
selected := state.PlainRenderSelected()
|
||||
|
||||
gui.logSpan(gui.Tr.Spans.CopySelectedTextToClipboard)
|
||||
gui.logAction(gui.Tr.Actions.CopySelectedTextToClipboard)
|
||||
if err := gui.OSCommand.CopyToClipboard(selected); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-errors/errors"
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/mergeconflicts"
|
||||
)
|
||||
@ -65,7 +64,8 @@ func (gui *Gui) handlePopFileSnapshot() error {
|
||||
if gitFile == nil {
|
||||
return nil
|
||||
}
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry("Undoing last conflict resolution", "Undo merge conflict resolution", false))
|
||||
gui.logAction("Restoring file to previous state")
|
||||
gui.logCommand("Undoing last conflict resolution", false)
|
||||
if err := ioutil.WriteFile(gitFile.Name, []byte(prevContent), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -142,7 +142,8 @@ func (gui *Gui) resolveConflict(selection mergeconflicts.Selection) (bool, error
|
||||
case mergeconflicts.ALL:
|
||||
logStr = "Picking all hunks"
|
||||
}
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(logStr, "Resolve merge conflict", false))
|
||||
gui.logAction("Resolve merge conflict")
|
||||
gui.logCommand(logStr, false)
|
||||
return true, ioutil.WriteFile(gitFile.Name, []byte(output), 0644)
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@ func (gui *Gui) handleDeletePatchFromCommit() error {
|
||||
|
||||
return gui.WithWaitingStatus(gui.Tr.RebasingStatus, func() error {
|
||||
commitIndex := gui.getPatchCommitIndex()
|
||||
gui.logSpan(gui.Tr.Spans.RemovePatchFromCommit)
|
||||
gui.logAction(gui.Tr.Actions.RemovePatchFromCommit)
|
||||
err := gui.GitCommand.DeletePatchesFromCommit(gui.State.Commits, commitIndex, gui.GitCommand.PatchManager)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -115,7 +115,7 @@ func (gui *Gui) handleMovePatchToSelectedCommit() error {
|
||||
|
||||
return gui.WithWaitingStatus(gui.Tr.RebasingStatus, func() error {
|
||||
commitIndex := gui.getPatchCommitIndex()
|
||||
gui.logSpan(gui.Tr.Spans.MovePatchToSelectedCommit)
|
||||
gui.logAction(gui.Tr.Actions.MovePatchToSelectedCommit)
|
||||
err := gui.GitCommand.MovePatchToSelectedCommit(gui.State.Commits, commitIndex, gui.State.Panels.Commits.SelectedLineIdx, gui.GitCommand.PatchManager)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -133,7 +133,7 @@ func (gui *Gui) handleMovePatchIntoWorkingTree() error {
|
||||
pull := func(stash bool) error {
|
||||
return gui.WithWaitingStatus(gui.Tr.RebasingStatus, func() error {
|
||||
commitIndex := gui.getPatchCommitIndex()
|
||||
gui.logSpan(gui.Tr.Spans.MovePatchIntoIndex)
|
||||
gui.logAction(gui.Tr.Actions.MovePatchIntoIndex)
|
||||
err := gui.GitCommand.MovePatchIntoIndex(gui.State.Commits, commitIndex, gui.GitCommand.PatchManager, stash)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -163,7 +163,7 @@ func (gui *Gui) handlePullPatchIntoNewCommit() error {
|
||||
|
||||
return gui.WithWaitingStatus(gui.Tr.RebasingStatus, func() error {
|
||||
commitIndex := gui.getPatchCommitIndex()
|
||||
gui.logSpan(gui.Tr.Spans.MovePatchIntoNewCommit)
|
||||
gui.logAction(gui.Tr.Actions.MovePatchIntoNewCommit)
|
||||
err := gui.GitCommand.PullPatchIntoNewCommit(gui.State.Commits, commitIndex, gui.GitCommand.PatchManager)
|
||||
return gui.handleGenericMergeCommandResult(err)
|
||||
})
|
||||
@ -174,11 +174,11 @@ func (gui *Gui) handleApplyPatch(reverse bool) error {
|
||||
return err
|
||||
}
|
||||
|
||||
span := gui.Tr.Spans.ApplyPatch
|
||||
action := gui.Tr.Actions.ApplyPatch
|
||||
if reverse {
|
||||
span = "Apply patch in reverse"
|
||||
action = "Apply patch in reverse"
|
||||
}
|
||||
gui.logSpan(span)
|
||||
gui.logAction(action)
|
||||
if err := gui.GitCommand.PatchManager.ApplyPatches(reverse); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/hosting_service"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
||||
)
|
||||
|
||||
func (gui *Gui) createPullRequestMenu(selectedBranch *models.Branch, checkedOutBranch *models.Branch) error {
|
||||
@ -62,12 +61,12 @@ func (gui *Gui) createPullRequest(from string, to string) error {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
gui.logAction(gui.Tr.CreatePullRequest)
|
||||
|
||||
if err := gui.GitCommand.OSCommand.OpenLink(url); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
gui.OnRunCommand(oscommands.NewCmdLogEntry(fmt.Sprintf(gui.Tr.CreatingPullRequestAtUrl, url), gui.Tr.CreatePullRequest, false))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ func (gui *Gui) genericMergeCommand(command string) error {
|
||||
return gui.createErrorPanel(gui.Tr.NotMergingOrRebasing)
|
||||
}
|
||||
|
||||
gui.logSpan(fmt.Sprintf("Merge/Rebase: %s", command))
|
||||
gui.logAction(fmt.Sprintf("Merge/Rebase: %s", command))
|
||||
|
||||
commandType := ""
|
||||
switch status {
|
||||
|
@ -93,7 +93,7 @@ func (gui *Gui) handleCheckoutReflogCommit() error {
|
||||
title: gui.Tr.LcCheckoutCommit,
|
||||
prompt: gui.Tr.SureCheckoutThisCommit,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.CheckoutReflogCommit)
|
||||
gui.logAction(gui.Tr.Actions.CheckoutReflogCommit)
|
||||
return gui.handleCheckoutRef(commit.Sha, handleCheckoutRefOptions{})
|
||||
},
|
||||
})
|
||||
|
@ -57,7 +57,7 @@ func (gui *Gui) handleDeleteRemoteBranch() error {
|
||||
prompt: message,
|
||||
handleConfirm: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.DeletingStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DeleteRemoteBranch)
|
||||
gui.logAction(gui.Tr.Actions.DeleteRemoteBranch)
|
||||
err := gui.GitCommand.DeleteRemoteBranch(remoteBranch.RemoteName, remoteBranch.Name, gui.promptUserForCredential)
|
||||
gui.handleCredentialsPopup(err)
|
||||
|
||||
@ -88,7 +88,7 @@ func (gui *Gui) handleSetBranchUpstream() error {
|
||||
title: gui.Tr.SetUpstreamTitle,
|
||||
prompt: message,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.SetBranchUpstream)
|
||||
gui.logAction(gui.Tr.Actions.SetBranchUpstream)
|
||||
if err := gui.GitCommand.SetBranchUpstream(selectedBranch.RemoteName, selectedBranch.Name, checkedOutBranch.Name); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ func (gui *Gui) handleAddRemote() error {
|
||||
return gui.prompt(promptOpts{
|
||||
title: gui.Tr.LcNewRemoteUrl,
|
||||
handleConfirm: func(remoteUrl string) error {
|
||||
gui.logSpan(gui.Tr.Spans.AddRemote)
|
||||
gui.logAction(gui.Tr.Actions.AddRemote)
|
||||
if err := gui.GitCommand.AddRemote(remoteName, remoteUrl); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -107,7 +107,7 @@ func (gui *Gui) handleRemoveRemote() error {
|
||||
title: gui.Tr.LcRemoveRemote,
|
||||
prompt: gui.Tr.LcRemoveRemotePrompt + " '" + remote.Name + "'?",
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.RemoveRemote)
|
||||
gui.logAction(gui.Tr.Actions.RemoveRemote)
|
||||
if err := gui.GitCommand.RemoveRemote(remote.Name); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -135,7 +135,7 @@ func (gui *Gui) handleEditRemote() error {
|
||||
initialContent: remote.Name,
|
||||
handleConfirm: func(updatedRemoteName string) error {
|
||||
if updatedRemoteName != remote.Name {
|
||||
gui.logSpan(gui.Tr.Spans.UpdateRemote)
|
||||
gui.logAction(gui.Tr.Actions.UpdateRemote)
|
||||
if err := gui.GitCommand.RenameRemote(remote.Name, updatedRemoteName); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -158,7 +158,7 @@ func (gui *Gui) handleEditRemote() error {
|
||||
title: editUrlMessage,
|
||||
initialContent: url,
|
||||
handleConfirm: func(updatedRemoteUrl string) error {
|
||||
gui.logSpan(gui.Tr.Spans.UpdateRemote)
|
||||
gui.logAction(gui.Tr.Actions.UpdateRemote)
|
||||
if err := gui.GitCommand.UpdateRemoteUrl(updatedRemoteName, updatedRemoteUrl); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ func (gui *Gui) createResetMenu(ref string) error {
|
||||
style.FgRed.Sprintf("reset --%s %s", strength, ref),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan("Reset")
|
||||
gui.logAction("Reset")
|
||||
return gui.resetToRef(ref, strength, []string{})
|
||||
},
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ func (gui *Gui) applySelection(reverse bool, state *LblPanelState) error {
|
||||
if !reverse || state.SecondaryFocused {
|
||||
applyFlags = append(applyFlags, "cached")
|
||||
}
|
||||
gui.logSpan(gui.Tr.Spans.ApplyPatch)
|
||||
gui.logAction(gui.Tr.Actions.ApplyPatch)
|
||||
err := gui.GitCommand.ApplyPatch(patch, applyFlags...)
|
||||
if err != nil {
|
||||
return gui.surfaceError(err)
|
||||
|
@ -106,7 +106,7 @@ func (gui *Gui) stashDo(method string) error {
|
||||
|
||||
return gui.createErrorPanel(errorMessage)
|
||||
}
|
||||
gui.logSpan(gui.Tr.Spans.Stash)
|
||||
gui.logAction(gui.Tr.Actions.Stash)
|
||||
if err := gui.GitCommand.StashDo(stashEntry.Index, method); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ func (gui *Gui) handleCheckoutSubCommit() error {
|
||||
title: gui.Tr.LcCheckoutCommit,
|
||||
prompt: gui.Tr.SureCheckoutThisCommit,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.CheckoutCommit)
|
||||
gui.logAction(gui.Tr.Actions.CheckoutCommit)
|
||||
return gui.handleCheckoutRef(commit.Sha, handleCheckoutRefOptions{})
|
||||
},
|
||||
})
|
||||
|
@ -79,7 +79,7 @@ func (gui *Gui) removeSubmodule(submodule *models.SubmoduleConfig) error {
|
||||
title: gui.Tr.RemoveSubmodule,
|
||||
prompt: fmt.Sprintf(gui.Tr.RemoveSubmodulePrompt, submodule.Name),
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.RemoveSubmodule)
|
||||
gui.logAction(gui.Tr.Actions.RemoveSubmodule)
|
||||
if err := gui.GitCommand.SubmoduleDelete(submodule); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -106,7 +106,7 @@ func (gui *Gui) fileForSubmodule(submodule *models.SubmoduleConfig) *models.File
|
||||
}
|
||||
|
||||
func (gui *Gui) resetSubmodule(submodule *models.SubmoduleConfig) error {
|
||||
gui.logSpan(gui.Tr.Spans.ResetSubmodule)
|
||||
gui.logAction(gui.Tr.Actions.ResetSubmodule)
|
||||
|
||||
file := gui.fileForSubmodule(submodule)
|
||||
if file != nil {
|
||||
@ -141,7 +141,7 @@ func (gui *Gui) handleAddSubmodule() error {
|
||||
initialContent: submoduleName,
|
||||
handleConfirm: func(submodulePath string) error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcAddingSubmoduleStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.AddSubmodule)
|
||||
gui.logAction(gui.Tr.Actions.AddSubmodule)
|
||||
err := gui.GitCommand.SubmoduleAdd(submoduleName, submodulePath, submoduleUrl)
|
||||
gui.handleCredentialsPopup(err)
|
||||
|
||||
@ -162,7 +162,7 @@ func (gui *Gui) handleEditSubmoduleUrl(submodule *models.SubmoduleConfig) error
|
||||
initialContent: submodule.Url,
|
||||
handleConfirm: func(newUrl string) error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcUpdatingSubmoduleUrlStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.UpdateSubmoduleUrl)
|
||||
gui.logAction(gui.Tr.Actions.UpdateSubmoduleUrl)
|
||||
err := gui.GitCommand.SubmoduleUpdateUrl(submodule.Name, submodule.Path, newUrl)
|
||||
gui.handleCredentialsPopup(err)
|
||||
|
||||
@ -174,7 +174,7 @@ func (gui *Gui) handleEditSubmoduleUrl(submodule *models.SubmoduleConfig) error
|
||||
|
||||
func (gui *Gui) handleSubmoduleInit(submodule *models.SubmoduleConfig) error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcInitializingSubmoduleStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.InitialiseSubmodule)
|
||||
gui.logAction(gui.Tr.Actions.InitialiseSubmodule)
|
||||
err := gui.GitCommand.SubmoduleInit(submodule.Path)
|
||||
gui.handleCredentialsPopup(err)
|
||||
|
||||
@ -218,7 +218,7 @@ func (gui *Gui) handleBulkSubmoduleActionsMenu() error {
|
||||
displayStrings: []string{gui.Tr.LcBulkInitSubmodules, style.FgGreen.Sprint(gui.GitCommand.SubmoduleBulkInitCmdObj().ToString())},
|
||||
onPress: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcRunningCommand, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.BulkInitialiseSubmodules)
|
||||
gui.logAction(gui.Tr.Actions.BulkInitialiseSubmodules)
|
||||
err := gui.GitCommand.SubmoduleBulkInitCmdObj().Run()
|
||||
if err != nil {
|
||||
return gui.surfaceError(err)
|
||||
@ -232,7 +232,7 @@ func (gui *Gui) handleBulkSubmoduleActionsMenu() error {
|
||||
displayStrings: []string{gui.Tr.LcBulkUpdateSubmodules, style.FgYellow.Sprint(gui.GitCommand.SubmoduleBulkUpdateCmdObj().ToString())},
|
||||
onPress: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcRunningCommand, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.BulkUpdateSubmodules)
|
||||
gui.logAction(gui.Tr.Actions.BulkUpdateSubmodules)
|
||||
if err := gui.GitCommand.SubmoduleBulkUpdateCmdObj().Run(); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -245,7 +245,7 @@ func (gui *Gui) handleBulkSubmoduleActionsMenu() error {
|
||||
displayStrings: []string{gui.Tr.LcSubmoduleStashAndReset, style.FgRed.Sprintf("git stash in each submodule && %s", gui.GitCommand.SubmoduleForceBulkUpdateCmdObj().ToString())},
|
||||
onPress: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcRunningCommand, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.BulkStashAndResetSubmodules)
|
||||
gui.logAction(gui.Tr.Actions.BulkStashAndResetSubmodules)
|
||||
if err := gui.GitCommand.ResetSubmodules(gui.State.Submodules); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -258,7 +258,7 @@ func (gui *Gui) handleBulkSubmoduleActionsMenu() error {
|
||||
displayStrings: []string{gui.Tr.LcBulkDeinitSubmodules, style.FgRed.Sprint(gui.GitCommand.SubmoduleBulkDeinitCmdObj().ToString())},
|
||||
onPress: func() error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcRunningCommand, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.BulkDeinitialiseSubmodules)
|
||||
gui.logAction(gui.Tr.Actions.BulkDeinitialiseSubmodules)
|
||||
if err := gui.GitCommand.SubmoduleBulkDeinitCmdObj().Run(); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -274,7 +274,7 @@ func (gui *Gui) handleBulkSubmoduleActionsMenu() error {
|
||||
|
||||
func (gui *Gui) handleUpdateSubmodule(submodule *models.SubmoduleConfig) error {
|
||||
return gui.WithWaitingStatus(gui.Tr.LcUpdatingSubmoduleStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.UpdateSubmodule)
|
||||
gui.logAction(gui.Tr.Actions.UpdateSubmodule)
|
||||
err := gui.GitCommand.SubmoduleUpdate(submodule.Path)
|
||||
gui.handleCredentialsPopup(err)
|
||||
|
||||
|
@ -63,7 +63,7 @@ func (gui *Gui) withSelectedTag(f func(tag *models.Tag) error) func() error {
|
||||
// tag-specific handlers
|
||||
|
||||
func (gui *Gui) handleCheckoutTag(tag *models.Tag) error {
|
||||
gui.logSpan(gui.Tr.Spans.CheckoutTag)
|
||||
gui.logAction(gui.Tr.Actions.CheckoutTag)
|
||||
if err := gui.handleCheckoutRef(tag.Name, handleCheckoutRefOptions{}); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -82,7 +82,7 @@ func (gui *Gui) handleDeleteTag(tag *models.Tag) error {
|
||||
title: gui.Tr.DeleteTagTitle,
|
||||
prompt: prompt,
|
||||
handleConfirm: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DeleteTag)
|
||||
gui.logAction(gui.Tr.Actions.DeleteTag)
|
||||
if err := gui.GitCommand.DeleteTag(tag.Name); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -105,7 +105,7 @@ func (gui *Gui) handlePushTag(tag *models.Tag) error {
|
||||
findSuggestionsFunc: gui.getRemoteSuggestionsFunc(),
|
||||
handleConfirm: func(response string) error {
|
||||
return gui.WithWaitingStatus(gui.Tr.PushingTagStatus, func() error {
|
||||
gui.logSpan(gui.Tr.Spans.PushTag)
|
||||
gui.logAction(gui.Tr.Actions.PushTag)
|
||||
err := gui.GitCommand.PushTag(response, tag.Name, gui.promptUserForCredential)
|
||||
gui.handleCredentialsPopup(err)
|
||||
|
||||
|
@ -99,13 +99,13 @@ func (gui *Gui) reflogUndo() error {
|
||||
|
||||
switch action.kind {
|
||||
case COMMIT, REBASE:
|
||||
gui.logSpan(gui.Tr.Spans.Undo)
|
||||
gui.logAction(gui.Tr.Actions.Undo)
|
||||
return true, gui.handleHardResetWithAutoStash(action.from, handleHardResetWithAutoStashOptions{
|
||||
EnvVars: undoEnvVars,
|
||||
WaitingStatus: undoingStatus,
|
||||
})
|
||||
case CHECKOUT:
|
||||
gui.logSpan(gui.Tr.Spans.Undo)
|
||||
gui.logAction(gui.Tr.Actions.Undo)
|
||||
return true, gui.handleCheckoutRef(action.from, handleCheckoutRefOptions{
|
||||
EnvVars: undoEnvVars,
|
||||
WaitingStatus: undoingStatus,
|
||||
@ -135,13 +135,13 @@ func (gui *Gui) reflogRedo() error {
|
||||
|
||||
switch action.kind {
|
||||
case COMMIT, REBASE:
|
||||
gui.logSpan(gui.Tr.Spans.Redo)
|
||||
gui.logAction(gui.Tr.Actions.Redo)
|
||||
return true, gui.handleHardResetWithAutoStash(action.to, handleHardResetWithAutoStashOptions{
|
||||
EnvVars: redoEnvVars,
|
||||
WaitingStatus: redoingStatus,
|
||||
})
|
||||
case CHECKOUT:
|
||||
gui.logSpan(gui.Tr.Spans.Redo)
|
||||
gui.logAction(gui.Tr.Actions.Redo)
|
||||
return true, gui.handleCheckoutRef(action.to, handleCheckoutRefOptions{
|
||||
EnvVars: redoEnvVars,
|
||||
WaitingStatus: redoingStatus,
|
||||
|
@ -21,7 +21,7 @@ func (gui *Gui) handleCreateResetMenu() error {
|
||||
red.Sprint(nukeStr),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.NukeWorkingTree)
|
||||
gui.logAction(gui.Tr.Actions.NukeWorkingTree)
|
||||
if err := gui.GitCommand.ResetAndClean(); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -35,7 +35,7 @@ func (gui *Gui) handleCreateResetMenu() error {
|
||||
red.Sprint("git checkout -- ."),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.DiscardUnstagedFileChanges)
|
||||
gui.logAction(gui.Tr.Actions.DiscardUnstagedFileChanges)
|
||||
if err := gui.GitCommand.DiscardAnyUnstagedFileChanges(); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -49,7 +49,7 @@ func (gui *Gui) handleCreateResetMenu() error {
|
||||
red.Sprint("git clean -fd"),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.RemoveUntrackedFiles)
|
||||
gui.logAction(gui.Tr.Actions.RemoveUntrackedFiles)
|
||||
if err := gui.GitCommand.RemoveUntrackedFiles(); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -63,7 +63,7 @@ func (gui *Gui) handleCreateResetMenu() error {
|
||||
red.Sprint("git reset --soft HEAD"),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.SoftReset)
|
||||
gui.logAction(gui.Tr.Actions.SoftReset)
|
||||
if err := gui.GitCommand.ResetSoft("HEAD"); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -77,7 +77,7 @@ func (gui *Gui) handleCreateResetMenu() error {
|
||||
red.Sprint("git reset --mixed HEAD"),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.MixedReset)
|
||||
gui.logAction(gui.Tr.Actions.MixedReset)
|
||||
if err := gui.GitCommand.ResetMixed("HEAD"); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
@ -91,7 +91,7 @@ func (gui *Gui) handleCreateResetMenu() error {
|
||||
red.Sprint("git reset --hard HEAD"),
|
||||
},
|
||||
onPress: func() error {
|
||||
gui.logSpan(gui.Tr.Spans.HardReset)
|
||||
gui.logAction(gui.Tr.Actions.HardReset)
|
||||
if err := gui.GitCommand.ResetHard("HEAD"); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
@ -441,8 +441,7 @@ func chineseTranslationSet() TranslationSet {
|
||||
LcCreatePullRequestOptions: "创建抓取请求选项",
|
||||
LcDefaultBranch: "默认分支",
|
||||
LcSelectBranch: "选择分支",
|
||||
CreatingPullRequestAtUrl: "在 URL 创建抓取请求: %s",
|
||||
Spans: Spans{
|
||||
Actions: Actions{
|
||||
// TODO: combine this with the original keybinding descriptions (those are all in lowercase atm)
|
||||
CheckoutCommit: "检出提交",
|
||||
CheckoutReflogCommit: "检出reflog提交",
|
||||
|
@ -438,7 +438,6 @@ type TranslationSet struct {
|
||||
LcDefaultBranch string
|
||||
LcSelectBranch string
|
||||
CreatePullRequest string
|
||||
CreatingPullRequestAtUrl string
|
||||
OpeningCommitInBrowser string
|
||||
SelectConfigFile string
|
||||
NoConfigFileFoundErr string
|
||||
@ -456,10 +455,10 @@ type TranslationSet struct {
|
||||
SortCommits string
|
||||
CantChangeContextSizeError string
|
||||
LcOpenCommitInBrowser string
|
||||
Spans Spans
|
||||
Actions Actions
|
||||
}
|
||||
|
||||
type Spans struct {
|
||||
type Actions struct {
|
||||
CheckoutCommit string
|
||||
CheckoutReflogCommit string
|
||||
CheckoutTag string
|
||||
@ -540,6 +539,8 @@ type Spans struct {
|
||||
HardReset string
|
||||
Undo string
|
||||
Redo string
|
||||
CopyPullRequestURL string
|
||||
OpenMergeTool string
|
||||
}
|
||||
|
||||
const englishIntroPopupMessage = `
|
||||
@ -989,7 +990,6 @@ func EnglishTranslationSet() TranslationSet {
|
||||
LcCreatePullRequestOptions: "create pull request options",
|
||||
LcDefaultBranch: "default branch",
|
||||
LcSelectBranch: "select branch",
|
||||
CreatingPullRequestAtUrl: "Creating pull request at URL: %s",
|
||||
OpeningCommitInBrowser: "Opening commit in browser at URL: %s",
|
||||
SelectConfigFile: "Select config file",
|
||||
NoConfigFileFoundErr: "No config file found",
|
||||
@ -1007,7 +1007,7 @@ func EnglishTranslationSet() TranslationSet {
|
||||
SortCommits: "commit sort order",
|
||||
CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!",
|
||||
LcOpenCommitInBrowser: "open commit in browser",
|
||||
Spans: Spans{
|
||||
Actions: Actions{
|
||||
// TODO: combine this with the original keybinding descriptions (those are all in lowercase atm)
|
||||
CheckoutCommit: "Checkout commit",
|
||||
CheckoutReflogCommit: "Checkout reflog commit",
|
||||
@ -1089,6 +1089,8 @@ func EnglishTranslationSet() TranslationSet {
|
||||
FastForwardBranch: "Fast forward branch",
|
||||
Undo: "Undo",
|
||||
Redo: "Redo",
|
||||
CopyPullRequestURL: "Copy pull request URL",
|
||||
OpenMergeTool: "Open merge tool",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user