[ostree] ostadmin: [incompat syntax change] Allow deploying any revision
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] ostadmin: [incompat syntax change] Allow deploying any revision
- Date: Thu, 26 Jul 2012 15:19:30 +0000 (UTC)
commit a179138a23fb40e3089cbc4d679b9885f5a370d3
Author: Colin Walters <walters verbum org>
Date: Thu Jul 19 15:11:14 2012 -0400
ostadmin: [incompat syntax change] Allow deploying any revision
The old command line syntax assumed you wanted the latest from
a given revision, but to bisect, you really want the ability
to deploy any given one.
Old:
$ ostadmin deploy gnomeos-3.6-i686-{runtime,devel}
New:
$ ostadmin deploy trees/gnomeos-3.6-i686-runtime
$ ostadmin deploy trees/gnomeos-3.6-i686-devel
And note that the deploy directory now changes to:
/ostree/trees/gnomeos-3.6-i686-devel
And now it's possible to:
$ ostadmin deploy trees/gnomeos-3.6-i686-devel trees/gnomeos-3.6-i686-devel^^^
src/ostadmin/ot-admin-builtin-deploy.c | 88 +++++++++++++++++++++-----------
1 files changed, 58 insertions(+), 30 deletions(-)
---
diff --git a/src/ostadmin/ot-admin-builtin-deploy.c b/src/ostadmin/ot-admin-builtin-deploy.c
index ee20f85..3a1a457 100644
--- a/src/ostadmin/ot-admin-builtin-deploy.c
+++ b/src/ostadmin/ot-admin-builtin-deploy.c
@@ -28,6 +28,10 @@
#include <glib/gi18n.h>
#include <sys/utsname.h>
+typedef struct {
+ OstreeRepo *repo;
+} OtAdminDeploy;
+
static gboolean opt_checkout_only;
static GOptionEntry options[] = {
@@ -37,7 +41,7 @@ static GOptionEntry options[] = {
static gboolean
update_initramfs (const char *release,
- const char *last_deploy_target,
+ const char *deploy_target,
GCancellable *cancellable,
GError **error)
{
@@ -83,7 +87,7 @@ update_initramfs (const char *release,
cancellable, error))
goto out;
- last_deploy_path = g_build_filename ("/ostree", last_deploy_target, NULL);
+ last_deploy_path = g_build_filename ("/ostree", deploy_target, NULL);
mkinitramfs_args = g_ptr_array_new ();
/* Note: the hardcoded /tmp path below is not actually a
@@ -256,7 +260,7 @@ update_grub (const char *release,
}
static gboolean
-update_current (const char *last_deploy_target,
+update_current (const char *deploy_target,
GCancellable *cancellable,
GError **error)
{
@@ -267,7 +271,7 @@ update_current (const char *last_deploy_target,
tmp_symlink = g_build_filename ("/ostree", "tmp-current", NULL);
(void) unlink (tmp_symlink);
- if (symlink (last_deploy_target, tmp_symlink) < 0)
+ if (symlink (deploy_target, tmp_symlink) < 0)
{
ot_util_set_error_from_errno (error, errno);
goto out;
@@ -280,7 +284,40 @@ update_current (const char *last_deploy_target,
goto out;
}
- g_print ("/ostree/current set to %s\n", last_deploy_target);
+ g_print ("/ostree/current set to %s\n", deploy_target);
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
+static gboolean
+do_checkout (OtAdminDeploy *self,
+ const char *deploy_target,
+ const char *revision,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ ot_lobj GFile *deploy_path = NULL;
+ ot_lobj GFile *deploy_parent = NULL;
+ ot_lfree char *tree_ref = NULL;
+ ot_lptrarray GPtrArray *checkout_args = NULL;
+
+ deploy_path = ot_gfile_from_build_path ("/ostree", deploy_target, NULL);
+ deploy_parent = g_file_get_parent (deploy_path);
+ if (!ot_gfile_ensure_directory (deploy_parent, TRUE, error))
+ goto out;
+
+ checkout_args = g_ptr_array_new ();
+ ot_ptrarray_add_many (checkout_args, "ostree", "--repo=/ostree/repo",
+ "checkout", "--atomic-retarget", revision ? revision : deploy_target,
+ ot_gfile_get_path_cached (deploy_path), NULL);
+ g_ptr_array_add (checkout_args, NULL);
+
+ if (!ot_spawn_sync_checked ("/ostree", (char**)checkout_args->pdata, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, NULL, error))
+ goto out;
ret = TRUE;
out:
@@ -291,12 +328,16 @@ gboolean
ot_admin_builtin_deploy (int argc, char **argv, GError **error)
{
GOptionContext *context;
+ OtAdminDeploy self_data;
+ OtAdminDeploy *self = &self_data;
gboolean ret = FALSE;
- int i;
- const char *last_deploy_target = NULL;
+ const char *deploy_target = NULL;
+ const char *revision = NULL;
__attribute__((unused)) GCancellable *cancellable = NULL;
- context = g_option_context_new ("- Perform checkouts, ensure initramfs is generated");
+ memset (self, 0, sizeof (*self));
+
+ context = g_option_context_new ("NAME [REVISION] - Check out revision NAME (or REVISION as NAME)");
g_option_context_add_main_entries (context, options, NULL);
if (!g_option_context_parse (context, &argc, &argv, error))
@@ -304,29 +345,16 @@ ot_admin_builtin_deploy (int argc, char **argv, GError **error)
if (argc < 3)
{
- ot_util_usage_error (context, "At least one REV must be specified", error);
+ ot_util_usage_error (context, "NAME must be specified", error);
goto out;
}
+
+ deploy_target = argv[2];
+ if (argc > 3)
+ revision = argv[3];
- for (i = 2; i < argc; i++)
- {
- const char *deploy_target = argv[i];
- ot_lfree char *tree_ref = NULL;
- ot_lptrarray GPtrArray *checkout_args = NULL;
-
- tree_ref = g_strconcat ("trees/", deploy_target, NULL);
-
- checkout_args = g_ptr_array_new ();
- ot_ptrarray_add_many (checkout_args, "ostree", "--repo=/ostree/repo",
- "checkout", "--atomic-retarget", tree_ref, deploy_target, NULL);
- g_ptr_array_add (checkout_args, NULL);
-
- if (!ot_spawn_sync_checked ("/ostree", (char**)checkout_args->pdata, NULL, G_SPAWN_SEARCH_PATH,
- NULL, NULL, NULL, NULL, error))
- goto out;
-
- last_deploy_target = deploy_target;
- }
+ if (!do_checkout (self, deploy_target, revision, cancellable, error))
+ goto out;
if (!opt_checkout_only)
{
@@ -345,14 +373,14 @@ ot_admin_builtin_deploy (int argc, char **argv, GError **error)
release = utsname.release;
- if (!update_initramfs (release, last_deploy_target, cancellable, error))
+ if (!update_initramfs (release, deploy_target, cancellable, error))
goto out;
if (!update_grub (release, cancellable, error))
goto out;
}
- if (!update_current (last_deploy_target, cancellable, error))
+ if (!update_current (deploy_target, cancellable, error))
goto out;
ret = TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]