core: Add standard SOURCE_TITLE metadata key
authorColin Walters <walters@verbum.org>
Thu, 19 Oct 2017 18:28:02 +0000 (14:28 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 23 Oct 2017 14:19:41 +0000 (14:19 +0000)
This is a freeform string useful to track/display when a commit is "derived"
from some other format.  For example, in the rpm-ostree test we make a
`vmcheck` ref that conceptually overlays the default ref like
`fedora-atomic:fedora/26/x86_64/atomic-host`.

My current patch sets the source title to e.g.
"Dev overlay on fedora-atomic:fedora/26/x86_64/atomic-host".

Another case I'm working on now is importing OCI images to use
as host images.  For that case, the source title is
With this patch we could then set the original OCI image name + tag
as the source name, like:
"oci:cgwalters/demo-custom-fedora-atomic-host:26".

Closes: #1296
Approved by: jlebon

src/libostree/ostree-core.h
src/ostree/ot-admin-builtin-status.c
tests/admin-test.sh
tests/test-admin-deploy-uboot.sh

index 979b35a2cbd414986ccbee2d6a2c29e692cbaee8..3e3631fb0b1dd6f386a98cc7029b61ed3899e766 100644 (file)
@@ -228,6 +228,23 @@ typedef enum {
  * Since: 2017.7
  */
 #define OSTREE_COMMIT_META_KEY_ENDOFLIFE "ostree.endoflife"
+/**
+ * OSTREE_COMMIT_META_KEY_SOURCE_TITLE:
+ *
+ * GVariant type `s`. This should hold a relatively short single line value
+ * containing a human-readable "source" for a commit, intended to be displayed
+ * near the origin ref.  This is particularly useful for systems that inject
+ * content into an OSTree commit from elsewhere - for example, generating from
+ * an OCI or qcow2 image. Or if generating from packages, the enabled repository
+ * names and their versions.
+ *
+ * Try to keep this key short (e.g. < 80 characters) and human-readable; if you
+ * desire machine readable data, consider injecting separate metadata keys.
+ *
+ * Since: 2017.13
+ */
+#define OSTREE_COMMIT_META_KEY_SOURCE_TITLE "ostree.source-title"
+
 /**
  * OSTREE_COMMIT_META_KEY_REF_BINDING:
  *
index 8d180a6a47ea173bf33efd990055601d3537c0b7..b6fc7117ba0190e0dd58d7dcc466230f1895a538 100644 (file)
@@ -114,8 +114,12 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
             commit_metadata = g_variant_get_child_value (commit, 0);
 
           const char *version = NULL;
+          const char *source_title = NULL;
           if (commit_metadata)
-            (void) g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_VERSION, "&s", &version);
+            {
+              (void) g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_VERSION, "&s", &version);
+              (void) g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_SOURCE_TITLE, "&s", &source_title);
+            }
 
           GKeyFile *origin = ostree_deployment_get_origin (deployment);
 
@@ -152,6 +156,8 @@ ot_admin_builtin_status (int argc, char **argv, OstreeCommandInvocation *invocat
                 g_print ("    origin: <unknown origin type>\n");
               else
                 g_print ("    origin refspec: %s\n", origin_refspec);
+              if (source_title)
+                g_print ("    `- %s\n", source_title);
             }
 
           if (deployment_get_gpg_verify (deployment, repo))
index f5d33a6f2bc07caf264efd53181bff555d7569e9..dafbc79b0a18c2c6e533c392d9adca53851911e0 100644 (file)
@@ -19,7 +19,7 @@
 
 set -euo pipefail
 
-echo "1..$((22 + ${extra_admin_tests:-0}))"
+echo "1..$((23 + ${extra_admin_tests:-0}))"
 
 function validate_bootloader() {
     cd ${test_tmpdir};
@@ -277,6 +277,14 @@ assert_streq ${curr_rev} ${head_rev}
 
 echo "ok upgrade with and without override-commit"
 
+${CMD_PREFIX} ostree --repo=${test_tmpdir}/testos-repo commit  --add-metadata-string "version=${version}" \
+              --add-metadata-string 'ostree.source-title=libtest os_repository_new_commit()' -b testos/buildmaster/x86_64-runtime \
+              -s "Build" --tree=dir=${test_tmpdir}/osdata
+${CMD_PREFIX} ostree admin upgrade --os=testos
+${CMD_PREFIX} ostree admin status | tee status.txt
+assert_file_has_content_literal status.txt '`- libtest os_repository_new_commit()'
+echo "ok source title"
+
 deployment=$(${CMD_PREFIX} ostree admin --sysroot=sysroot --print-current-dir)
 ${CMD_PREFIX} ostree --sysroot=sysroot remote add --set=gpg-verify=false remote-test-physical file://$(pwd)/testos-repo
 assert_not_has_file ${deployment}/etc/ostree/remotes.d/remote-test-physical.conf testos-repo
index 7791360e04c5363381a096ec38d41e26cc693b82..ec0314770c2d5b4c7ead2b007d188850c0f37d7f 100755 (executable)
@@ -30,6 +30,10 @@ extra_admin_tests=1
 . $(dirname $0)/admin-test.sh
 
 cd ${test_tmpdir}
+# Note this test actually requires a checksum change to /boot,
+# because adding the uEnv.txt isn't currently covered by the
+# "bootcsum".
+os_repository_new_commit "uboot test" "test upgrade multiple kernel args"
 mkdir -p osdata/usr/lib/ostree-boot
 cat << 'EOF' > osdata/usr/lib/ostree-boot/uEnv.txt
 loaduimage=load mmc ${bootpart} ${loadaddr} ${kernel_image}