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
This commit is contained in:
Jesse Duffield 2023-05-21 17:00:29 +10:00
parent 70e473b25d
commit 63dc07fded
221 changed files with 1050 additions and 885 deletions

View file

@ -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{