diff options
| author | Carlos MartÃn Nieto <[email protected]> | 2017-07-08 22:22:54 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-07-08 22:22:54 +0200 |
| commit | 2cff3f2ef4828c755a545e5abacd3d7b2da3fc6d (patch) | |
| tree | 61d3a367d55e2b8dce04d803e28b64514e3b6dbf | |
| parent | ce65c2303e9ba1f814ea4001ee437a7ecfcfb7b0 (diff) | |
| parent | b98b0e764066066fd9a5224468c15b50f6627fa9 (diff) | |
Merge pull request #396 from libgit2/cmn/rebase-no-operation
rebase: correct the return values for CurrentOperationIndex
| -rw-r--r-- | rebase.go | 22 | ||||
| -rw-r--r-- | rebase_test.go | 2 |
2 files changed, 17 insertions, 7 deletions
@@ -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") } |
