diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2022-01-08 14:00:36 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2022-01-09 14:09:53 +1100 |
commit | c9a0cc6b30dca6ff6c520268c10afff4e99a68e9 (patch) | |
tree | 74a03be28aafb5fba5c8391ca611aeb25ca89445 /pkg/commands/git_commands/status.go | |
parent | 3621854dc79baf2064b00b561ebea0ecc8fcb5df (diff) |
refactor
Diffstat (limited to 'pkg/commands/git_commands/status.go')
-rw-r--r-- | pkg/commands/git_commands/status.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/pkg/commands/git_commands/status.go b/pkg/commands/git_commands/status.go new file mode 100644 index 000000000..fe89646d2 --- /dev/null +++ b/pkg/commands/git_commands/status.go @@ -0,0 +1,72 @@ +package git_commands + +import ( + "path/filepath" + + gogit "github.com/jesseduffield/go-git/v5" + "github.com/jesseduffield/lazygit/pkg/commands/oscommands" + "github.com/jesseduffield/lazygit/pkg/commands/types/enums" + "github.com/jesseduffield/lazygit/pkg/common" +) + +type StatusCommands struct { + *common.Common + osCommand *oscommands.OSCommand + repo *gogit.Repository + dotGitDir string +} + +func NewStatusCommands( + common *common.Common, + osCommand *oscommands.OSCommand, + repo *gogit.Repository, + dotGitDir string, +) *StatusCommands { + return &StatusCommands{ + Common: common, + osCommand: osCommand, + repo: repo, + dotGitDir: dotGitDir, + } +} + +// 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.osCommand.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.osCommand.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 +} + +// IsInMergeState states whether we are still mid-merge +func (self *StatusCommands) IsInMergeState() (bool, error) { + return self.osCommand.FileExists(filepath.Join(self.dotGitDir, "MERGE_HEAD")) +} + +func (self *StatusCommands) IsBareRepo() bool { + // note: could use `git rev-parse --is-bare-repository` if we wanna drop go-git + _, err := self.repo.Worktree() + return err == gogit.ErrIsBareRepository +} |