diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2023-05-21 17:00:29 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2023-05-23 19:49:19 +1000 |
commit | 63dc07fdedec58ae5836a601d9c8839d0481eda6 (patch) | |
tree | e49ce7cf9284ebebfd9d4f4d87311418a8993913 /pkg/gui/controllers/helpers | |
parent | 70e473b25d05d94f07c9d5c7751aaf826e7ad08d (diff) |
Construct arg vector manually rather than parse string
By constructing an arg vector manually, we no longer need to quote arguments
Mandate that args must be passed when building a command
Now you need to provide an args array when building a command.
There are a handful of places where we need to deal with a string,
such as with user-defined custom commands, and for those we now require
that at the callsite they use str.ToArgv to do that. I don't want
to provide a method out of the box for it because I want to discourage its
use.
For some reason we were invoking a command through a shell when amending a
commit, and I don't believe we needed to do that as there was nothing user-
supplied about the command. So I've switched to using a regular command out-
side the shell there
Diffstat (limited to 'pkg/gui/controllers/helpers')
-rw-r--r-- | pkg/gui/controllers/helpers/diff_helper.go | 22 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/gpg_helper.go | 5 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/mode_helper.go | 3 |
3 files changed, 13 insertions, 17 deletions
diff --git a/pkg/gui/controllers/helpers/diff_helper.go b/pkg/gui/controllers/helpers/diff_helper.go index 8d18be2bf..3cf4f5735 100644 --- a/pkg/gui/controllers/helpers/diff_helper.go +++ b/pkg/gui/controllers/helpers/diff_helper.go @@ -1,8 +1,6 @@ package helpers import ( - "fmt" - "github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/modes/diffing" "github.com/jesseduffield/lazygit/pkg/gui/types" @@ -19,27 +17,29 @@ func NewDiffHelper(c *HelperCommon) *DiffHelper { } } -func (self *DiffHelper) DiffStr() string { - output := self.c.Modes().Diffing.Ref +func (self *DiffHelper) DiffArgs() []string { + output := []string{self.c.Modes().Diffing.Ref} right := self.currentDiffTerminal() if right != "" { - output += " " + right + output = append(output, right) } if self.c.Modes().Diffing.Reverse { - output += " -R" + output = append(output, "-R") } if self.c.State().GetIgnoreWhitespaceInDiffView() { - output += " --ignore-all-space" + output = append(output, "--ignore-all-space") } + output = append(output, "--") + file := self.currentlySelectedFilename() if file != "" { - output += " -- " + file + output = append(output, file) } else if self.c.Modes().Filtering.Active() { - output += " -- " + self.c.Modes().Filtering.GetPath() + output = append(output, self.c.Modes().Filtering.GetPath()) } return output @@ -51,9 +51,7 @@ func (self *DiffHelper) ExitDiffMode() error { } func (self *DiffHelper) RenderDiff() error { - cmdObj := self.c.OS().Cmd.New( - fmt.Sprintf("git diff --submodule --no-ext-diff --color %s", self.DiffStr()), - ) + cmdObj := self.c.Git().Diff.DiffCmdObj(self.DiffArgs()) task := types.NewRunPtyTask(cmdObj.GetCmd()) return self.c.RenderToMainViews(types.RefreshMainOpts{ diff --git a/pkg/gui/controllers/helpers/gpg_helper.go b/pkg/gui/controllers/helpers/gpg_helper.go index 0cefc4208..45d67faaf 100644 --- a/pkg/gui/controllers/helpers/gpg_helper.go +++ b/pkg/gui/controllers/helpers/gpg_helper.go @@ -21,11 +21,10 @@ func NewGpgHelper(c *HelperCommon) *GpgHelper { // WithWaitingStatus we get stuck there and can't return to lazygit. We could // fix this bug, or just stop running subprocesses from within there, given that // we don't need to see a loading status if we're in a subprocess. -// TODO: we shouldn't need to use a shell here, but looks like that NewShell function contains some windows specific quoting stuff. We should centralise that. func (self *GpgHelper) WithGpgHandling(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error { useSubprocess := self.c.Git().Config.UsingGpg() if useSubprocess { - success, err := self.c.RunSubprocess(self.c.OS().Cmd.NewShell(cmdObj.ToString())) + success, err := self.c.RunSubprocess(cmdObj) if success && onSuccess != nil { if err := onSuccess(); err != nil { return err @@ -42,8 +41,6 @@ func (self *GpgHelper) WithGpgHandling(cmdObj oscommands.ICmdObj, waitingStatus } func (self *GpgHelper) runAndStream(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error { - cmdObj = self.c.OS().Cmd.NewShell(cmdObj.ToString()) - return self.c.WithWaitingStatus(waitingStatus, func() error { if err := cmdObj.StreamOutput().Run(); err != nil { _ = self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) diff --git a/pkg/gui/controllers/helpers/mode_helper.go b/pkg/gui/controllers/helpers/mode_helper.go index a97625ac7..02672c6fc 100644 --- a/pkg/gui/controllers/helpers/mode_helper.go +++ b/pkg/gui/controllers/helpers/mode_helper.go @@ -2,6 +2,7 @@ package helpers import ( "fmt" + "strings" "github.com/jesseduffield/generics/slices" "github.com/jesseduffield/lazygit/pkg/commands/types/enums" @@ -53,7 +54,7 @@ func (self *ModeHelper) Statuses() []ModeStatus { fmt.Sprintf( "%s %s", self.c.Tr.LcShowingGitDiff, - "git diff "+self.diffHelper.DiffStr(), + "git diff "+strings.Join(self.diffHelper.DiffArgs(), " "), ), style.FgMagenta, ) |