mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-16 11:37:01 +02:00
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package oscommands
|
|
|
|
import (
|
|
"os/exec"
|
|
)
|
|
|
|
// A command object is a general way to represent a command to be run on the
|
|
// command line.
|
|
type ICmdObj interface {
|
|
GetCmd() *exec.Cmd
|
|
// outputs string representation of command. Note that if the command was built
|
|
// using NewFromArgs, the output won't be quite the same as what you would type
|
|
// into a terminal e.g. 'sh -c git commit' as opposed to 'sh -c "git commit"'
|
|
ToString() string
|
|
AddEnvVars(...string) ICmdObj
|
|
GetEnvVars() []string
|
|
|
|
// runs the command and returns an error if any
|
|
Run() error
|
|
// runs the command and returns the output as a string, and an error if any
|
|
RunWithOutput() (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.
|
|
RunAndProcessLines(onLine func(line string) (bool, error)) error
|
|
|
|
// logs command
|
|
Log() ICmdObj
|
|
}
|
|
|
|
type CmdObj struct {
|
|
cmdStr string
|
|
cmd *exec.Cmd
|
|
|
|
runner ICmdObjRunner
|
|
logCommand func(ICmdObj)
|
|
}
|
|
|
|
func (self *CmdObj) GetCmd() *exec.Cmd {
|
|
return self.cmd
|
|
}
|
|
|
|
func (self *CmdObj) ToString() string {
|
|
return self.cmdStr
|
|
}
|
|
|
|
func (self *CmdObj) AddEnvVars(vars ...string) ICmdObj {
|
|
self.cmd.Env = append(self.cmd.Env, vars...)
|
|
|
|
return self
|
|
}
|
|
|
|
func (self *CmdObj) GetEnvVars() []string {
|
|
return self.cmd.Env
|
|
}
|
|
|
|
func (self *CmdObj) Log() ICmdObj {
|
|
self.logCommand(self)
|
|
|
|
return self
|
|
}
|
|
|
|
func (self *CmdObj) Run() error {
|
|
return self.runner.Run(self)
|
|
}
|
|
|
|
func (self *CmdObj) RunWithOutput() (string, error) {
|
|
return self.runner.RunWithOutput(self)
|
|
}
|
|
|
|
func (self *CmdObj) RunAndProcessLines(onLine func(line string) (bool, error)) error {
|
|
return self.runner.RunAndProcessLines(self, onLine)
|
|
}
|