[ostree] upgrade: Add --override-commit=CHECKSUM option
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] upgrade: Add --override-commit=CHECKSUM option
- Date: Tue, 13 Oct 2015 16:45:36 +0000 (UTC)
commit 2210a79bfa10f4a29113ee78f33300cea254715b
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Oct 6 11:33:18 2015 -0400
upgrade: Add --override-commit=CHECKSUM option
Adds an entry to the origin file to force the OstreeSysrootUpgrader to
pull and deploy the given checksum.
[origin]
override-commit=CHECKSUM
If the option is not given, any such entry is explicitly removed from
the origin file to ensure we upgrade to the latest available commit.
doc/ostree-admin-upgrade.xml | 8 ++++++++
src/ostree/ot-admin-builtin-upgrade.c | 32 ++++++++++++++++++++++++++++++++
tests/admin-test.sh | 15 +++++++++++++++
3 files changed, 55 insertions(+), 0 deletions(-)
---
diff --git a/doc/ostree-admin-upgrade.xml b/doc/ostree-admin-upgrade.xml
index 37e3e5d..ddd33dc 100644
--- a/doc/ostree-admin-upgrade.xml
+++ b/doc/ostree-admin-upgrade.xml
@@ -88,6 +88,14 @@ Boston, MA 02111-1307, USA.
Permit deployment of chronologically older trees.
</para></listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><option>--override-commit</option>="CHECKSUM"</term>
+
+ <listitem><para>
+ Deploy CHECKSUM instead of the latest tree.
+ </para></listitem>
+ </varlistentry>
</variablelist>
</refsect1>
diff --git a/src/ostree/ot-admin-builtin-upgrade.c b/src/ostree/ot-admin-builtin-upgrade.c
index 006914a..90d0ce9 100644
--- a/src/ostree/ot-admin-builtin-upgrade.c
+++ b/src/ostree/ot-admin-builtin-upgrade.c
@@ -35,11 +35,13 @@
static gboolean opt_reboot;
static gboolean opt_allow_downgrade;
static char *opt_osname;
+static char *opt_override_commit;
static GOptionEntry options[] = {
{ "os", 0, 0, G_OPTION_ARG_STRING, &opt_osname, "Use a different operating system root than the current
one", "OSNAME" },
{ "reboot", 'r', 0, G_OPTION_ARG_NONE, &opt_reboot, "Reboot after a successful upgrade", NULL },
{ "allow-downgrade", 0, 0, G_OPTION_ARG_NONE, &opt_allow_downgrade, "Permit deployment of chronologically
older trees", NULL },
+ { "override-commit", 0, 0, G_OPTION_ARG_STRING, &opt_override_commit, "Deploy CHECKSUM instead of the
latest tree", "CHECKSUM" },
{ NULL }
};
@@ -52,6 +54,7 @@ ot_admin_builtin_upgrade (int argc, char **argv, GCancellable *cancellable, GErr
glnx_unref_object OstreeSysrootUpgrader *upgrader = NULL;
g_autoptr(GFile) deployment_path = NULL;
g_autoptr(GFile) deployment_origin_path = NULL;
+ g_autoptr(GKeyFile) origin = NULL;
GSConsole *console = NULL;
gboolean in_status_line = FALSE;
glnx_unref_object OstreeAsyncProgress *progress = NULL;
@@ -73,6 +76,35 @@ ot_admin_builtin_upgrade (int argc, char **argv, GCancellable *cancellable, GErr
if (!upgrader)
goto out;
+ origin = ostree_sysroot_upgrader_dup_origin (upgrader);
+ if (origin != NULL)
+ {
+ gboolean origin_changed = FALSE;
+
+ if (opt_override_commit != NULL)
+ {
+ /* Override the commit to pull and deploy. */
+ g_key_file_set_string (origin, "origin",
+ "override-commit",
+ opt_override_commit);
+ origin_changed = TRUE;
+ }
+ else
+ {
+ /* Strip any override-commit from the origin file so
+ * we always upgrade to the latest available commit. */
+ origin_changed = g_key_file_remove_key (origin, "origin",
+ "override-commit", NULL);
+ }
+
+ if (origin_changed)
+ {
+ /* XXX GCancellable parameter is not used. */
+ if (!ostree_sysroot_upgrader_set_origin (upgrader, origin, NULL, error))
+ goto out;
+ }
+ }
+
console = gs_console_get ();
if (console)
{
diff --git a/tests/admin-test.sh b/tests/admin-test.sh
index ca1ac2c..edbf665 100755
--- a/tests/admin-test.sh
+++ b/tests/admin-test.sh
@@ -203,3 +203,18 @@ assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf 'consol
validate_bootloader
echo "ok upgrade with multiple kernel args"
+
+# Test upgrade with and without --override-commit
+# See https://github.com/GNOME/ostree/pull/147
+${CMD_PREFIX} ostree pull --repo=sysroot/ostree/repo --commit-metadata-only --depth=-1
testos:testos/buildmaster/x86_64-runtime
+head_rev=$(${CMD_PREFIX} ostree rev-parse --repo=sysroot/ostree/repo testos/buildmaster/x86_64-runtime)
+prev_rev=$(${CMD_PREFIX} ostree rev-parse --repo=sysroot/ostree/repo testos/buildmaster/x86_64-runtime^^^^)
+assert_not_streq ${head_rev} ${prev_rev}
+${CMD_PREFIX} ostree admin upgrade --os=testos --override-commit=${prev_rev} --allow-downgrade
+curr_rev=$(${CMD_PREFIX} ostree rev-parse --repo=sysroot/ostree/repo testos/buildmaster/x86_64-runtime)
+assert_streq ${curr_rev} ${prev_rev}
+${CMD_PREFIX} ostree admin upgrade --os=testos
+curr_rev=$(${CMD_PREFIX} ostree rev-parse --repo=sysroot/ostree/repo testos/buildmaster/x86_64-runtime)
+assert_streq ${curr_rev} ${head_rev}
+
+echo "ok upgrade with and without override-commit"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]