[ostree] Fix ostree_repo_list_static_delta_names
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] Fix ostree_repo_list_static_delta_names
- Date: Wed, 14 Jan 2015 13:44:12 +0000 (UTC)
commit 82ed6c43edeca7ff1cbc464a08dba4a38f248b9a
Author: Alexander Larsson <alexl redhat com>
Date: Tue Jan 13 21:28:17 2015 +0100
Fix ostree_repo_list_static_delta_names
The current layout uses a prefix of two bytes as the initial dir
and a second directory inside that with the superblock. This
updates the list code to handle that.
https://bugzilla.gnome.org/show_bug.cgi?id=721799
src/libostree/ostree-repo-static-delta-core.c | 41 ++++++++++++++++++++-----
1 files changed, 33 insertions(+), 8 deletions(-)
---
diff --git a/src/libostree/ostree-repo-static-delta-core.c b/src/libostree/ostree-repo-static-delta-core.c
index c404b13..3424086 100644
--- a/src/libostree/ostree-repo-static-delta-core.c
+++ b/src/libostree/ostree-repo-static-delta-core.c
@@ -80,12 +80,12 @@ ostree_repo_list_static_delta_names (OstreeRepo *self,
NULL, error);
if (!dir_enum)
goto out;
-
+
while (TRUE)
{
+ gs_unref_object GFileEnumerator *dir_enum2 = NULL;
GFileInfo *file_info;
GFile *child;
- const char *name;
if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child,
NULL, error))
@@ -96,16 +96,41 @@ ostree_repo_list_static_delta_names (OstreeRepo *self,
if (g_file_info_get_file_type (file_info) != G_FILE_TYPE_DIRECTORY)
continue;
- name = gs_file_get_basename_cached (child);
- {
- gs_unref_object GFile *meta_path = g_file_get_child (child, "superblock");
+ dir_enum2 = g_file_enumerate_children (child, OSTREE_GIO_FAST_QUERYINFO,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ NULL, error);
+ if (!dir_enum2)
+ goto out;
+
+ while (TRUE)
+ {
+ GFileInfo *file_info2;
+ GFile *child2;
+ const char *name1;
+ const char *name2;
+
+ if (!gs_file_enumerator_iterate (dir_enum2, &file_info2, &child2,
+ NULL, error))
+ goto out;
+ if (file_info2 == NULL)
+ break;
+
+ if (g_file_info_get_file_type (file_info2) != G_FILE_TYPE_DIRECTORY)
+ continue;
+
+ name1 = gs_file_get_basename_cached (child);
+ name2 = gs_file_get_basename_cached (child2);
- if (g_file_query_exists (meta_path, NULL))
{
- g_ptr_array_add (ret_deltas, g_strdup (name));
+ gs_unref_object GFile *meta_path = g_file_get_child (child2, "superblock");
+
+ if (g_file_query_exists (meta_path, NULL))
+ {
+ g_ptr_array_add (ret_deltas, g_strconcat (name1, name2, NULL));
+ }
}
- }
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]