summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/helpers
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-05-21 17:00:29 +1000
committerJesse Duffield <jessedduffield@gmail.com>2023-05-23 19:49:19 +1000
commit63dc07fdedec58ae5836a601d9c8839d0481eda6 (patch)
treee49ce7cf9284ebebfd9d4f4d87311418a8993913 /pkg/gui/controllers/helpers
parent70e473b25d05d94f07c9d5c7751aaf826e7ad08d (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.go22
-rw-r--r--pkg/gui/controllers/helpers/gpg_helper.go5
-rw-r--r--pkg/gui/controllers/helpers/mode_helper.go3
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,
)