From 008c5a95404cb670590394227e41a03ce1d1c437 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Sun, 29 Jan 2023 09:37:03 -0700 Subject: [PATCH] bin/remote-refs: Add option to print revisions 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 | 1 + bash/ostree | 1 + man/ostree-remote.xml | 11 +++++++ src/ostree/ot-remote-builtin-refs.c | 14 ++++++++- tests/test-remote-refs.sh | 49 +++++++++++++++++++++++++++++ 5 files changed, 75 insertions(+), 1 deletion(-) create mode 100755 tests/test-remote-refs.sh diff --git a/Makefile-tests.am b/Makefile-tests.am index 470eec25..01ed0bd5 100644 --- a/Makefile-tests.am +++ b/Makefile-tests.am @@ -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 \ diff --git a/bash/ostree b/bash/ostree index ea915b4b..2b7c552f 100644 --- a/bash/ostree +++ b/bash/ostree @@ -1275,6 +1275,7 @@ _ostree_remote_list_gpg_keys() { _ostree_remote_refs() { local boolean_options=" $main_boolean_options + --revision -r " local options_with_args=" diff --git a/man/ostree-remote.xml b/man/ostree-remote.xml index 5b537a9f..d107ce91 100644 --- a/man/ostree-remote.xml +++ b/man/ostree-remote.xml @@ -197,6 +197,17 @@ License along with this library. If not, see . 'Refs' Options + + + , + + + Also print the revisions for each ref. The revisions will + be separated by a tab character. + + + + =DIR diff --git a/src/ostree/ot-remote-builtin-refs.c b/src/ostree/ot-remote-builtin-refs.c index 29c39328..24ad0776 100644 --- a/src/ostree/ot-remote-builtin-refs.c +++ b/src/ostree/ot-remote-builtin-refs.c @@ -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 index 00000000..b92fb20e --- /dev/null +++ b/tests/test-remote-refs.sh @@ -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 . +# +# Authors: +# - Dan Nicholson + +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"