deltas: Include an endianness marker
We screwed up and had delta integers use host endianness. Start digging out by at least annotating the endianness. https://bugzilla.gnome.org/show_bug.cgi?id=762515
This commit is contained in:
parent
6c285d2e4a
commit
277220aaa6
|
|
@ -1306,6 +1306,10 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
|
||||||
cancellable, error))
|
cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
/* NOTE: Add user-supplied metadata first. This is used by at least
|
||||||
|
* xdg-app as a way to provide MIME content sniffing, since the
|
||||||
|
* metadata appears first in the file.
|
||||||
|
*/
|
||||||
g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}"));
|
g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||||
if (metadata != NULL)
|
if (metadata != NULL)
|
||||||
{
|
{
|
||||||
|
|
@ -1320,6 +1324,21 @@ ostree_repo_static_delta_generate (OstreeRepo *self,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ guint8 endianness_char;
|
||||||
|
switch (G_BYTE_ORDER)
|
||||||
|
{
|
||||||
|
case G_LITTLE_ENDIAN:
|
||||||
|
endianness_char = 'l';
|
||||||
|
break;
|
||||||
|
case G_BIG_ENDIAN:
|
||||||
|
endianness_char = 'B';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
g_variant_builder_add (&metadata_builder, "{sv}", "ostree.endianness", g_variant_new_byte (endianness_char));
|
||||||
|
}
|
||||||
|
|
||||||
if (opt_filename)
|
if (opt_filename)
|
||||||
{
|
{
|
||||||
g_autoptr(GFile) f = g_file_new_for_path (opt_filename);
|
g_autoptr(GFile) f = g_file_new_for_path (opt_filename);
|
||||||
|
|
|
||||||
|
|
@ -678,6 +678,8 @@ _ostree_repo_static_delta_dump (OstreeRepo *self,
|
||||||
g_autofree char *superblock_path = NULL;
|
g_autofree char *superblock_path = NULL;
|
||||||
glnx_fd_close int superblock_fd = -1;
|
glnx_fd_close int superblock_fd = -1;
|
||||||
g_autoptr(GVariant) delta_superblock = NULL;
|
g_autoptr(GVariant) delta_superblock = NULL;
|
||||||
|
g_autoptr(GVariant) delta_meta = NULL;
|
||||||
|
g_autoptr(GVariantDict) delta_metadict = NULL;
|
||||||
guint64 total_size = 0, total_usize = 0;
|
guint64 total_size = 0, total_usize = 0;
|
||||||
guint64 total_fallback_size = 0, total_fallback_usize = 0;
|
guint64 total_fallback_size = 0, total_fallback_usize = 0;
|
||||||
guint i;
|
guint i;
|
||||||
|
|
@ -690,7 +692,33 @@ _ostree_repo_static_delta_dump (OstreeRepo *self,
|
||||||
TRUE, &delta_superblock, error))
|
TRUE, &delta_superblock, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
delta_meta = g_variant_get_child_value (delta_superblock, 0);
|
||||||
|
delta_metadict = g_variant_dict_new (delta_meta);
|
||||||
|
|
||||||
g_print ("Delta: %s\n", delta_id);
|
g_print ("Delta: %s\n", delta_id);
|
||||||
|
{ guint8 endianness_char;
|
||||||
|
const char *endianness_description;
|
||||||
|
|
||||||
|
if (g_variant_dict_lookup (delta_metadict, "ostree.endianness", "y", &endianness_char))
|
||||||
|
{
|
||||||
|
switch (endianness_char)
|
||||||
|
{
|
||||||
|
case 'l':
|
||||||
|
endianness_description = "little";
|
||||||
|
break;
|
||||||
|
case 'B':
|
||||||
|
endianness_description = "big";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
endianness_description = "invalid";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
endianness_description = "unknown";
|
||||||
|
|
||||||
|
g_print ("Endianness: %s\n", endianness_description);
|
||||||
|
}
|
||||||
{ guint64 ts;
|
{ guint64 ts;
|
||||||
g_variant_get_child (delta_superblock, 1, "t", &ts);
|
g_variant_get_child (delta_superblock, 1, "t", &ts);
|
||||||
g_print ("Timestamp: %" G_GUINT64_FORMAT "\n", GUINT64_FROM_BE (ts));
|
g_print ("Timestamp: %" G_GUINT64_FORMAT "\n", GUINT64_FROM_BE (ts));
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,11 @@ fi
|
||||||
|
|
||||||
echo 'ok generate'
|
echo 'ok generate'
|
||||||
|
|
||||||
|
${CMD_PREFIX} ostree --repo=repo static-delta show ${origrev}-${newrev} > show.txt
|
||||||
|
assert_file_has_content show.txt 'Endianness: \(little\|big\)'
|
||||||
|
|
||||||
|
echo 'ok show'
|
||||||
|
|
||||||
mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=archive-z2
|
mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=archive-z2
|
||||||
${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${newrev}
|
${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${newrev}
|
||||||
${CMD_PREFIX} ostree --repo=repo2 fsck
|
${CMD_PREFIX} ostree --repo=repo2 fsck
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue