mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-05 00:59:19 +02:00
Merge pull request #2081 from Ryooooooga/feature/fix-loading-files
This commit is contained in:
@ -21,6 +21,10 @@ func (self *gitCmdObjRunner) RunWithOutput(cmdObj oscommands.ICmdObj) (string, e
|
|||||||
return self.innerRunner.RunWithOutput(cmdObj)
|
return self.innerRunner.RunWithOutput(cmdObj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *gitCmdObjRunner) RunWithOutputs(cmdObj oscommands.ICmdObj) (string, string, error) {
|
||||||
|
return self.innerRunner.RunWithOutputs(cmdObj)
|
||||||
|
}
|
||||||
|
|
||||||
func (self *gitCmdObjRunner) RunAndProcessLines(cmdObj oscommands.ICmdObj, onLine func(line string) (bool, error)) error {
|
func (self *gitCmdObjRunner) RunAndProcessLines(cmdObj oscommands.ICmdObj, onLine func(line string) (bool, error)) error {
|
||||||
return self.innerRunner.RunAndProcessLines(cmdObj, onLine)
|
return self.innerRunner.RunAndProcessLines(cmdObj, onLine)
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ func (c *FileLoader) GitStatus(opts GitStatusOptions) ([]FileStatus, error) {
|
|||||||
noRenamesFlag = " --no-renames"
|
noRenamesFlag = " --no-renames"
|
||||||
}
|
}
|
||||||
|
|
||||||
statusLines, err := c.cmd.New(fmt.Sprintf("git status %s --porcelain -z%s", opts.UntrackedFilesArg, noRenamesFlag)).DontLog().RunWithOutput()
|
statusLines, _, err := c.cmd.New(fmt.Sprintf("git status %s --porcelain -z%s", opts.UntrackedFilesArg, noRenamesFlag)).DontLog().RunWithOutputs()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []FileStatus{}, err
|
return []FileStatus{}, err
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,8 @@ type ICmdObj interface {
|
|||||||
Run() error
|
Run() error
|
||||||
// runs the command and returns the output as a string, and an error if any
|
// runs the command and returns the output as a string, and an error if any
|
||||||
RunWithOutput() (string, error)
|
RunWithOutput() (string, error)
|
||||||
|
// runs the command and returns stdout and stderr as a string, and an error if any
|
||||||
|
RunWithOutputs() (string, string, error)
|
||||||
// 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.
|
// 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
|
RunAndProcessLines(onLine func(line string) (bool, error)) error
|
||||||
|
|
||||||
@ -162,6 +164,10 @@ func (self *CmdObj) RunWithOutput() (string, error) {
|
|||||||
return self.runner.RunWithOutput(self)
|
return self.runner.RunWithOutput(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *CmdObj) RunWithOutputs() (string, string, error) {
|
||||||
|
return self.runner.RunWithOutputs(self)
|
||||||
|
}
|
||||||
|
|
||||||
func (self *CmdObj) RunAndProcessLines(onLine func(line string) (bool, error)) error {
|
func (self *CmdObj) RunAndProcessLines(onLine func(line string) (bool, error)) error {
|
||||||
return self.runner.RunAndProcessLines(self, onLine)
|
return self.runner.RunAndProcessLines(self, onLine)
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
type ICmdObjRunner interface {
|
type ICmdObjRunner interface {
|
||||||
Run(cmdObj ICmdObj) error
|
Run(cmdObj ICmdObj) error
|
||||||
RunWithOutput(cmdObj ICmdObj) (string, error)
|
RunWithOutput(cmdObj ICmdObj) (string, error)
|
||||||
|
RunWithOutputs(cmdObj ICmdObj) (string, string, error)
|
||||||
RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error
|
RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,6 +77,31 @@ func (self *cmdObjRunner) RunWithOutput(cmdObj ICmdObj) (string, error) {
|
|||||||
return self.RunWithOutputAux(cmdObj)
|
return self.RunWithOutputAux(cmdObj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *cmdObjRunner) RunWithOutputs(cmdObj ICmdObj) (string, string, error) {
|
||||||
|
if cmdObj.Mutex() != nil {
|
||||||
|
cmdObj.Mutex().Lock()
|
||||||
|
defer cmdObj.Mutex().Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
if cmdObj.GetCredentialStrategy() != NONE {
|
||||||
|
err := self.runWithCredentialHandling(cmdObj)
|
||||||
|
// for now we're not capturing output, just because it would take a little more
|
||||||
|
// effort and there's currently no use case for it. Some commands call RunWithOutputs
|
||||||
|
// but ignore the output, hence why we've got this check here.
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if cmdObj.ShouldStreamOutput() {
|
||||||
|
err := self.runAndStream(cmdObj)
|
||||||
|
// for now we're not capturing output, just because it would take a little more
|
||||||
|
// effort and there's currently no use case for it. Some commands call RunWithOutputs
|
||||||
|
// but ignore the output, hence why we've got this check here.
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return self.RunWithOutputsAux(cmdObj)
|
||||||
|
}
|
||||||
|
|
||||||
func (self *cmdObjRunner) RunWithOutputAux(cmdObj ICmdObj) (string, error) {
|
func (self *cmdObjRunner) RunWithOutputAux(cmdObj ICmdObj) (string, error) {
|
||||||
self.log.WithField("command", cmdObj.ToString()).Debug("RunCommand")
|
self.log.WithField("command", cmdObj.ToString()).Debug("RunCommand")
|
||||||
|
|
||||||
@ -90,6 +116,28 @@ func (self *cmdObjRunner) RunWithOutputAux(cmdObj ICmdObj) (string, error) {
|
|||||||
return output, err
|
return output, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *cmdObjRunner) RunWithOutputsAux(cmdObj ICmdObj) (string, string, error) {
|
||||||
|
self.log.WithField("command", cmdObj.ToString()).Debug("RunCommand")
|
||||||
|
|
||||||
|
if cmdObj.ShouldLog() {
|
||||||
|
self.logCmdObj(cmdObj)
|
||||||
|
}
|
||||||
|
|
||||||
|
var outBuffer, errBuffer bytes.Buffer
|
||||||
|
cmd := cmdObj.GetCmd()
|
||||||
|
cmd.Stdout = &outBuffer
|
||||||
|
cmd.Stderr = &errBuffer
|
||||||
|
err := cmd.Run()
|
||||||
|
|
||||||
|
stdout := outBuffer.String()
|
||||||
|
stderr, err := sanitisedCommandOutput(errBuffer.Bytes(), err)
|
||||||
|
if err != nil {
|
||||||
|
self.log.WithField("command", cmdObj.ToString()).Error(stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return stdout, stderr, err
|
||||||
|
}
|
||||||
|
|
||||||
func (self *cmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error {
|
func (self *cmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error {
|
||||||
if cmdObj.Mutex() != nil {
|
if cmdObj.Mutex() != nil {
|
||||||
cmdObj.Mutex().Lock()
|
cmdObj.Mutex().Lock()
|
||||||
|
@ -44,6 +44,11 @@ func (self *FakeCmdObjRunner) RunWithOutput(cmdObj ICmdObj) (string, error) {
|
|||||||
return output, err
|
return output, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *FakeCmdObjRunner) RunWithOutputs(cmdObj ICmdObj) (string, string, error) {
|
||||||
|
output, err := self.RunWithOutput(cmdObj)
|
||||||
|
return output, "", err
|
||||||
|
}
|
||||||
|
|
||||||
func (self *FakeCmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error {
|
func (self *FakeCmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error {
|
||||||
output, err := self.RunWithOutput(cmdObj)
|
output, err := self.RunWithOutput(cmdObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user