diff options
author | Owen W. Taylor <otaylor@fishsoup.net> | 2014-09-23 11:32:44 -0400 |
---|---|---|
committer | Owen W. Taylor <otaylor@fishsoup.net> | 2014-09-26 10:40:38 -0400 |
commit | d64d003af00edfbff6a8b33047e0861d2ad1c3a6 (patch) | |
tree | 515472d5afc61b0de08a4b4a3220addba53441ca | |
parent | 262cba09c0bfdcd5f13dea63369b451d817d871f (diff) | |
download | ostree-d64d003af00edfbff6a8b33047e0861d2ad1c3a6.tar.gz |
ostree admin: Add a --print-current-dir option
Add an option --print-current-dir that prints the current deployment
directory to stdout and exits.
https://bugzilla.gnome.org/show_bug.cgi?id=731051
-rw-r--r-- | doc/ostree-admin.xml | 7 | ||||
-rw-r--r-- | src/ostree/ot-builtin-admin.c | 40 |
2 files changed, 43 insertions, 4 deletions
diff --git a/doc/ostree-admin.xml b/doc/ostree-admin.xml index 88a63edd..0878c728 100644 --- a/doc/ostree-admin.xml +++ b/doc/ostree-admin.xml @@ -97,6 +97,13 @@ Boston, MA 02111-1307, USA. <term><option>--sysroot</option>="PATH"</term> <listitem><para>Creates a new OSTree sysroot at PATH</para></listitem> </varlistentry> + + <varlistentry> + <term><option>--print-current-dir</option></term> + <listitem><para> + Prints the full path to the deployment directory for the currently active deployment in the specified sysroot to standard out. This is incompatible with specifying a subcommand. + </para></listitem> + </varlistentry> </variablelist> </refsect1> </refentry> diff --git a/src/ostree/ot-builtin-admin.c b/src/ostree/ot-builtin-admin.c index afc3bb33..2165656c 100644 --- a/src/ostree/ot-builtin-admin.c +++ b/src/ostree/ot-builtin-admin.c @@ -61,6 +61,7 @@ ostree_builtin_admin (int argc, char **argv, OstreeRepo *repo, GCancellable *can gs_unref_object GFile *sysroot_path = NULL; gs_unref_object OstreeSysroot *sysroot = NULL; gboolean want_help = FALSE; + gboolean want_current_dir = FALSE; int in, out, i; gboolean skip; @@ -93,6 +94,10 @@ ostree_builtin_admin (int argc, char **argv, OstreeRepo *repo, GCancellable *can { want_help = TRUE; } + else if (g_str_equal (argv[in], "--print-current-dir")) + { + want_current_dir = TRUE; + } else if (g_str_equal (argv[in], "--sysroot") && in + 1 < argc) { opt_sysroot = argv[in + 1]; @@ -145,12 +150,12 @@ ostree_builtin_admin (int argc, char **argv, OstreeRepo *repo, GCancellable *can argc = out; - if (subcommand_name == NULL) + if (subcommand_name == NULL && (want_help || !want_current_dir)) { void (*print_func) (const gchar *format, ...) = want_help ? g_print : g_printerr; subcommand = admin_subcommands; - print_func ("usage: ostree admin --sysroot=PATH COMMAND [options]\n"); + print_func ("usage: ostree admin [--sysroot=PATH] [--print-current-dir|COMMAND] [options]\n"); print_func ("Builtin commands:\n"); while (subcommand->name) { @@ -166,6 +171,35 @@ ostree_builtin_admin (int argc, char **argv, OstreeRepo *repo, GCancellable *can goto out; } + sysroot_path = g_file_new_for_path (opt_sysroot); + sysroot = ostree_sysroot_new (sysroot_path); + + if (want_current_dir) + { + gs_unref_ptrarray GPtrArray *deployments = NULL; + OstreeDeployment *first_deployment; + gs_unref_object GFile *deployment_file = NULL; + gs_free char *deployment_path = NULL; + + if (!ostree_sysroot_load (sysroot, cancellable, error)) + goto out; + + deployments = ostree_sysroot_get_deployments (sysroot); + if (deployments->len == 0) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "Unable to find a deployment in sysroot"); + goto out; + } + first_deployment = deployments->pdata[0]; + deployment_file = ostree_sysroot_get_deployment_directory (sysroot, first_deployment); + deployment_path = g_file_get_path (deployment_file); + + g_print ("%s\n", deployment_path); + ret = TRUE; + goto out; + } + subcommand = admin_subcommands; while (subcommand->name) { @@ -183,8 +217,6 @@ ostree_builtin_admin (int argc, char **argv, OstreeRepo *repo, GCancellable *can g_set_prgname (g_strdup_printf ("ostree admin %s", subcommand_name)); - sysroot_path = g_file_new_for_path (opt_sysroot); - sysroot = ostree_sysroot_new (sysroot_path); if (!subcommand->fn (argc, argv, sysroot, cancellable, error)) goto out; |