admin switch: Support switching remotes as well

Say I have an installation from CDROM; the remote name may be
"installmedia" or something like that.  We want to allow also
switching remotes.
This commit is contained in:
Colin Walters 2014-05-12 16:57:46 -04:00
parent 7ccfc93f71
commit 24e1bf2552
2 changed files with 19 additions and 7 deletions

View File

@ -44,11 +44,13 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell
{ {
gboolean ret = FALSE; gboolean ret = FALSE;
GOptionContext *context; GOptionContext *context;
const char *new_ref = NULL; const char *new_provided_refspec = NULL;
gs_unref_object OstreeRepo *repo = NULL; gs_unref_object OstreeRepo *repo = NULL;
gs_free char *origin_refspec = NULL; gs_free char *origin_refspec = NULL;
gs_free char *origin_remote = NULL; gs_free char *origin_remote = NULL;
gs_free char *origin_ref = 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_refspec = NULL;
gs_free char *new_revision = NULL; gs_free char *new_revision = NULL;
gs_unref_object GFile *deployment_path = 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; 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)) if (!ostree_sysroot_load (sysroot, cancellable, error))
goto out; 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)) if (!ostree_parse_refspec (origin_refspec, &origin_remote, &origin_ref, error))
goto out; goto out;
if (origin_remote) if (!new_remote)
new_refspec = g_strconcat (origin_remote, ":", new_ref, NULL); new_refspec = g_strconcat (origin_remote, ":", new_provided_refspec, NULL);
else else
new_refspec = g_strdup (new_ref); new_refspec = g_strdup (new_provided_refspec);
if (strcmp (origin_refspec, new_refspec) == 0) if (strcmp (origin_refspec, new_refspec) == 0)
{ {

View File

@ -27,7 +27,7 @@ setup_os_repository "archive-z2" "syslinux"
echo "ok setup" 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 remote add --set=gpg-verify=false testos file://$(pwd)/testos-repo
ostree --repo=sysroot/ostree/repo pull testos testos/buildmaster/x86_64-runtime 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' assert_file_has_content sysroot/ostree/deploy/testos/current/usr/include/foo.h 'header'
echo "ok switch" 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"