diff --git a/src/libostree/ostree-repo-static-delta-compilation.c b/src/libostree/ostree-repo-static-delta-compilation.c index 2071bb68..e579e910 100644 --- a/src/libostree/ostree-repo-static-delta-compilation.c +++ b/src/libostree/ostree-repo-static-delta-compilation.c @@ -1306,6 +1306,10 @@ ostree_repo_static_delta_generate (OstreeRepo *self, cancellable, error)) 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}")); 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) { g_autoptr(GFile) f = g_file_new_for_path (opt_filename); diff --git a/src/libostree/ostree-repo-static-delta-core.c b/src/libostree/ostree-repo-static-delta-core.c index ea5842f7..6b1dc571 100644 --- a/src/libostree/ostree-repo-static-delta-core.c +++ b/src/libostree/ostree-repo-static-delta-core.c @@ -678,6 +678,8 @@ _ostree_repo_static_delta_dump (OstreeRepo *self, g_autofree char *superblock_path = NULL; glnx_fd_close int superblock_fd = -1; 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_fallback_size = 0, total_fallback_usize = 0; guint i; @@ -690,7 +692,33 @@ _ostree_repo_static_delta_dump (OstreeRepo *self, TRUE, &delta_superblock, error)) 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); + { 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; g_variant_get_child (delta_superblock, 1, "t", &ts); g_print ("Timestamp: %" G_GUINT64_FORMAT "\n", GUINT64_FROM_BE (ts)); diff --git a/tests/test-delta.sh b/tests/test-delta.sh index b31d65e9..84ce8a7c 100755 --- a/tests/test-delta.sh +++ b/tests/test-delta.sh @@ -114,6 +114,11 @@ fi 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 ${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${newrev} ${CMD_PREFIX} ostree --repo=repo2 fsck