From 45be961d6060e4e9cf48cbee71752dadbb279e68 Mon Sep 17 00:00:00 2001 From: chengyuhang Date: Thu, 2 Oct 2014 14:46:32 +0800 Subject: [PATCH] set remote callback before push --- pygit2/remote.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pygit2/remote.py b/pygit2/remote.py index c544fd0..8e55344 100644 --- a/pygit2/remote.py +++ b/pygit2/remote.py @@ -321,6 +321,30 @@ class Remote(object): :param Signature signature: signature to use when updating the tips :param str message: message to use when updating the tips """ + # Get the default callbacks first + defaultcallbacks = ffi.new('git_remote_callbacks *') + err = C.git_remote_init_callbacks(defaultcallbacks, 1) + check_error(err) + + # Build custom callback structure + callbacks = ffi.new('git_remote_callbacks *') + callbacks.version = 1 + callbacks.sideband_progress = self._sideband_progress_cb + callbacks.transfer_progress = self._transfer_progress_cb + callbacks.update_tips = self._update_tips_cb + callbacks.credentials = self._credentials_cb + # We need to make sure that this handle stays alive + self._self_handle = ffi.new_handle(self) + callbacks.payload = self._self_handle + + err = C.git_remote_set_callbacks(self._remote, callbacks) + + try: + check_error(err) + except: + self._self_handle = None + raise + cpush = ffi.new('git_push **') err = C.git_push_new(cpush, self._remote) @@ -354,6 +378,7 @@ class Remote(object): check_error(err) finally: + self._self_handle = None C.git_push_free(push) # These functions exist to be called by the git_remote as