[libgit2-glib] Move creating tree builder to repository
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgit2-glib] Move creating tree builder to repository
- Date: Fri, 28 Jun 2013 19:58:28 +0000 (UTC)
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]