[libgit2-glib] Bind more tree builder API



commit 43383327112517ff16cf9c0e6a8c2ddeb1462226
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Fri Jun 28 21:42:03 2013 +0200

    Bind more tree builder API

 libgit2-glib/ggit-tree-builder.c |   95 ++++++++++++++++++++++++++++++++++++++
 libgit2-glib/ggit-tree-builder.h |   22 +++++++--
 2 files changed, 112 insertions(+), 5 deletions(-)
---
diff --git a/libgit2-glib/ggit-tree-builder.c b/libgit2-glib/ggit-tree-builder.c
index a239436..5867c16 100644
--- a/libgit2-glib/ggit-tree-builder.c
+++ b/libgit2-glib/ggit-tree-builder.c
@@ -153,5 +153,100 @@ ggit_tree_builder_get_entry (GgitTreeBuilder *builder,
        }
 }
 
+/**
+ * ggit_tree_builder_clear:
+ * @builder: a #GgitTreeBuilder.
+ *
+ * Clear all entries in the tree builder.
+ *
+ **/
+void
+ggit_tree_builder_clear (GgitTreeBuilder *builder)
+{
+       g_return_if_fail (GGIT_IS_TREE_BUILDER (builder));
+
+       git_treebuilder_clear (_ggit_native_get (builder));
+}
+
+/**
+ * ggit_tree_builder_write:
+ * @builder: a #GgitTreeBuilder.
+ * @error: a #GError.
+ *
+ * Write the contents of the tree builder as a tree object.
+ *
+ * Returns: the #GgitOId of the created tree object.
+ *
+ **/
+GgitOId *
+ggit_tree_builder_write (GgitTreeBuilder  *builder,
+                         GError          **error)
+{
+       git_oid oid;
+       gint ret;
+
+       g_return_val_if_fail (GGIT_IS_TREE_BUILDER (builder), NULL);
+       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+       ret = git_treebuilder_write (&oid,
+                                    _ggit_native_get (builder),
+                                    _ggit_native_get (builder->priv->repository));
+
+       if (ret != GIT_OK)
+       {
+               _ggit_error_set (error, ret);
+               return NULL;
+       }
+
+       return _ggit_oid_wrap (&oid);
+}
+
+/**
+ * ggit_tree_builder_insert:
+ * @builder: a #GgitTreeBuilder.
+ * @filename: the file name.
+ * @oid: the #GgitOId of the file blob to insert.
+ * @file_mode: a #GgitFileMode.
+ * @error: a #GError.
+ *
+ * Insert a file with a given blob in the tree builder. If the tree builder
+ * already contains an entry for the given file, then this entry will be
+ * overwritten.
+ *
+ * Note that the returned #GgitTreeEntry is bound to the lifetime of the tree
+ * builder and cannot be used after the tree builder has been freed.
+ *
+ * Returns: (transfer full): a #GgitTreeEntry.
+ *
+ **/
+GgitTreeEntry *
+ggit_tree_builder_insert (GgitTreeBuilder  *builder,
+                          const gchar      *filename,
+                          GgitOId          *oid,
+                          GgitFileMode      file_mode,
+                          GError          **error)
+{
+       gint ret;
+       const git_tree_entry *entry;
+
+       g_return_val_if_fail (GGIT_IS_TREE_BUILDER (builder), NULL);
+       g_return_val_if_fail (filename != NULL, NULL);
+       g_return_val_if_fail (oid != NULL, NULL);
+       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+       ret = git_treebuilder_insert (&entry,
+                                     _ggit_native_get (builder),
+                                     filename,
+                                     _ggit_oid_get_oid (oid),
+                                     file_mode);
+
+       if (ret != GIT_OK)
+       {
+               _ggit_error_set (error, ret);
+               return NULL;
+       }
+
+       return _ggit_tree_entry_wrap ((git_tree_entry *)entry, FALSE);
+}
 
 /* ex:set ts=8 noet: */
diff --git a/libgit2-glib/ggit-tree-builder.h b/libgit2-glib/ggit-tree-builder.h
index 0a9147a..8b214ac 100644
--- a/libgit2-glib/ggit-tree-builder.h
+++ b/libgit2-glib/ggit-tree-builder.h
@@ -24,6 +24,7 @@
 #include <git2.h>
 #include <libgit2-glib/ggit-native.h>
 #include <libgit2-glib/ggit-types.h>
+#include <libgit2-glib/ggit-oid.h>
 
 G_BEGIN_DECLS
 
@@ -58,17 +59,28 @@ struct _GgitTreeBuilderClass
        GgitNativeClass parent_class;
 };
 
-GType            ggit_tree_builder_get_type (void) G_GNUC_CONST;
+GType            ggit_tree_builder_get_type  (void) G_GNUC_CONST;
 
 GgitTreeBuilder *_ggit_tree_builder_wrap     (git_treebuilder *builder,
                                               GgitRepository  *repository,
                                               gboolean         owned);
 
-void             ggit_tree_builder_remove (GgitTreeBuilder  *builder,
-                                           const gchar      *path,
-                                           GError          **error);
+void             ggit_tree_builder_remove    (GgitTreeBuilder  *builder,
+                                              const gchar      *path,
+                                              GError          **error);
 
- GgitTreeEntry  *ggit_tree_builder_get_entry (GgitTreeBuilder *builder,
+void             ggit_tree_builder_clear     (GgitTreeBuilder *builder);
+
+GgitOId         *ggit_tree_builder_write     (GgitTreeBuilder  *builder,
+                                              GError          **error);
+
+GgitTreeEntry   *ggit_tree_builder_insert    (GgitTreeBuilder  *builder,
+                                              const gchar      *filename,
+                                              GgitOId          *oid,
+                                              GgitFileMode      file_mode,
+                                              GError          **error);
+
+GgitTreeEntry   *ggit_tree_builder_get_entry (GgitTreeBuilder *builder,
                                               const gchar     *path);
 
 G_END_DECLS


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