[libgit2-glib] Added _set API for GgitIndexEntry



commit d571971a48434e38602cb3a0062b920c1bdfec07
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Fri Jun 28 18:17:25 2013 +0200

    Added _set API for GgitIndexEntry

 libgit2-glib/ggit-index-entry.c |  223 ++++++++++++++++++++++++++++++++++++++-
 libgit2-glib/ggit-index-entry.h |   31 ++++++
 2 files changed, 250 insertions(+), 4 deletions(-)
---
diff --git a/libgit2-glib/ggit-index-entry.c b/libgit2-glib/ggit-index-entry.c
index db63e35..24ff44c 100644
--- a/libgit2-glib/ggit-index-entry.c
+++ b/libgit2-glib/ggit-index-entry.c
@@ -20,6 +20,7 @@
 
 #include "ggit-index-entry.h"
 #include "ggit-index.h"
+#include <string.h>
 
 struct _GgitIndexEntries
 {
@@ -29,8 +30,9 @@ struct _GgitIndexEntries
 
 struct _GgitIndexEntry
 {
-       const git_index_entry *entry;
+       git_index_entry *entry;
        gint ref_count;
+       gboolean owned;
 };
 
 G_DEFINE_BOXED_TYPE (GgitIndexEntries,
@@ -44,7 +46,8 @@ G_DEFINE_BOXED_TYPE (GgitIndexEntry,
                      ggit_index_entry_unref)
 
 static GgitIndexEntry *
-ggit_index_entry_wrap (const git_index_entry *entry)
+ggit_index_entry_wrap (git_index_entry *entry,
+                       gboolean         owned)
 {
        GgitIndexEntry *ret;
 
@@ -52,6 +55,7 @@ ggit_index_entry_wrap (const git_index_entry *entry)
 
        ret->entry = entry;
        ret->ref_count = 1;
+       ret->owned = owned;
 
        return ret;
 }
@@ -68,6 +72,42 @@ _ggit_index_entries_wrap (GgitIndex *owner)
        return ret;
 }
 
+GgitIndexEntry *
+ggit_index_entry_new_for_file (GFile   *file,
+                               GgitOId *id)
+{
+       git_index_entry *entry;
+       GgitIndexEntry *ret;
+
+       g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+       entry = g_slice_new0 (git_index_entry);
+
+       ret = ggit_index_entry_wrap (entry, TRUE);
+
+       ggit_index_entry_set_file (ret, file);
+       ggit_index_entry_set_id (ret, id);
+
+       ggit_index_entry_stat (ret);
+       return ret;
+}
+
+GgitIndexEntry *
+ggit_index_entry_new_for_path (const gchar *path,
+                               GgitOId     *id)
+{
+       GFile *f;
+       GgitIndexEntry *ret;
+
+       g_return_val_if_fail (path != NULL, NULL);
+
+       f = g_file_new_for_path (path);
+       ret = ggit_index_entry_new_for_file (f, id);
+       g_object_unref (f);
+
+       return ret;
+}
+
 /**
  * ggit_index_entry_ref:
  * @entry: a #GgitIndexEntry.
@@ -101,6 +141,12 @@ ggit_index_entry_unref (GgitIndexEntry *entry)
 
        if (g_atomic_int_dec_and_test (&entry->ref_count))
        {
+               if (entry->owned)
+               {
+                       g_free (entry->entry->path);
+                       g_slice_free (git_index_entry, entry->entry);
+               }
+
                g_slice_free (GgitIndexEntry, entry);
        }
 }
@@ -175,7 +221,7 @@ ggit_index_entries_get_by_index (GgitIndexEntries *entries,
 
        if (entry)
        {
-               return ggit_index_entry_wrap (entry);
+               return ggit_index_entry_wrap ((git_index_entry *)entry, FALSE);
        }
        else
        {
@@ -222,7 +268,7 @@ ggit_index_entries_get_by_path (GgitIndexEntries *entries,
 
        if (entry)
        {
-               return ggit_index_entry_wrap (entry);
+               return ggit_index_entry_wrap ((git_index_entry *)entry, FALSE);
        }
        else
        {
@@ -269,6 +315,24 @@ ggit_index_entry_get_dev (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_dev:
+ * @entry: a #GgitIndexEntry.
+ * @dev: the dev.
+ *
+ * Set the dev of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_dev (GgitIndexEntry *entry,
+                          guint           dev)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->dev = dev;
+}
+
+/**
  * ggit_index_entry_get_ino:
  * @entry: a #GgitIndexEntry.
  *
@@ -286,6 +350,24 @@ ggit_index_entry_get_ino (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_ino:
+ * @entry: a #GgitIndexEntry.
+ * @ino: the ino.
+ *
+ * Set the ino of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_ino (GgitIndexEntry *entry,
+                          guint           ino)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->ino = ino;
+}
+
+/**
  * ggit_index_entry_get_mode:
  * @entry: a #GgitIndexEntry.
  *
@@ -303,6 +385,24 @@ ggit_index_entry_get_mode (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_mode:
+ * @entry: a #GgitIndexEntry.
+ * @mode: the mode.
+ *
+ * Set the mode of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_mode (GgitIndexEntry *entry,
+                           guint           mode)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->mode = mode;
+}
+
+/**
  * ggit_index_entry_get_uid:
  * @entry: a #GgitIndexEntry.
  *
@@ -320,6 +420,24 @@ ggit_index_entry_get_uid (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_uid:
+ * @entry: a #GgitIndexEntry.
+ * @uid: the uid.
+ *
+ * Set the uid of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_uid (GgitIndexEntry *entry,
+                          guint           uid)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->uid = uid;
+}
+
+/**
  * ggit_index_entry_get_gid:
  * @entry: a #GgitIndexEntry.
  *
@@ -337,6 +455,24 @@ ggit_index_entry_get_gid (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_gid:
+ * @entry: a #GgitIndexEntry.
+ * @gid: the gid.
+ *
+ * Set the gid of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_gid (GgitIndexEntry *entry,
+                          guint           gid)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->gid = gid;
+}
+
+/**
  * ggit_index_entry_get_file_size:
  * @entry: a #GgitIndexEntry.
  *
@@ -354,6 +490,24 @@ ggit_index_entry_get_file_size (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_file_size:
+ * @entry: a #GgitIndexEntry.
+ * @file_size: the file size.
+ *
+ * Set the file size of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_file_size (GgitIndexEntry *entry,
+                                goffset         file_size)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->file_size = file_size;
+}
+
+/**
  * ggit_index_entry_get_id:
  * @entry: a #GgitIndexEntry.
  *
@@ -371,6 +525,31 @@ ggit_index_entry_get_id (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_id:
+ * @entry: a #GgitIndexEntry.
+ * @id: (allow-none): the oid.
+ *
+ * Set the oid of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_id (GgitIndexEntry *entry,
+                         GgitOId        *id)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       if (id != NULL)
+       {
+               entry->entry->oid = *_ggit_oid_get_oid (id);
+       }
+       else
+       {
+               memset (&entry->entry->oid, 0, sizeof (git_oid));
+       }
+}
+
+/**
  * ggit_index_entry_get_flags:
  * @entry: a #GgitIndexEntry.
  *
@@ -388,6 +567,24 @@ ggit_index_entry_get_flags (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_flags:
+ * @entry: a #GgitIndexEntry.
+ * @flags: the flags.
+ *
+ * Set the flags of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_flags (GgitIndexEntry *entry,
+                            guint           flags)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->flags = flags;
+}
+
+/**
  * ggit_index_entry_get_flags_extended:
  * @entry: a #GgitIndexEntry.
  *
@@ -405,6 +602,24 @@ ggit_index_entry_get_flags_extended (GgitIndexEntry *entry)
 }
 
 /**
+ * ggit_index_entry_set_flags_extended:
+ * @entry: a #GgitIndexEntry.
+ * @flags_extended: the extended flags.
+ *
+ * Set the extended flags of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_flags_extended (GgitIndexEntry *entry,
+                                     guint           flags_extended)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       entry->entry->flags_extended = flags_extended;
+}
+
+/**
  * ggit_index_entry_get_file:
  * @entry: a #GgitIndexEntry.
  *
diff --git a/libgit2-glib/ggit-index-entry.h b/libgit2-glib/ggit-index-entry.h
index 0319385..0fd689f 100644
--- a/libgit2-glib/ggit-index-entry.h
+++ b/libgit2-glib/ggit-index-entry.h
@@ -50,20 +50,51 @@ GgitIndexEntry   *ggit_index_entries_get_by_path      (GgitIndexEntries *entries
 guint             ggit_index_entries_size             (GgitIndexEntries  *entries);
 
 GType             ggit_index_entry_get_type           (void) G_GNUC_CONST;
+
+GgitIndexEntry   *ggit_index_entry_new_for_file       (GFile             *file,
+                                                       GgitOId           *id);
+
+GgitIndexEntry   *ggit_index_entry_new_for_path       (const gchar       *path,
+                                                       GgitOId           *id);
+
 GgitIndexEntry   *ggit_index_entry_ref                (GgitIndexEntry    *entry);
 void              ggit_index_entry_unref              (GgitIndexEntry    *entry);
 
 guint             ggit_index_entry_get_dev            (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_dev            (GgitIndexEntry    *entry,
+                                                       guint              dev);
+
 guint             ggit_index_entry_get_ino            (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_ino            (GgitIndexEntry    *entry,
+                                                       guint              ino);
+
 guint             ggit_index_entry_get_mode           (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_mode           (GgitIndexEntry    *entry,
+                                                       guint              mode);
+
 guint             ggit_index_entry_get_uid            (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_uid            (GgitIndexEntry    *entry,
+                                                       guint              uid);
+
 guint             ggit_index_entry_get_gid            (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_gid            (GgitIndexEntry    *entry,
+                                                       guint              gid);
+
 goffset           ggit_index_entry_get_file_size      (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_file_size      (GgitIndexEntry    *entry,
+                                                       goffset            file_size);
 
 GgitOId          *ggit_index_entry_get_id             (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_id             (GgitIndexEntry    *entry,
+                                                       GgitOId           *id);
 
 guint             ggit_index_entry_get_flags          (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_flags          (GgitIndexEntry    *entry,
+                                                       guint              flags);
+
 guint             ggit_index_entry_get_flags_extended (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_flags_extended (GgitIndexEntry    *entry,
+                                                       guint              flags_extended);
 
 GFile            *ggit_index_entry_get_file           (GgitIndexEntry    *entry);
 


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