112 lines
5.7 KiB
Diff
112 lines
5.7 KiB
Diff
|
From 00fab1ec2336ec35bd20caff43635e2032b24c2f Mon Sep 17 00:00:00 2001
|
||
|
From: Jonathan Lebon <jlebon@redhat.com>
|
||
|
Date: Mon, 13 Nov 2017 03:09:00 +0000
|
||
|
Subject: [PATCH] compose CLI: fix --repo consuming two arguments
|
||
|
|
||
|
I was trying to figure out why:
|
||
|
|
||
|
rpm-ostree compose tree --repo repo/ manifest.json
|
||
|
|
||
|
would result in:
|
||
|
|
||
|
error: opendir(manifest.json): No such file or directory
|
||
|
|
||
|
It turned out to be because we had `--repo` in *both* the `install`
|
||
|
options and the `commit` options. This makes sense since both these
|
||
|
subcommands need to be given a repo. However, in the `tree` case, we
|
||
|
were adding both arrays, which meant we inherited two `GOptionEntry`s
|
||
|
for `--repo`. This confused glib2 which consumed not one but two CLI
|
||
|
arguments when looking for the argument associated with `--repo`.
|
||
|
|
||
|
Our CI didn't notice this because it uses the `--repo=foo` notation,
|
||
|
which doesn't throw off glib2.
|
||
|
|
||
|
Fix this by factoring out the `--repo` option into a separate array so
|
||
|
that in the `tree` case, it only gets added once. Exercise the fix in CI
|
||
|
by using the two argument notation for `--repo`.
|
||
|
|
||
|
Closes: #1101
|
||
|
Approved by: cgwalters
|
||
|
---
|
||
|
src/app/rpmostree-compose-builtin-tree.c | 14 ++++++++++++--
|
||
|
tests/compose-tests/libcomposetest.sh | 2 +-
|
||
|
2 files changed, 13 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/app/rpmostree-compose-builtin-tree.c b/src/app/rpmostree-compose-builtin-tree.c
|
||
|
index 9291e17..be66e62 100644
|
||
|
--- a/src/app/rpmostree-compose-builtin-tree.c
|
||
|
+++ b/src/app/rpmostree-compose-builtin-tree.c
|
||
|
@@ -58,13 +58,18 @@ static gboolean opt_dry_run;
|
||
|
static gboolean opt_print_only;
|
||
|
static char *opt_write_commitid_to;
|
||
|
|
||
|
+/* shared by both install & commit */
|
||
|
+static GOptionEntry common_option_entries[] = {
|
||
|
+ { "repo", 'r', 0, G_OPTION_ARG_STRING, &opt_repo, "Path to OSTree repository", "REPO" },
|
||
|
+ { NULL }
|
||
|
+};
|
||
|
+
|
||
|
static GOptionEntry install_option_entries[] = {
|
||
|
{ "force-nocache", 0, 0, G_OPTION_ARG_NONE, &opt_force_nocache, "Always create a new OSTree commit, even if nothing appears to have changed", NULL },
|
||
|
{ "cache-only", 0, 0, G_OPTION_ARG_NONE, &opt_cache_only, "Assume cache is present, do not attempt to update it", NULL },
|
||
|
{ "cachedir", 0, 0, G_OPTION_ARG_STRING, &opt_cachedir, "Cached state", "CACHEDIR" },
|
||
|
{ "proxy", 0, 0, G_OPTION_ARG_STRING, &opt_proxy, "HTTP proxy", "PROXY" },
|
||
|
{ "dry-run", 0, 0, G_OPTION_ARG_NONE, &opt_dry_run, "Just print the transaction and exit", NULL },
|
||
|
- { "repo", 'r', 0, G_OPTION_ARG_STRING, &opt_repo, "Path to OSTree repository", "REPO" },
|
||
|
{ "output-repodata-dir", 0, 0, G_OPTION_ARG_STRING, &opt_output_repodata_dir, "Save downloaded repodata in DIR", "DIR" },
|
||
|
{ "print-only", 0, 0, G_OPTION_ARG_NONE, &opt_print_only, "Just expand any includes and print treefile", NULL },
|
||
|
{ "touch-if-changed", 0, 0, G_OPTION_ARG_STRING, &opt_touch_if_changed, "Update the modification time on FILE if a new commit was created", "FILE" },
|
||
|
@@ -80,7 +85,6 @@ static GOptionEntry postprocess_option_entries[] = {
|
||
|
static GOptionEntry commit_option_entries[] = {
|
||
|
{ "add-metadata-string", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_metadata_strings, "Append given key and value (in string format) to metadata", "KEY=VALUE" },
|
||
|
{ "add-metadata-from-json", 0, 0, G_OPTION_ARG_STRING, &opt_metadata_json, "Parse the given JSON file as object, convert to GVariant, append to OSTree commit", "JSON" },
|
||
|
- { "repo", 'r', 0, G_OPTION_ARG_STRING, &opt_repo, "Path to OSTree repository", "REPO" },
|
||
|
{ "write-commitid-to", 0, 0, G_OPTION_ARG_STRING, &opt_write_commitid_to, "File to write the composed commitid to instead of updating the ref", "FILE" },
|
||
|
{ NULL }
|
||
|
};
|
||
|
@@ -1066,6 +1070,8 @@ rpmostree_compose_builtin_install (int argc,
|
||
|
GError **error)
|
||
|
{
|
||
|
g_autoptr(GOptionContext) context = g_option_context_new ("TREEFILE DESTDIR");
|
||
|
+ g_option_context_add_main_entries (context, common_option_entries, NULL);
|
||
|
+
|
||
|
if (!rpmostree_option_context_parse (context,
|
||
|
install_option_entries,
|
||
|
&argc, &argv,
|
||
|
@@ -1172,6 +1178,8 @@ rpmostree_compose_builtin_commit (int argc,
|
||
|
GError **error)
|
||
|
{
|
||
|
g_autoptr(GOptionContext) context = g_option_context_new ("TREEFILE ROOTFS");
|
||
|
+ g_option_context_add_main_entries (context, common_option_entries, NULL);
|
||
|
+
|
||
|
if (!rpmostree_option_context_parse (context,
|
||
|
commit_option_entries,
|
||
|
&argc, &argv,
|
||
|
@@ -1214,8 +1222,10 @@ rpmostree_compose_builtin_tree (int argc,
|
||
|
GError **error)
|
||
|
{
|
||
|
g_autoptr(GOptionContext) context = g_option_context_new ("TREEFILE");
|
||
|
+ g_option_context_add_main_entries (context, common_option_entries, NULL);
|
||
|
g_option_context_add_main_entries (context, install_option_entries, NULL);
|
||
|
g_option_context_add_main_entries (context, postprocess_option_entries, NULL);
|
||
|
+
|
||
|
if (!rpmostree_option_context_parse (context,
|
||
|
commit_option_entries,
|
||
|
&argc, &argv,
|
||
|
diff --git a/tests/compose-tests/libcomposetest.sh b/tests/compose-tests/libcomposetest.sh
|
||
|
index 94d9dc4..885b3cb 100644
|
||
|
--- a/tests/compose-tests/libcomposetest.sh
|
||
|
+++ b/tests/compose-tests/libcomposetest.sh
|
||
|
@@ -33,7 +33,7 @@ prepare_compose_test() {
|
||
|
export treeref=fedora/stable/x86_64/${name}
|
||
|
}
|
||
|
|
||
|
-compose_base_argv="--repo=${repobuild} --cache-only --cachedir=${test_compose_datadir}/cache"
|
||
|
+compose_base_argv="--repo ${repobuild} --cache-only --cachedir=${test_compose_datadir}/cache"
|
||
|
runcompose() {
|
||
|
rpm-ostree compose tree ${compose_base_argv} ${treefile} "$@"
|
||
|
ostree --repo=${repo} pull-local ${repobuild}
|
||
|
--
|
||
|
2.13.5
|
||
|
|