bin/remote-refs: Add option to print revisions
authorDan Nicholson <dbn@endlessos.org>
Sun, 29 Jan 2023 16:37:03 +0000 (09:37 -0700)
committerDan Nicholson <dbn@endlessos.org>
Wed, 8 Feb 2023 05:59:30 +0000 (22:59 -0700)
The only other way to get the remote ref revision from the CLI is to
scrape the output of `ostree remote summary` or pull the commit. The
revision is already there in the summary's ref map, so might as well add
an option to show it.

Makefile-tests.am
bash/ostree
man/ostree-remote.xml
src/ostree/ot-remote-builtin-refs.c
tests/test-remote-refs.sh [new file with mode: 0755]

index 470eec25513963dc64c7ee8e81c6e7e0363771ee..01ed0bd564a33d7744529103877615a05e05eb6a 100644 (file)
@@ -68,6 +68,7 @@ _installed_or_uninstalled_test_scripts = \
        tests/test-archivez.sh \
        tests/test-remote-add.sh \
        tests/test-remote-headers.sh \
+       tests/test-remote-refs.sh \
        tests/test-commit-sign.sh \
        tests/test-commit-timestamp.sh \
        tests/test-export.sh \
index ea915b4bb4ae9e6bf9a47d5559f640815a827b14..2b7c552f06d2d05272cb4497b1fbba674059dcc6 100644 (file)
@@ -1275,6 +1275,7 @@ _ostree_remote_list_gpg_keys() {
 _ostree_remote_refs() {
     local boolean_options="
         $main_boolean_options
+        --revision -r
     "
 
     local options_with_args="
index 5b537a9fcaf7032bde7afc1a090f63c146962789..d107ce919a39e698bdada907ce59ebe3aea5b86b 100644 (file)
@@ -197,6 +197,17 @@ License along with this library. If not, see <https://www.gnu.org/licenses/>.
     <refsect1>
         <title>'Refs' Options</title>
 
+        <variablelist>
+            <varlistentry>
+                <term><option>--revision</option>, <option>-r</option></term>
+
+                <listitem><para>
+                    Also print the revisions for each ref. The revisions will
+                    be separated by a tab character.
+                </para></listitem>
+            </varlistentry>
+        </variablelist>
+
         <variablelist>
             <varlistentry>
                 <term><option>--cache-dir</option>=DIR</term>
index 29c39328b1682c00925aaf0e7a85f3b0b19c7c34..24ad0776fe0491255b6f9ede43fd1bc8eb074155 100644 (file)
@@ -24,6 +24,7 @@
 #include "ot-main.h"
 #include "ot-remote-builtins.h"
 
+static gboolean opt_revision;
 static char* opt_cache_dir;
 
 /* ATTENTION:
@@ -32,6 +33,7 @@ static char* opt_cache_dir;
  */
 
 static GOptionEntry option_entries[] = {
+  { "revision", 'r', 0, G_OPTION_ARG_NONE, &opt_revision, "Show revisions in listing", NULL },
   { "cache-dir", 0, 0, G_OPTION_ARG_FILENAME, &opt_cache_dir, "Use custom cache dir", NULL },
   { NULL }
 };
@@ -73,7 +75,17 @@ ot_remote_builtin_refs (int argc, char **argv, OstreeCommandInvocation *invocati
 
       for (iter = ordered_keys; iter; iter = iter->next)
         {
-          g_print ("%s:%s\n", remote_name, (const char *) iter->data);
+          const char *ref = iter->data;
+
+          if (opt_revision)
+            {
+              const char *rev = g_hash_table_lookup (refs, ref);
+              g_print ("%s:%s\t%s\n", remote_name, ref, rev);
+            }
+          else
+            {
+              g_print ("%s:%s\n", remote_name, ref);
+            }
         }
     }
 
diff --git a/tests/test-remote-refs.sh b/tests/test-remote-refs.sh
new file mode 100755 (executable)
index 0000000..b92fb20
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# Copyright © 2023 Endless OS Foundation LLC
+#
+# SPDX-License-Identifier: LGPL-2.0+
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see <https://www.gnu.org/licenses/>.
+#
+# Authors:
+#  - Dan Nicholson <dbn@endlessos.org>
+
+set -euo pipefail
+
+. $(dirname $0)/libtest.sh
+
+echo "1..2"
+
+setup_fake_remote_repo2 "archive"
+${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/repo summary -u
+${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/repo refs > origin-refs
+${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/repo refs --revision > origin-refs-revs
+
+cd ${test_tmpdir}
+rm -rf repo
+ostree_repo_init repo --mode=archive
+${OSTREE} remote add --no-sign-verify origin $(cat httpd-address)/ostree/repo
+
+${OSTREE} remote refs origin > refs
+sed 's/^/origin:/' origin-refs > expected-refs
+assert_files_equal refs expected-refs
+
+echo "ok remote refs listing"
+
+${OSTREE} remote refs origin --revision > refs-revs
+sed 's/^/origin:/' origin-refs-revs > expected-refs-revs
+assert_files_equal refs-revs expected-refs-revs
+
+echo "ok remote refs revisions"