[libgit2-glib] Added ggit_index_entry_stat to fill an index entry by statting its path



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

    Added ggit_index_entry_stat to fill an index entry by statting its path

 libgit2-glib/ggit-index-entry.c |  115 +++++++++++++++++++++++++++++++++++++++
 libgit2-glib/ggit-index-entry.h |    4 ++
 2 files changed, 119 insertions(+), 0 deletions(-)
---
diff --git a/libgit2-glib/ggit-index-entry.c b/libgit2-glib/ggit-index-entry.c
index 24ff44c..56b68c5 100644
--- a/libgit2-glib/ggit-index-entry.c
+++ b/libgit2-glib/ggit-index-entry.c
@@ -641,6 +641,121 @@ ggit_index_entry_get_file (GgitIndexEntry *entry)
        return g_file_new_for_path (entry->entry->path);
 }
 
+/**
+ * ggit_index_entry_set_file:
+ * @entry: a #GgitIndexEntry.
+ * @file: (allow-none): a #GFile.
+ *
+ * Set the file of the index entry.
+ *
+ **/
+void
+ggit_index_entry_set_file (GgitIndexEntry *entry,
+                           GFile          *file)
+{
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (file == NULL || G_IS_FILE (file));
+       g_return_if_fail (entry->owned);
+
+       if (entry->entry->path)
+       {
+               g_free (entry->entry->path);
+               entry->entry->path = NULL;
+       }
+
+       if (file)
+       {
+               entry->entry->path = g_file_get_path (file);
+       }
+}
+
+/**
+ * ggit_index_entry_stat:
+ * @entry: a #GgitIndexEntry.
+ *
+ * Fill the entry fields from statting the entry file. Note that the entry
+ * file must be set correctly and the file must exist.
+ *
+ **/
+void
+ggit_index_entry_stat (GgitIndexEntry *entry)
+{
+       GFile *f;
+       GFileInfo *info;
+
+       g_return_if_fail (entry != NULL);
+       g_return_if_fail (entry->owned);
+
+       if (entry->entry->path == NULL)
+       {
+               return;
+       }
+
+       f = g_file_new_for_path (entry->entry->path);
+
+       info = g_file_query_info (f,
+                                 G_FILE_ATTRIBUTE_STANDARD_SIZE ","
+                                 G_FILE_ATTRIBUTE_TIME_MODIFIED ","
+                                 G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC ","
+                                 G_FILE_ATTRIBUTE_TIME_CREATED ","
+                                 G_FILE_ATTRIBUTE_TIME_CREATED_USEC ","
+                                 G_FILE_ATTRIBUTE_UNIX_DEVICE ","
+                                 G_FILE_ATTRIBUTE_UNIX_INODE ","
+                                 G_FILE_ATTRIBUTE_UNIX_MODE ","
+                                 G_FILE_ATTRIBUTE_UNIX_UID ","
+                                 G_FILE_ATTRIBUTE_UNIX_GID,
+                                 G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+                                 NULL,
+                                 NULL);
+
+       g_object_unref (f);
+
+       if (!info)
+       {
+               return;
+       }
+
+       entry->entry->file_size = g_file_info_get_size (info);
+
+       entry->entry->mtime.seconds =
+               g_file_info_get_attribute_uint64 (info,
+                                                 G_FILE_ATTRIBUTE_TIME_MODIFIED);
+
+       entry->entry->mtime.nanoseconds =
+               g_file_info_get_attribute_uint32 (info,
+                                                 G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC) * 1e3;
+
+       entry->entry->ctime.seconds =
+               g_file_info_get_attribute_uint64 (info,
+                                                 G_FILE_ATTRIBUTE_TIME_CREATED);
+
+       entry->entry->ctime.nanoseconds =
+               g_file_info_get_attribute_uint32 (info,
+                                                 G_FILE_ATTRIBUTE_TIME_CREATED_USEC) * 1e3;
+
+       entry->entry->dev =
+               g_file_info_get_attribute_uint32 (info,
+                                                 G_FILE_ATTRIBUTE_UNIX_DEVICE);
+
+       entry->entry->ino =
+               g_file_info_get_attribute_uint64 (info,
+                                                 G_FILE_ATTRIBUTE_UNIX_INODE);
+
+       entry->entry->mode =
+               g_file_info_get_attribute_uint32 (info,
+                                                 G_FILE_ATTRIBUTE_UNIX_MODE);
+
+       entry->entry->uid =
+               g_file_info_get_attribute_uint32 (info,
+                                                 G_FILE_ATTRIBUTE_UNIX_UID);
+
+       entry->entry->gid =
+               g_file_info_get_attribute_uint32 (info,
+                                                 G_FILE_ATTRIBUTE_UNIX_GID);
+
+       g_object_unref (info);
+}
+
 const git_index_entry *
 _ggit_index_entry_get_native (GgitIndexEntry *entry)
 {
diff --git a/libgit2-glib/ggit-index-entry.h b/libgit2-glib/ggit-index-entry.h
index 0fd689f..292c799 100644
--- a/libgit2-glib/ggit-index-entry.h
+++ b/libgit2-glib/ggit-index-entry.h
@@ -97,6 +97,10 @@ void              ggit_index_entry_set_flags_extended (GgitIndexEntry    *entry,
                                                        guint              flags_extended);
 
 GFile            *ggit_index_entry_get_file           (GgitIndexEntry    *entry);
+void              ggit_index_entry_set_file           (GgitIndexEntry    *entry,
+                                                       GFile             *file);
+
+void              ggit_index_entry_stat               (GgitIndexEntry    *entry);
 
 const git_index_entry *_ggit_index_entry_get_native         (GgitIndexEntry    *entry);
 


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