summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repository.go22
-rw-r--r--status_test.go5
2 files changed, 27 insertions, 0 deletions
diff --git a/repository.go b/repository.go
index 7760c3a..11b0514 100644
--- a/repository.go
+++ b/repository.go
@@ -630,3 +630,25 @@ func (v *Repository) DefaultNoteRef() (string, error) {
return C.GoString(ptr), nil
}
+
+type RepositoryState int
+
+const (
+ RepositoryStateNone RepositoryState = C.GIT_REPOSITORY_STATE_NONE
+ RepositoryStateMerge RepositoryState = C.GIT_REPOSITORY_STATE_MERGE
+ RepositoryStateRevert RepositoryState = C.GIT_REPOSITORY_STATE_REVERT
+ RepositoryStateCherrypick RepositoryState = C.GIT_REPOSITORY_STATE_CHERRYPICK
+ RepositoryStateBisect RepositoryState = C.GIT_REPOSITORY_STATE_BISECT
+ RepositoryStateRebase RepositoryState = C.GIT_REPOSITORY_STATE_REBASE
+ RepositoryStateRebaseInteractive RepositoryState = C.GIT_REPOSITORY_STATE_REBASE_INTERACTIVE
+ RepositoryStateRebaseMerge RepositoryState = C.GIT_REPOSITORY_STATE_REBASE_MERGE
+ RepositoryStateApplyMailbox RepositoryState = C.GIT_REPOSITORY_STATE_APPLY_MAILBOX
+ RepositoryStateApplyMailboxOrRebase RepositoryState = C.GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE
+)
+
+func (r *Repository) State() RepositoryState {
+ runtime.LockOSThread()
+ defer runtime.UnlockOSThread()
+
+ return RepositoryState(C.git_repository_state(r.ptr))
+}
diff --git a/status_test.go b/status_test.go
index 4be4824..d18fca1 100644
--- a/status_test.go
+++ b/status_test.go
@@ -12,6 +12,11 @@ func TestStatusFile(t *testing.T) {
defer repo.Free()
defer os.RemoveAll(repo.Workdir())
+ state := repo.State()
+ if state != RepositoryStateNone {
+ t.Fatal("Incorrect repository state: ", state)
+ }
+
err := ioutil.WriteFile(path.Join(path.Dir(repo.Workdir()), "hello.txt"), []byte("Hello, World"), 0644)
checkFatal(t, err)