[libgit2-glib] Move creating tree builder to repository



commit 9b3b42eb061efb301412eb22fc5da65b1ad104a9
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Fri Jun 28 21:41:41 2013 +0200

    Move creating tree builder to repository

 libgit2-glib/ggit-repository.c   |   56 ++++++++++++++++++++++++++++++++++++++
 libgit2-glib/ggit-repository.h   |    8 +++++
 libgit2-glib/ggit-tree-builder.c |   37 +++++++++++++++++++++++++
 libgit2-glib/ggit-tree-builder.h |   11 +++++---
 libgit2-glib/ggit-tree.c         |   33 ----------------------
 libgit2-glib/ggit-tree.h         |    3 --
 6 files changed, 108 insertions(+), 40 deletions(-)
---
diff --git a/libgit2-glib/ggit-repository.c b/libgit2-glib/ggit-repository.c
index 1f4dc62..13aaa0f 100644
--- a/libgit2-glib/ggit-repository.c
+++ b/libgit2-glib/ggit-repository.c
@@ -31,6 +31,7 @@
 #include "ggit-signature.h"
 #include "ggit-clone-options.h"
 #include "ggit-status-options.h"
+#include "ggit-tree-builder.h"
 
 #define GGIT_REPOSITORY_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GGIT_TYPE_REPOSITORY, 
GgitRepositoryPrivate))
 
@@ -2006,4 +2007,59 @@ ggit_repository_create_blob_from_path (GgitRepository  *repository,
        return _ggit_oid_wrap (&oid);
 }
 
+
+/**
+ * ggit_repository_create_tree_builder:
+ * @repository: a #GgitRepository.
+ *
+ * Create a new tree builder.
+ *
+ * Returns: (transfer full): a #GgitTreeBuilder.
+ *
+ **/
+GgitTreeBuilder *
+ggit_repository_create_tree_builder (GgitRepository *repository)
+{
+       git_treebuilder *builder;
+
+       g_return_val_if_fail (GGIT_IS_REPOSITORY (repository), NULL);
+
+       git_treebuilder_create (&builder, NULL);
+       return _ggit_tree_builder_wrap (builder, repository, TRUE);
+}
+
+/**
+ * ggit_repository_create_tree_builder_from_tree:
+ * @tree: a #GgitTree.
+ * @error: a #GError for error reporting, or %NULL.
+ *
+ * Create a tree builder for initialized with @tree. To create an empty
+ * tree builder, use #ggit_repository_create_tree_builder instead.
+ *
+ * Returns: (transfer full): a new #GgitTreeBuilder object, or %NULL if there was an error.
+ *
+ **/
+GgitTreeBuilder *
+ggit_repository_create_tree_builder_from_tree (GgitRepository  *repository,
+                                               GgitTree        *tree,
+                                               GError         **error)
+{
+       gint ret;
+       git_treebuilder *builder;
+
+       g_return_val_if_fail (GGIT_IS_REPOSITORY (repository), NULL);
+       g_return_val_if_fail (GGIT_IS_TREE (tree), NULL);
+       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+       ret = git_treebuilder_create (&builder, _ggit_native_get (tree));
+
+       if (ret != GIT_OK)
+       {
+               _ggit_error_set (error, ret);
+               return NULL;
+       }
+
+       return _ggit_tree_builder_wrap (builder, repository, TRUE);
+}
+
 /* ex:set ts=8 noet: */
diff --git a/libgit2-glib/ggit-repository.h b/libgit2-glib/ggit-repository.h
index 38181e8..3de7c0a 100644
--- a/libgit2-glib/ggit-repository.h
+++ b/libgit2-glib/ggit-repository.h
@@ -141,6 +141,14 @@ GgitOId            *ggit_repository_create_tag_lightweight (
                                                        GgitCreateFlags        flags,
                                                        GError               **error);
 
+GgitTreeBuilder    *ggit_repository_create_tree_builder_from_tree (
+                                                       GgitRepository        *repository,
+                                                       GgitTree              *tree,
+                                                       GError               **error);
+
+GgitTreeBuilder    *ggit_repository_create_tree_builder (
+                                                       GgitRepository        *repository);
+
 gchar             **ggit_repository_list_tags         (GgitRepository        *repository,
                                                        GError               **error);
 
diff --git a/libgit2-glib/ggit-tree-builder.c b/libgit2-glib/ggit-tree-builder.c
index 95c2cea..a239436 100644
--- a/libgit2-glib/ggit-tree-builder.c
+++ b/libgit2-glib/ggit-tree-builder.c
@@ -24,20 +24,52 @@
 #include "ggit-error.h"
 #include "ggit-tree-entry.h"
 
+#define GGIT_TREE_BUILDER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GGIT_TYPE_TREE_BUILDER, 
GgitTreeBuilderPrivate))
+
+struct _GgitTreeBuilderPrivate
+{
+       GgitRepository *repository;
+};
+
 G_DEFINE_TYPE (GgitTreeBuilder, ggit_tree_builder, GGIT_TYPE_NATIVE)
 
 static void
+ggit_tree_builder_dispose (GObject *object)
+{
+       GgitTreeBuilder *builder;
+
+       builder = GGIT_TREE_BUILDER (object);
+
+       if (builder->priv->repository)
+       {
+               g_object_unref (builder->priv->repository);
+               builder->priv->repository = NULL;
+       }
+
+       G_OBJECT_CLASS (ggit_tree_builder_parent_class)->dispose (object);
+}
+
+static void
 ggit_tree_builder_class_init (GgitTreeBuilderClass *klass)
 {
+       GObjectClass *object_class;
+
+       object_class = G_OBJECT_CLASS (klass);
+
+       object_class->dispose = ggit_tree_builder_dispose;
+
+       g_type_class_add_private (object_class, sizeof (GgitTreeBuilderPrivate));
 }
 
 static void
 ggit_tree_builder_init (GgitTreeBuilder *self)
 {
+       self->priv = GGIT_TREE_BUILDER_GET_PRIVATE (self);
 }
 
 GgitTreeBuilder *
 _ggit_tree_builder_wrap (git_treebuilder *builder,
+                         GgitRepository  *repository,
                          gboolean         owned)
 {
        GgitTreeBuilder *gbuilder;
@@ -46,6 +78,11 @@ _ggit_tree_builder_wrap (git_treebuilder *builder,
                                 "native", builder,
                                 NULL);
 
+       if (repository)
+       {
+               gbuilder->priv->repository = g_object_ref (repository);
+       }
+
        if (owned)
        {
                _ggit_native_set_destroy_func (gbuilder,
diff --git a/libgit2-glib/ggit-tree-builder.h b/libgit2-glib/ggit-tree-builder.h
index 15c9da4..0a9147a 100644
--- a/libgit2-glib/ggit-tree-builder.h
+++ b/libgit2-glib/ggit-tree-builder.h
@@ -23,6 +23,7 @@
 
 #include <git2.h>
 #include <libgit2-glib/ggit-native.h>
+#include <libgit2-glib/ggit-types.h>
 
 G_BEGIN_DECLS
 
@@ -34,14 +35,15 @@ G_BEGIN_DECLS
 #define GGIT_TREE_BUILDER_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GGIT_TYPE_TREE_BUILDER, 
GgitTreeBuilderClass))
 
 typedef struct _GgitTreeBuilderClass   GgitTreeBuilderClass;
+typedef struct _GgitTreeBuilderPrivate  GgitTreeBuilderPrivate;
 
 struct _GgitTreeBuilder
 {
        /*< private >*/
        GgitNative parent;
 
-       /* priv padding */
-       gpointer priv;
+       /* priv */
+       GgitTreeBuilderPrivate *priv;
 };
 
 /**
@@ -58,8 +60,9 @@ struct _GgitTreeBuilderClass
 
 GType            ggit_tree_builder_get_type (void) G_GNUC_CONST;
 
-GgitTreeBuilder *_ggit_tree_builder_wrap    (git_treebuilder *builder,
-                                             gboolean  owned);
+GgitTreeBuilder *_ggit_tree_builder_wrap     (git_treebuilder *builder,
+                                              GgitRepository  *repository,
+                                              gboolean         owned);
 
 void             ggit_tree_builder_remove (GgitTreeBuilder  *builder,
                                            const gchar      *path,
diff --git a/libgit2-glib/ggit-tree.c b/libgit2-glib/ggit-tree.c
index 97f2365..6ba1873 100644
--- a/libgit2-glib/ggit-tree.c
+++ b/libgit2-glib/ggit-tree.c
@@ -23,7 +23,6 @@
 #include "ggit-tree.h"
 #include "ggit-oid.h"
 #include "ggit-error.h"
-#include "ggit-tree-builder.h"
 
 G_DEFINE_TYPE (GgitTree, ggit_tree, GGIT_TYPE_OBJECT)
 
@@ -266,36 +265,4 @@ ggit_tree_walk (GgitTree              *tree,
        }
 }
 
-/**
- * ggit_tree_create_builder:
- * @tree: (allow-none): a #GgitTree.
- * @error: a #GError for error reporting, or %NULL.
- *
- * Create a tree builder for initialized with @tree. If @tree is %NULL,
- * then the builder will initially be empty.
- *
- * Returns: (transfer full): a new #GgitTreeBuilder object, or %NULL if there was an error.
- *
- **/
-GgitTreeBuilder *
-ggit_tree_create_builder (GgitTree  *tree,
-                          GError   **error)
-{
-       gint ret;
-       git_treebuilder *builder;
-
-       g_return_val_if_fail (tree == NULL || GGIT_IS_TREE (tree), NULL);
-       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
-       ret = git_treebuilder_create (&builder, _ggit_native_get (tree));
-
-       if (ret != GIT_OK)
-       {
-               _ggit_error_set (error, ret);
-               return NULL;
-       }
-
-       return _ggit_tree_builder_wrap (builder, TRUE);
-}
-
 /* ex:set ts=8 noet: */
diff --git a/libgit2-glib/ggit-tree.h b/libgit2-glib/ggit-tree.h
index 46a9de4..e4f75aa 100644
--- a/libgit2-glib/ggit-tree.h
+++ b/libgit2-glib/ggit-tree.h
@@ -84,9 +84,6 @@ void           ggit_tree_walk           (GgitTree              *tree,
                                          gpointer               user_data,
                                          GError               **error);
 
-GgitTreeBuilder *ggit_tree_create_builder (GgitTree  *tree,
-                                           GError   **error);
-
 G_END_DECLS
 
 #endif /* __GGIT_TREE_H__ */


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