[libgit2-glib] Set index entry mode to valid values in stat



commit 8e5a3d85a4acdf4f61b0aaf6b7a8904c53a98fd6
Author: Jesse van den Kieboom <jessevdk gnome org>
Date:   Tue Jun 24 16:57:40 2014 +0200

    Set index entry mode to valid values in stat

 libgit2-glib/ggit-index-entry.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)
---
diff --git a/libgit2-glib/ggit-index-entry.c b/libgit2-glib/ggit-index-entry.c
index a735510..d56dc41 100644
--- a/libgit2-glib/ggit-index-entry.c
+++ b/libgit2-glib/ggit-index-entry.c
@@ -667,6 +667,27 @@ ggit_index_entry_set_path (GgitIndexEntry *entry,
        }
 }
 
+static git_filemode_t
+file_info_to_filemode (GFileInfo *info)
+{
+       git_filemode_t ret = 0;
+
+       if (g_file_info_get_is_symlink (info))
+       {
+               ret |= GIT_FILEMODE_LINK;
+       }
+       else if (g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))
+       {
+               ret |= GIT_FILEMODE_BLOB_EXECUTABLE;
+       }
+       else
+       {
+               ret |= GIT_FILEMODE_BLOB;
+       }
+
+       return ret;
+}
+
 /**
  * ggit_index_entry_stat:
  * @entry: a #GgitIndexEntry.
@@ -698,7 +719,7 @@ ggit_index_entry_stat (GgitIndexEntry  *entry,
                                  G_FILE_ATTRIBUTE_TIME_CREATED_USEC ","
                                  G_FILE_ATTRIBUTE_UNIX_DEVICE ","
                                  G_FILE_ATTRIBUTE_UNIX_INODE ","
-                                 G_FILE_ATTRIBUTE_UNIX_MODE ","
+                                 G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE ","
                                  G_FILE_ATTRIBUTE_UNIX_UID ","
                                  G_FILE_ATTRIBUTE_UNIX_GID,
                                  G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
@@ -736,9 +757,7 @@ ggit_index_entry_stat (GgitIndexEntry  *entry,
                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->mode = file_info_to_filemode (info);
 
        entry->entry->uid =
                g_file_info_get_attribute_uint32 (info,


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