[libgit2-glib] Use GError instead of raw git2 error codes



commit d5ccf9b170e3b597c509865926ec21f14ba889c9
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Sat Nov 23 10:49:22 2013 +0100

    Use GError instead of raw git2 error codes

 libgit2-glib/ggit-remote-callbacks.c |  127 +++++++++++++++++++++++++++++-----
 libgit2-glib/ggit-remote-callbacks.h |   45 +++++++-----
 2 files changed, 135 insertions(+), 37 deletions(-)
---
diff --git a/libgit2-glib/ggit-remote-callbacks.c b/libgit2-glib/ggit-remote-callbacks.c
index 84a4afe..de15c2d 100644
--- a/libgit2-glib/ggit-remote-callbacks.c
+++ b/libgit2-glib/ggit-remote-callbacks.c
@@ -59,7 +59,25 @@ progress_wrap (const char *str, int len, void *data)
 
        if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->progress != NULL)
        {
-               return GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->progress (self, str, len);
+               GError *error = NULL;
+
+               if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->progress (self,
+                                                                     str,
+                                                                     len,
+                                                                     &error))
+               {
+                       return GIT_OK;
+               }
+               else
+               {
+                       if (error)
+                       {
+                               giterr_set_str (GIT_ERROR, error->message);
+                               g_error_free (error);
+                       }
+
+                       return GIT_ERROR;
+               }
        }
        else
        {
@@ -74,7 +92,25 @@ completion_wrap (git_remote_completion_type type, void *data)
 
        if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->completion != NULL)
        {
-               return GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->completion (self, 
(GgitRemoteCompletionType)type);
+               GError *error = NULL;
+               GgitRemoteCompletionType rt = (GgitRemoteCompletionType)type;
+
+               if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->completion (self,
+                                                                       rt,
+                                                                       &error))
+               {
+                       return GIT_OK;
+               }
+               else
+               {
+                       if (error)
+                       {
+                               giterr_set_str (GIT_ERROR, error->message);
+                               g_error_free (error);
+                       }
+
+                       return GIT_ERROR;
+               }
        }
        else
        {
@@ -83,28 +119,48 @@ completion_wrap (git_remote_completion_type type, void *data)
 }
 
 static int
-credentials_wrap (git_cred **cred, const char *url, const char *username_from_url, unsigned int 
allowed_types, void *data)
+credentials_wrap (git_cred     **cred,
+                  const char    *url,
+                  const char    *username_from_url,
+                  unsigned int   allowed_types,
+                  void          *data)
 {
        GgitRemoteCallbacks *self = GGIT_REMOTE_CALLBACKS (data);
 
        if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->credentials != NULL)
        {
                GgitCred *mcred = NULL;
-               gint ret;
-
-               ret = GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->credentials (self, &mcred, url, 
username_from_url, allowed_types);
-
-               if (mcred != NULL)
+               GError *error = NULL;
+
+               if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->credentials (self,
+                                                                        &mcred,
+                                                                        url,
+                                                                        username_from_url,
+                                                                        allowed_types,
+                                                                        &error))
                {
-                       *cred = _ggit_native_release (mcred);
-                       g_object_unref (mcred);
+                       if (mcred != NULL)
+                       {
+                               *cred = _ggit_native_release (mcred);
+                               g_object_unref (mcred);
+                       }
+                       else
+                       {
+                               *cred = NULL;
+                       }
+
+                       return GIT_OK;
                }
                else
                {
-                       *cred = NULL;
-               }
+                       if (error)
+                       {
+                               giterr_set_str (GIT_ERROR, error->message);
+                               g_error_free (error);
+                       }
 
-               return ret;
+                       return GIT_ERROR;
+               }
        }
        else
        {
@@ -120,13 +176,29 @@ transfer_progress_wrap (const git_transfer_progress *stats, void *data)
        if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->transfer_progress != NULL)
        {
                GgitTransferProgress *p;
+               GError *error = NULL;
                gint ret;
 
                p = _ggit_transfer_progress_wrap (stats);
 
-               ret = GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->transfer_progress (self, p);
-               ggit_transfer_progress_free (p);
+               if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->transfer_progress (self,
+                                                                              p,
+                                                                              &error))
+               {
+                       ret = GIT_OK;
+               }
+               else
+               {
+                       if (error)
+                       {
+                               giterr_set_str (GIT_ERROR, error->message);
+                               g_error_free (error);
+                       }
 
+                       ret = GIT_ERROR;
+               }
+
+               ggit_transfer_progress_free (p);
                return ret;
        }
        else
@@ -136,7 +208,10 @@ transfer_progress_wrap (const git_transfer_progress *stats, void *data)
 }
 
 static int
-update_tips_wrap (const char *refname, const git_oid *a, const git_oid *b, void *data)
+update_tips_wrap (const char    *refname,
+                  const git_oid *a,
+                  const git_oid *b,
+                  void          *data)
 {
        GgitRemoteCallbacks *self = GGIT_REMOTE_CALLBACKS (data);
 
@@ -145,11 +220,29 @@ update_tips_wrap (const char *refname, const git_oid *a, const git_oid *b, void
                GgitOId *na;
                GgitOId *nb;
                gint ret;
+               GError *error = NULL;
 
                na = _ggit_oid_wrap (a);
                nb = _ggit_oid_wrap (b);
 
-               ret = GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->update_tips (self, refname, na, nb);
+               if (GGIT_REMOTE_CALLBACKS_GET_CLASS (self)->update_tips (self,
+                                                                        refname,
+                                                                        na,
+                                                                        nb,
+                                                                        &error))
+               {
+                       ret = GIT_OK;
+               }
+               else
+               {
+                       if (error)
+                       {
+                               giterr_set_str (GIT_ERROR, error->message);
+                               g_error_free (error);
+                       }
+
+                       ret = GIT_ERROR;
+               }
 
                ggit_oid_free (na);
                ggit_oid_free (nb);
diff --git a/libgit2-glib/ggit-remote-callbacks.h b/libgit2-glib/ggit-remote-callbacks.h
index 925d9af..a09e5b3 100644
--- a/libgit2-glib/ggit-remote-callbacks.h
+++ b/libgit2-glib/ggit-remote-callbacks.h
@@ -52,26 +52,31 @@ struct _GgitRemoteCallbacksClass
        GObjectClass parent_class;
 
        /* virtual methods */
-       gint (*progress)          (GgitRemoteCallbacks        *callbacks,
-                                  const gchar                *str,
-                                  gint                        len);
-
-       gint (*completion)        (GgitRemoteCallbacks        *callbacks,
-                                  GgitRemoteCompletionType    type);
-
-       gint (*credentials)       (GgitRemoteCallbacks        *callbacks,
-                                  GgitCred                  **cred,
-                                  const gchar                *url,
-                                  const gchar                *username_from_url,
-                                  guint                       allowed_types);
-
-       gint (*transfer_progress) (GgitRemoteCallbacks        *callbacks,
-                                  GgitTransferProgress       *stats);
-
-       gint (*update_tips)       (GgitRemoteCallbacks        *callbacks,
-                                  const gchar                *refname,
-                                  const GgitOId              *a,
-                                  const GgitOId              *b);
+       gboolean (*progress)          (GgitRemoteCallbacks        *callbacks,
+                                      const gchar                *str,
+                                      gint                        len,
+                                      GError                    **error);
+
+       gboolean (*completion)        (GgitRemoteCallbacks        *callbacks,
+                                      GgitRemoteCompletionType    type,
+                                      GError                    **error);
+
+       gboolean (*credentials)       (GgitRemoteCallbacks        *callbacks,
+                                      GgitCred                  **cred,
+                                      const gchar                *url,
+                                      const gchar                *username_from_url,
+                                      guint                       allowed_types,
+                                      GError                    **error);
+
+       gboolean (*transfer_progress) (GgitRemoteCallbacks        *callbacks,
+                                      GgitTransferProgress       *stats,
+                                      GError                    **error);
+
+       gboolean (*update_tips)       (GgitRemoteCallbacks        *callbacks,
+                                      const gchar                *refname,
+                                      const GgitOId              *a,
+                                      const GgitOId              *b,
+                                      GError                    **error);
 };
 
 GType                 ggit_remote_callbacks_get_type   (void) G_GNUC_CONST;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]