mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-12 11:15:00 +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
74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package git_commands
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
|
|
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
|
)
|
|
|
|
type StatusCommands struct {
|
|
*GitCommon
|
|
}
|
|
|
|
func NewStatusCommands(
|
|
gitCommon *GitCommon,
|
|
) *StatusCommands {
|
|
return &StatusCommands{
|
|
GitCommon: gitCommon,
|
|
}
|
|
}
|
|
|
|
// RebaseMode returns "" for non-rebase mode, "normal" for normal rebase
|
|
// and "interactive" for interactive rebase
|
|
func (self *StatusCommands) RebaseMode() (enums.RebaseMode, error) {
|
|
exists, err := self.os.FileExists(filepath.Join(self.dotGitDir, "rebase-apply"))
|
|
if err != nil {
|
|
return enums.REBASE_MODE_NONE, err
|
|
}
|
|
if exists {
|
|
return enums.REBASE_MODE_NORMAL, nil
|
|
}
|
|
exists, err = self.os.FileExists(filepath.Join(self.dotGitDir, "rebase-merge"))
|
|
if exists {
|
|
return enums.REBASE_MODE_INTERACTIVE, err
|
|
} else {
|
|
return enums.REBASE_MODE_NONE, err
|
|
}
|
|
}
|
|
|
|
func (self *StatusCommands) WorkingTreeState() enums.RebaseMode {
|
|
rebaseMode, _ := self.RebaseMode()
|
|
if rebaseMode != enums.REBASE_MODE_NONE {
|
|
return enums.REBASE_MODE_REBASING
|
|
}
|
|
merging, _ := self.IsInMergeState()
|
|
if merging {
|
|
return enums.REBASE_MODE_MERGING
|
|
}
|
|
return enums.REBASE_MODE_NONE
|
|
}
|
|
|
|
func (self *StatusCommands) IsBareRepo() (bool, error) {
|
|
return IsBareRepo(self.os)
|
|
}
|
|
|
|
func IsBareRepo(osCommand *oscommands.OSCommand) (bool, error) {
|
|
res, err := osCommand.Cmd.New(
|
|
NewGitCmd("rev-parse").Arg("--is-bare-repository").ToArgv(),
|
|
).DontLog().RunWithOutput()
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
// The command returns output with a newline, so we need to strip
|
|
return strconv.ParseBool(strings.TrimSpace(res))
|
|
}
|
|
|
|
// IsInMergeState states whether we are still mid-merge
|
|
func (self *StatusCommands) IsInMergeState() (bool, error) {
|
|
return self.os.FileExists(filepath.Join(self.dotGitDir, "MERGE_HEAD"))
|
|
}
|