summaryrefslogtreecommitdiffstats
path: root/pkg/commands/status.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-09-29 20:03:39 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-09-29 20:48:49 +1000
commit72af7e41778bca93d82fa668641f515fba1d92bc (patch)
tree7e755e857be72205ee99641d5eb5d4556151ad8f /pkg/commands/status.go
parent1767f91047a35318f6b1e469199c8a7f547f2afc (diff)
factor out code from git.go
Diffstat (limited to 'pkg/commands/status.go')
-rw-r--r--pkg/commands/status.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/pkg/commands/status.go b/pkg/commands/status.go
new file mode 100644
index 000000000..83d16759c
--- /dev/null
+++ b/pkg/commands/status.go
@@ -0,0 +1,48 @@
+package commands
+
+import (
+ "path/filepath"
+
+ gogit "github.com/go-git/go-git/v5"
+)
+
+// RebaseMode returns "" for non-rebase mode, "normal" for normal rebase
+// and "interactive" for interactive rebase
+func (c *GitCommand) RebaseMode() (string, error) {
+ exists, err := c.OSCommand.FileExists(filepath.Join(c.DotGitDir, "rebase-apply"))
+ if err != nil {
+ return "", err
+ }
+ if exists {
+ return "normal", nil
+ }
+ exists, err = c.OSCommand.FileExists(filepath.Join(c.DotGitDir, "rebase-merge"))
+ if exists {
+ return "interactive", err
+ } else {
+ return "", err
+ }
+}
+
+func (c *GitCommand) WorkingTreeState() string {
+ rebaseMode, _ := c.RebaseMode()
+ if rebaseMode != "" {
+ return "rebasing"
+ }
+ merging, _ := c.IsInMergeState()
+ if merging {
+ return "merging"
+ }
+ return "normal"
+}
+
+// IsInMergeState states whether we are still mid-merge
+func (c *GitCommand) IsInMergeState() (bool, error) {
+ return c.OSCommand.FileExists(filepath.Join(c.DotGitDir, "MERGE_HEAD"))
+}
+
+func (c *GitCommand) IsBareRepo() bool {
+ // note: could use `git rev-parse --is-bare-repository` if we wanna drop go-git
+ _, err := c.Repo.Worktree()
+ return err == gogit.ErrIsBareRepository
+}