From 10c67474a89c298172a6703b91980ea37c60d5e5 Mon Sep 17 00:00:00 2001 From: lhchavez Date: Thu, 10 Dec 2020 07:19:41 -0800 Subject: More callback refactoring (#713) This change: * Gets rid of the `.toC()` functions for Options objects, since they were redundant with the `populateXxxOptions()`. * Adds support for `errorTarget` to the `RemoteOptions`, since they are used in the same stack for some functions (like `Fetch()`). Now for those cases, the error returned by the callback will be preserved as-is. --- indexer.go | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'indexer.go') diff --git a/indexer.go b/indexer.go index d1b9372..601ac9c 100644 --- a/indexer.go +++ b/indexer.go @@ -19,34 +19,31 @@ import ( // Indexer can post-process packfiles and create an .idx file for efficient // lookup. type Indexer struct { - ptr *C.git_indexer - stats C.git_transfer_progress - callbacks RemoteCallbacks - callbacksHandle unsafe.Pointer + ptr *C.git_indexer + stats C.git_transfer_progress + ccallbacks C.git_remote_callbacks } // NewIndexer creates a new indexer instance. func NewIndexer(packfilePath string, odb *Odb, callback TransferProgressCallback) (indexer *Indexer, err error) { - indexer = new(Indexer) - - runtime.LockOSThread() - defer runtime.UnlockOSThread() - var odbPtr *C.git_odb = nil if odb != nil { odbPtr = odb.ptr } - indexer.callbacks.TransferProgressCallback = callback - indexer.callbacksHandle = pointerHandles.Track(&indexer.callbacks) + indexer = new(Indexer) + populateRemoteCallbacks(&indexer.ccallbacks, &RemoteCallbacks{TransferProgressCallback: callback}, nil) + + runtime.LockOSThread() + defer runtime.UnlockOSThread() cstr := C.CString(packfilePath) defer C.free(unsafe.Pointer(cstr)) - ret := C._go_git_indexer_new(&indexer.ptr, cstr, 0, odbPtr, indexer.callbacksHandle) + ret := C._go_git_indexer_new(&indexer.ptr, cstr, 0, odbPtr, indexer.ccallbacks.payload) runtime.KeepAlive(odb) if ret < 0 { - pointerHandles.Untrack(indexer.callbacksHandle) + untrackCallbacksPayload(&indexer.ccallbacks) return nil, MakeGitError(ret) } @@ -93,7 +90,7 @@ func (indexer *Indexer) Commit() (*Oid, error) { // Free frees the indexer and its resources. func (indexer *Indexer) Free() { - pointerHandles.Untrack(indexer.callbacksHandle) + untrackCallbacksPayload(&indexer.ccallbacks) runtime.SetFinalizer(indexer, nil) C.git_indexer_free(indexer.ptr) } -- cgit v1.2.3