diff --git a/src/ostree/ot-admin-builtin-switch.c b/src/ostree/ot-admin-builtin-switch.c index 292532fe..ad02b90c 100644 --- a/src/ostree/ot-admin-builtin-switch.c +++ b/src/ostree/ot-admin-builtin-switch.c @@ -44,11 +44,13 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell { gboolean ret = FALSE; GOptionContext *context; - const char *new_ref = NULL; + const char *new_provided_refspec = NULL; gs_unref_object OstreeRepo *repo = NULL; gs_free char *origin_refspec = NULL; gs_free char *origin_remote = NULL; gs_free char *origin_ref = NULL; + gs_free char *new_remote = NULL; + gs_free char *new_ref = NULL; gs_free char *new_refspec = NULL; gs_free char *new_revision = NULL; gs_unref_object GFile *deployment_path = NULL; @@ -75,7 +77,9 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell goto out; } - new_ref = argv[1]; + new_provided_refspec = argv[1]; + if (!ostree_parse_refspec (new_provided_refspec, &new_remote, &new_ref, error)) + goto out; if (!ostree_sysroot_load (sysroot, cancellable, error)) goto out; @@ -90,11 +94,11 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell if (!ostree_parse_refspec (origin_refspec, &origin_remote, &origin_ref, error)) goto out; - - if (origin_remote) - new_refspec = g_strconcat (origin_remote, ":", new_ref, NULL); + + if (!new_remote) + new_refspec = g_strconcat (origin_remote, ":", new_provided_refspec, NULL); else - new_refspec = g_strdup (new_ref); + new_refspec = g_strdup (new_provided_refspec); if (strcmp (origin_refspec, new_refspec) == 0) { diff --git a/tests/test-admin-deploy-switch.sh b/tests/test-admin-deploy-switch.sh index 815ca69c..f791348f 100644 --- a/tests/test-admin-deploy-switch.sh +++ b/tests/test-admin-deploy-switch.sh @@ -27,7 +27,7 @@ setup_os_repository "archive-z2" "syslinux" echo "ok setup" -echo "1..2" +echo "1..3" ostree --repo=sysroot/ostree/repo remote add --set=gpg-verify=false testos file://$(pwd)/testos-repo ostree --repo=sysroot/ostree/repo pull testos testos/buildmaster/x86_64-runtime @@ -42,3 +42,11 @@ ostree admin --sysroot=sysroot switch --os=testos testos/buildmaster/x86_64-deve assert_file_has_content sysroot/ostree/deploy/testos/current/usr/include/foo.h 'header' echo "ok switch" + +ostree --repo=sysroot/ostree/repo remote add --set=gpg-verify=false anothertestos file://$(pwd)/testos-repo +ostree admin --sysroot=sysroot switch --os=testos anothertestos:testos/buildmaster/x86_64-devel +# Ok this is lame, need a better shell command to extract config, or switch to gjs +ostree admin --sysroot=sysroot status > status.txt +assert_file_has_content status.txt anothertestos + +echo "ok switch remotes"