mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-22 05:29:44 +02:00
4c5b1574f1
There are quite a few paths you might want to get e.g. the repo's path, the worktree's path, the repo's git dir path, the worktree's git dir path. I want these all obtained once and then used when needed rather than having to have IO whenever we need them. This is not so much about reducing time spent on IO as it is about not having to care about errors every time we want a path.
74 lines
1.9 KiB
Go
74 lines
1.9 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.repoPaths.WorktreeGitDirPath(), "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.repoPaths.WorktreeGitDirPath(), "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.repoPaths.WorktreeGitDirPath(), "MERGE_HEAD"))
|
|
}
|