Merge remote-tracking branch 'origin/master' into v26
diff --git a/Makefile b/Makefile
index b2399f8..cf00cef 100644
--- a/Makefile
+++ b/Makefile
@@ -10,12 +10,9 @@
 build-libgit2:
 	./script/build-libgit2-static.sh
 
-static: build-libgit2
-	go run script/check-MakeGitError-thread-lock.go
-	go test --tags "static" ./...
-
 install-static: build-libgit2
 	go install --tags "static" ./...
 
 test-static: build-libgit2
+	go run script/check-MakeGitError-thread-lock.go
 	go test --tags "static" ./...
diff --git a/rebase.go b/rebase.go
index 390b924..1f1324d 100644
--- a/rebase.go
+++ b/rebase.go
@@ -5,6 +5,7 @@
 */
 import "C"
 import (
+	"errors"
 	"runtime"
 	"unsafe"
 )
@@ -25,6 +26,12 @@
 	RebaseOperationExec RebaseOperationType = C.GIT_REBASE_OPERATION_EXEC
 )
 
+// Special value indicating that there is no currently active operation
+var RebaseNoOperation uint = ^uint(0)
+
+// Error returned if there is no current rebase operation
+var ErrRebaseNoOperation = errors.New("o current rebase operation")
+
 // RebaseOperation describes a single instruction/operation to be performed during the rebase.
 type RebaseOperation struct {
 	Type RebaseOperationType
@@ -154,18 +161,21 @@
 	return newRebaseOperationFromC(operation)
 }
 
-// CurrentOperationIndex gets the index of the rebase operation that is currently being applied.
-// Returns an error if no rebase operation is currently applied.
+// CurrentOperationIndex gets the index of the rebase operation that is
+// currently being applied. There is also an error returned for API
+// compatibility.
 func (rebase *Rebase) CurrentOperationIndex() (uint, error) {
 	runtime.LockOSThread()
 	defer runtime.UnlockOSThread()
 
-	operationIndex := int(C.git_rebase_operation_current(rebase.ptr))
-	if operationIndex == C.GIT_REBASE_NO_OPERATION {
-		return 0, MakeGitError(C.GIT_REBASE_NO_OPERATION)
+	var err error
+	operationIndex := uint(C.git_rebase_operation_current(rebase.ptr))
+	runtime.KeepAlive(rebase)
+	if operationIndex == RebaseNoOperation {
+		err = ErrRebaseNoOperation
 	}
 
-	return uint(operationIndex), nil
+	return uint(operationIndex), err
 }
 
 // OperationCount gets the count of rebase operations that are to be applied.
diff --git a/rebase_test.go b/rebase_test.go
index fb88a4e..ef4f920 100644
--- a/rebase_test.go
+++ b/rebase_test.go
@@ -182,7 +182,7 @@
 
 	// Check no operation has been started yet
 	rebaseOperationIndex, err := rebase.CurrentOperationIndex()
-	if err == nil {
+	if rebaseOperationIndex != RebaseNoOperation && err != ErrRebaseNoOperation {
 		return nil, errors.New("No operation should have been started yet")
 	}