summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2017-07-08 22:22:54 +0200
committerGitHub <[email protected]>2017-07-08 22:22:54 +0200
commit2cff3f2ef4828c755a545e5abacd3d7b2da3fc6d (patch)
tree61d3a367d55e2b8dce04d803e28b64514e3b6dbf
parentce65c2303e9ba1f814ea4001ee437a7ecfcfb7b0 (diff)
parentb98b0e764066066fd9a5224468c15b50f6627fa9 (diff)
Merge pull request #396 from libgit2/cmn/rebase-no-operation
rebase: correct the return values for CurrentOperationIndex
-rw-r--r--rebase.go22
-rw-r--r--rebase_test.go2
2 files changed, 17 insertions, 7 deletions
diff --git a/rebase.go b/rebase.go
index 390b924..1f1324d 100644
--- a/rebase.go
+++ b/rebase.go
@@ -5,6 +5,7 @@ package git
*/
import "C"
import (
+ "errors"
"runtime"
"unsafe"
)
@@ -25,6 +26,12 @@ const (
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 @@ func (rebase *Rebase) OperationAt(index uint) *RebaseOperation {
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 @@ func performRebaseOnto(repo *Repository, branch string) (*Rebase, error) {
// 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")
}