core: Add standard::size to info we get from archives

This makes "ostree ls" show the file size.
This commit is contained in:
Colin Walters 2012-01-19 09:54:09 -05:00
parent 47e94305a1
commit 39fe050f04
2 changed files with 19 additions and 1 deletions

View File

@ -816,6 +816,8 @@ ostree_repo_file_tree_query_child (OstreeRepoFile *self,
const char *name = NULL;
gboolean ret = FALSE;
GFileInfo *ret_info = NULL;
GFile *archive_data_path = NULL;
GFileInfo *archive_data_info = NULL;
GVariant *archive_metadata = NULL;
GVariant *files_variant = NULL;
GVariant *dirs_variant = NULL;
@ -850,6 +852,20 @@ ostree_repo_file_tree_query_child (OstreeRepoFile *self,
goto out;
if (!ostree_parse_archived_file_meta (archive_metadata, &ret_info, NULL, error))
goto out;
archive_data_path = ostree_repo_get_object_path (self->repo, checksum,
OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT);
archive_data_info = g_file_query_info (archive_data_path,
OSTREE_GIO_FAST_QUERYINFO,
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
cancellable,
error);
if (!archive_data_info)
goto out;
g_file_info_set_attribute_uint64 (ret_info, "standard::size",
g_file_info_get_attribute_uint64 (archive_data_info,
"standard::size"));
}
else
{
@ -902,6 +918,8 @@ ostree_repo_file_tree_query_child (OstreeRepoFile *self,
out:
g_clear_object (&ret_info);
g_clear_object (&local_child);
g_clear_object (&archive_data_path);
g_clear_object (&archive_data_info);
if (matcher)
g_file_attribute_matcher_unref (matcher);
ot_clear_gvariant (&archive_metadata);

View File

@ -31,7 +31,7 @@ G_BEGIN_DECLS
* readlink(). Other things require opening the file, or also
* stat()ing the parent directory.
*/
#define OSTREE_GIO_FAST_QUERYINFO ("standard::name,standard::type,standard::is-symlink,standard::symlink-target,standard::is-hidden," \
#define OSTREE_GIO_FAST_QUERYINFO ("standard::name,standard::type,standard::size,standard::is-symlink,standard::symlink-target,standard::is-hidden," \
"unix::device,unix::inode,unix::mode,unix::uid,unix::gid,unix::rdev")
GFileType ot_gfile_type_for_mode (guint32 mode);