From c0e73c9fa0c5113deafcf65d51783af165a80e76 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sat, 5 May 2012 16:00:53 -0400 Subject: [PATCH] core: pack: Fix calculation of size of pack objects In archive mode, due to the previous change, we're now only looking at metadata size, which is clearly wrong. --- src/ostree/ot-builtin-pack.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/ostree/ot-builtin-pack.c b/src/ostree/ot-builtin-pack.c index 7edee9e8..9aaa1c7d 100644 --- a/src/ostree/ot-builtin-pack.c +++ b/src/ostree/ot-builtin-pack.c @@ -575,8 +575,6 @@ cluster_objects_stupidly (OtRepackData *data, ot_lptrarray GPtrArray *ret_data_clusters = NULL; ot_lptrarray GPtrArray *meta_object_list = NULL; ot_lptrarray GPtrArray *data_object_list = NULL; - ot_lobj GFile *object_path = NULL; - ot_lobj GFileInfo *object_info = NULL; meta_object_list = g_ptr_array_new_with_free_func ((GDestroyNotify)g_variant_unref); data_object_list = g_ptr_array_new_with_free_func ((GDestroyNotify)g_variant_unref); @@ -589,21 +587,27 @@ cluster_objects_stupidly (OtRepackData *data, OstreeObjectType objtype; guint64 size; GVariant *v; + ot_lobj GFile *object_path = NULL; + ot_lobj GFileInfo *object_info = NULL; ostree_object_name_deserialize (serialized_key, &checksum, &objtype); - g_clear_object (&object_path); - object_path = ostree_repo_get_object_path (data->repo, checksum, objtype); + if (OSTREE_OBJECT_TYPE_IS_META (objtype)) + { + object_path = ostree_repo_get_object_path (data->repo, checksum, objtype); - g_clear_object (&object_info); - object_info = g_file_query_info (object_path, OSTREE_GIO_FAST_QUERYINFO, - G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, - cancellable, error); - if (!object_info) - goto out; - - if (g_file_info_get_file_type (object_info) != G_FILE_TYPE_REGULAR) - continue; + object_info = g_file_query_info (object_path, OSTREE_GIO_FAST_QUERYINFO, + G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, + cancellable, error); + if (!object_info) + goto out; + } + else + { + if (!ostree_repo_load_file (data->repo, checksum, NULL, &object_info, NULL, + cancellable, error)) + goto out; + } size = g_file_info_get_attribute_uint64 (object_info, G_FILE_ATTRIBUTE_STANDARD_SIZE);