[libgit2-glib] Make ggit_remote_list return an array of GgitRemoteHead
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgit2-glib] Make ggit_remote_list return an array of GgitRemoteHead
- Date: Fri, 22 Nov 2013 18:51:50 +0000 (UTC)
commit 41ebbe949872befb38191c4a7d1eb1c34ed7687c
Author: Jesse van den Kieboom <jessevdk gmail com>
Date: Fri Nov 22 19:51:36 2013 +0100
Make ggit_remote_list return an array of GgitRemoteHead
libgit2-glib/ggit-remote.c | 62 +++++++++++++++-----------------------------
1 files changed, 21 insertions(+), 41 deletions(-)
---
diff --git a/libgit2-glib/ggit-remote.c b/libgit2-glib/ggit-remote.c
index 39adece..34c2918 100644
--- a/libgit2-glib/ggit-remote.c
+++ b/libgit2-glib/ggit-remote.c
@@ -398,64 +398,44 @@ ggit_remote_add_push_spec (GgitRemote *remote,
}
}
-typedef struct {
- GgitRemoteListCallback callback;
- gpointer user_data;
-} RemoteListData;
-
-static gint
-remote_list_callback_wrapper (git_remote_head *head,
- gpointer user_data)
-{
- RemoteListData *data = user_data;
- GgitOId *oid;
- GgitOId *loid;
- gint ret;
-
- oid = _ggit_oid_wrap (&head->oid);
- loid = _ggit_oid_wrap (&head->loid);
-
- ret = data->callback (head->name, oid, loid,
- head->local, data->user_data);
-
- ggit_oid_free (loid);
- ggit_oid_free (oid);
-
- return ret;
-}
-
/**
* ggit_remote_list:
* @remote: a #GgitRemote.
- * @callback: (scope call) (closure user_data): a #GgitRemoteListCallback.
- * @user_data: callback user data.
* @error: a #GError for error reporting, or %NULL.
*
- * Calls @callback for each ref at @remote.
+ * Get a list of refs at the remote.
+ *
+ * Returns: (array zero-terminated=1): the remote heads.
*/
-void
+GgitRemoteHead **
ggit_remote_list (GgitRemote *remote,
- GgitRemoteListCallback callback,
- gpointer user_data,
GError **error)
{
- RemoteListData data;
+ const git_remote_head **head;
+ size_t size;
+ size_t i;
+ GgitRemoteHead **retval;
gint ret;
- g_return_if_fail (remote != NULL);
- g_return_if_fail (callback != NULL);
- g_return_if_fail (error == NULL || *error == NULL);
-
- data.callback = callback;
- data.user_data = user_data;
+ g_return_val_if_fail (remote != NULL, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- ret = git_remote_ls (remote->remote,
- remote_list_callback_wrapper, &data);
+ ret = git_remote_ls (&head, &size, remote->remote);
if (ret != GIT_OK)
{
_ggit_error_set (error, ret);
+ return NULL;
}
+
+ retval = g_new0 (GgitRemoteHead *, size);
+
+ for (i = 0; i < size; i++)
+ {
+ retval[i] = _ggit_remote_head_wrap (head[i]);
+ }
+
+ return retval;
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]