mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-10 11:10:18 +02:00
63dc07fded
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
44 lines
1.6 KiB
Go
44 lines
1.6 KiB
Go
package commands
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// all we're doing here is wrapping the default command object builder with
|
|
// some git-specific stuff: e.g. adding a git-specific env var
|
|
|
|
type gitCmdObjBuilder struct {
|
|
innerBuilder *oscommands.CmdObjBuilder
|
|
}
|
|
|
|
var _ oscommands.ICmdObjBuilder = &gitCmdObjBuilder{}
|
|
|
|
func NewGitCmdObjBuilder(log *logrus.Entry, innerBuilder *oscommands.CmdObjBuilder) *gitCmdObjBuilder {
|
|
// the price of having a convenient interface where we can say .New(...).Run() is that our builder now depends on our runner, so when we want to wrap the default builder/runner in new functionality we need to jump through some hoops. We could avoid the use of a decorator function here by just exporting the runner field on the default builder but that would be misleading because we don't want anybody using that to run commands (i.e. we want there to be a single API used across the codebase)
|
|
updatedBuilder := innerBuilder.CloneWithNewRunner(func(runner oscommands.ICmdObjRunner) oscommands.ICmdObjRunner {
|
|
return &gitCmdObjRunner{
|
|
log: log,
|
|
innerRunner: runner,
|
|
}
|
|
})
|
|
|
|
return &gitCmdObjBuilder{
|
|
innerBuilder: updatedBuilder,
|
|
}
|
|
}
|
|
|
|
var defaultEnvVar = "GIT_OPTIONAL_LOCKS=0"
|
|
|
|
func (self *gitCmdObjBuilder) New(args []string) oscommands.ICmdObj {
|
|
return self.innerBuilder.New(args).AddEnvVars(defaultEnvVar)
|
|
}
|
|
|
|
func (self *gitCmdObjBuilder) NewShell(cmdStr string) oscommands.ICmdObj {
|
|
return self.innerBuilder.NewShell(cmdStr).AddEnvVars(defaultEnvVar)
|
|
}
|
|
|
|
func (self *gitCmdObjBuilder) Quote(str string) string {
|
|
return self.innerBuilder.Quote(str)
|
|
}
|