summaryrefslogtreecommitdiffstats
path: root/pkg/commands/git_commands/status.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-01-08 14:00:36 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-01-09 14:09:53 +1100
commitc9a0cc6b30dca6ff6c520268c10afff4e99a68e9 (patch)
tree74a03be28aafb5fba5c8391ca611aeb25ca89445 /pkg/commands/git_commands/status.go
parent3621854dc79baf2064b00b561ebea0ecc8fcb5df (diff)
refactor
Diffstat (limited to 'pkg/commands/git_commands/status.go')
-rw-r--r--pkg/commands/git_commands/status.go72
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
+}