bin/remote-summary: Add options to show metadata
authorDan Nicholson <dbn@endlessos.org>
Mon, 30 Jan 2023 05:45:29 +0000 (22:45 -0700)
committerDan Nicholson <dbn@endlessos.org>
Wed, 8 Feb 2023 05:59:30 +0000 (22:59 -0700)
bash/ostree
src/ostree/ot-remote-builtin-summary.c
tests/test-pull-summary-sigs.sh
tests/test-signed-pull-summary.sh

index 0415e225ae9d8302f5653104cfc7f431052b11bd..875b34ff139663be317fc0d1be28d47858899725 100644 (file)
@@ -1345,11 +1345,13 @@ _ostree_remote_show_url() {
 _ostree_remote_summary() {
     local boolean_options="
         $main_boolean_options
+        --list-metadata-keys
         --raw
     "
 
     local options_with_args="
         --cache-dir
+        --print-metadata-key
         --repo
     "
 
index fb2c45a3797f69c88aca87b394a03ff54da5f72c..55ccc396b223febd74b74fbc6701323ef65605ce 100644 (file)
 #include "ot-dump.h"
 #include "ot-remote-builtins.h"
 
+static gboolean opt_list_metadata_keys;
 static gboolean opt_raw;
 
+static char *opt_print_metadata_key;
 static char* opt_cache_dir;
 
 /* ATTENTION:
@@ -35,6 +37,8 @@ static char* opt_cache_dir;
  */
 
 static GOptionEntry option_entries[] = {
+  { "list-metadata-keys", 0, 0, G_OPTION_ARG_NONE, &opt_list_metadata_keys, "List the available metadata keys", NULL },
+  { "print-metadata-key", 0, 0, G_OPTION_ARG_STRING, &opt_print_metadata_key, "Print string value of metadata key", "KEY" },
   { "cache-dir", 0, 0, G_OPTION_ARG_FILENAME, &opt_cache_dir, "Use custom cache dir", NULL },
   { "raw", 0, 0, G_OPTION_ARG_NONE, &opt_raw, "Show raw variant data", NULL },
   { NULL }
@@ -90,42 +94,54 @@ ot_remote_builtin_summary (int argc, char **argv, OstreeCommandInvocation *invoc
       goto out;
     }
 
-  ot_dump_summary_bytes (summary_bytes, flags);
+  if (opt_list_metadata_keys)
+    {
+      ot_dump_summary_metadata_keys (summary_bytes);
+    }
+  else if (opt_print_metadata_key)
+    {
+      if (!ot_dump_summary_metadata_key (summary_bytes, opt_print_metadata_key, error))
+        goto out;
+    }
+  else
+    {
+      ot_dump_summary_bytes (summary_bytes, flags);
 
 #ifndef OSTREE_DISABLE_GPGME
-  if (!ostree_repo_remote_get_gpg_verify_summary (repo, remote_name,
-                                                  &gpg_verify_summary,
-                                                  error))
-    goto out;
-
-  if (!gpg_verify_summary)
-    g_clear_pointer (&signature_bytes, g_bytes_unref);
-
-  /* XXX Note we don't show signatures for "--raw".  My intuition is
-   *     if someone needs to see or parse raw summary data, including
-   *     signatures in the output would probably just interfere.
-   *     If there's demand for it I suppose we could introduce a new
-   *     option for raw signature data like "--raw-signatures". */
-  if (signature_bytes != NULL && !opt_raw)
-    {
-      g_autoptr(OstreeGpgVerifyResult) result = NULL;
-
-      /* The actual signed summary verification happens above in
-       * ostree_repo_remote_fetch_summary().  Here we just parse
-       * the signatures again for the purpose of printing. */
-      result = ostree_repo_verify_summary (repo,
-                                           remote_name,
-                                           summary_bytes,
-                                           signature_bytes,
-                                           cancellable,
-                                           error);
-      if (result == NULL)
+      if (!ostree_repo_remote_get_gpg_verify_summary (repo, remote_name,
+                                                      &gpg_verify_summary,
+                                                      error))
         goto out;
 
-      g_print ("\n");
-      ostree_print_gpg_verify_result (result);
-    }
+      if (!gpg_verify_summary)
+        g_clear_pointer (&signature_bytes, g_bytes_unref);
+
+      /* XXX Note we don't show signatures for "--raw".  My intuition is
+       *     if someone needs to see or parse raw summary data, including
+       *     signatures in the output would probably just interfere.
+       *     If there's demand for it I suppose we could introduce a new
+       *     option for raw signature data like "--raw-signatures". */
+      if (signature_bytes != NULL && !opt_raw)
+        {
+          g_autoptr(OstreeGpgVerifyResult) result = NULL;
+
+          /* The actual signed summary verification happens above in
+           * ostree_repo_remote_fetch_summary().  Here we just parse
+           * the signatures again for the purpose of printing. */
+          result = ostree_repo_verify_summary (repo,
+                                               remote_name,
+                                               summary_bytes,
+                                               signature_bytes,
+                                               cancellable,
+                                               error);
+          if (result == NULL)
+            goto out;
+
+          g_print ("\n");
+          ostree_print_gpg_verify_result (result);
+        }
 #endif /* OSTREE_DISABLE_GPGME */
+    }
 
   ret = TRUE;
 out:
index 03a40e4630a682aad0973fbb64b6775879aac5e7..e1b0412e68741e0a5b41a66ae9d108f2b6924706 100755 (executable)
@@ -157,6 +157,16 @@ assert_file_has_content summary.txt "Good signature from \"Ostree Tester <test@t
 grep static-deltas summary.txt > static-deltas.txt
 assert_file_has_content static-deltas.txt \
   $(${OSTREE} --repo=repo rev-parse origin:main)
+${OSTREE} --repo=repo remote summary origin --list-metadata-keys > metadata
+assert_file_has_content metadata "^ostree.static-deltas$"
+assert_file_has_content metadata "^ostree.summary.indexed-deltas$"
+assert_file_has_content metadata "^ostree.summary.last-modified$"
+assert_file_has_content metadata "^ostree.summary.mode$"
+assert_file_has_content metadata "^ostree.summary.tombstone-commits$"
+${OSTREE} --repo=repo remote summary origin --print-metadata-key=ostree.summary.indexed-deltas > metadata
+assert_file_has_content metadata "^true$"
+${OSTREE} --repo=repo remote summary origin --print-metadata-key=ostree.summary.mode > metadata
+assert_file_has_content metadata "^'archive-z2'$"
 
 ## Tests for handling of cached summaries while racing with remote summary updates
 
index 2d6b25527c35dc8efabfed210d90cccb860392f9..d28738947e637739f8ba98184170c5cc1491c1e2 100755 (executable)
@@ -194,6 +194,16 @@ assert_file_has_content summary.txt "* yet-another"
 grep static-deltas summary.txt > static-deltas.txt
 assert_file_has_content static-deltas.txt \
     $(${OSTREE} --repo=repo rev-parse origin:main)
+${OSTREE} --repo=repo remote summary origin --list-metadata-keys > metadata
+assert_file_has_content metadata "^ostree.static-deltas$"
+assert_file_has_content metadata "^ostree.summary.indexed-deltas$"
+assert_file_has_content metadata "^ostree.summary.last-modified$"
+assert_file_has_content metadata "^ostree.summary.mode$"
+assert_file_has_content metadata "^ostree.summary.tombstone-commits$"
+${OSTREE} --repo=repo remote summary origin --print-metadata-key=ostree.summary.indexed-deltas > metadata
+assert_file_has_content metadata "^true$"
+${OSTREE} --repo=repo remote summary origin --print-metadata-key=ostree.summary.mode > metadata
+assert_file_has_content metadata "^'archive-z2'$"
 
 ## Tests for handling of cached summaries while racing with remote summary updates