libarchive: Support commit sizes metadata

Call the helper to set the generate_sizes boolean so that object size
data is stored while writing the mtree.
This commit is contained in:
Dan Nicholson 2019-10-24 17:00:33 -06:00
parent 291e9da258
commit 1bbe674d91
4 changed files with 26 additions and 6 deletions

View File

@ -348,8 +348,8 @@ content_size_cache_entry_free (gpointer entry)
g_slice_free (OstreeContentSizeCacheEntry, entry); g_slice_free (OstreeContentSizeCacheEntry, entry);
} }
static void void
repo_setup_generate_sizes (OstreeRepo *self, _ostree_repo_setup_generate_sizes (OstreeRepo *self,
OstreeRepoCommitModifier *modifier) OstreeRepoCommitModifier *modifier)
{ {
if (modifier && modifier->flags & OSTREE_REPO_COMMIT_MODIFIER_FLAGS_GENERATE_SIZES) if (modifier && modifier->flags & OSTREE_REPO_COMMIT_MODIFIER_FLAGS_GENERATE_SIZES)
@ -3923,7 +3923,7 @@ ostree_repo_write_directory_to_mtree (OstreeRepo *self,
} }
else else
{ {
repo_setup_generate_sizes (self, modifier); _ostree_repo_setup_generate_sizes (self, modifier);
g_autoptr(GPtrArray) path = g_ptr_array_new (); g_autoptr(GPtrArray) path = g_ptr_array_new ();
if (!write_directory_to_mtree_internal (self, dir, mtree, modifier, path, if (!write_directory_to_mtree_internal (self, dir, mtree, modifier, path,
@ -3957,7 +3957,7 @@ ostree_repo_write_dfd_to_mtree (OstreeRepo *self,
GCancellable *cancellable, GCancellable *cancellable,
GError **error) GError **error)
{ {
repo_setup_generate_sizes (self, modifier); _ostree_repo_setup_generate_sizes (self, modifier);
g_auto(GLnxDirFdIterator) dfd_iter = { 0, }; g_auto(GLnxDirFdIterator) dfd_iter = { 0, };
if (!glnx_dirfd_iterator_init_at (dfd, path, FALSE, &dfd_iter, error)) if (!glnx_dirfd_iterator_init_at (dfd, path, FALSE, &dfd_iter, error))

View File

@ -844,6 +844,8 @@ ostree_repo_import_archive_to_mtree (OstreeRepo *self,
.modifier = modifier .modifier = modifier
}; };
_ostree_repo_setup_generate_sizes (self, modifier);
while (TRUE) while (TRUE)
{ {
int r = archive_read_next_header (a, &aictx.entry); int r = archive_read_next_header (a, &aictx.entry);

View File

@ -337,6 +337,10 @@ _ostree_repo_commit_modifier_apply (OstreeRepo *self,
GFileInfo *file_info, GFileInfo *file_info,
GFileInfo **out_modified_info); GFileInfo **out_modified_info);
void
_ostree_repo_setup_generate_sizes (OstreeRepo *self,
OstreeRepoCommitModifier *modifier);
gboolean gboolean
_ostree_repo_remote_name_is_file (const char *remote_name); _ostree_repo_remote_name_is_file (const char *remote_name);

View File

@ -28,7 +28,7 @@ fi
. $(dirname $0)/libtest.sh . $(dirname $0)/libtest.sh
echo "1..17" echo "1..18"
setup_test_repository "bare" setup_test_repository "bare"
@ -234,3 +234,17 @@ for filter in '^usr/bin/,usr/sbin/' '/bin/,/sbin/'; do
assert_file_has_content usr/lib/libfoo.so 'a library' assert_file_has_content usr/lib/libfoo.so 'a library'
echo "ok tar pathname filter modification: ${filter}" echo "ok tar pathname filter modification: ${filter}"
done done
# Test sizes metadata. This needs an archive repo, so a separate repo is used.
cd ${test_tmpdir}
rm -rf repo2
ostree_repo_init repo2 --mode=archive
${CMD_PREFIX} ostree --repo=repo2 commit \
-s "from tar" -b test-tar \
--generate-sizes \
--tree=tar=foo.tar.gz
${CMD_PREFIX} ostree --repo=repo2 show --print-sizes test-tar > sizes.txt
assert_file_has_content sizes.txt 'Compressed size (needed/total): 0[  ]bytes/1.1[  ]kB'
assert_file_has_content sizes.txt 'Unpacked size (needed/total): 0[  ]bytes/900[  ]bytes'
assert_file_has_content sizes.txt 'Number of objects (needed/total): 0/12'
echo "ok tar sizes metadata"