[ostree] Move "ostadmin" => "ostree admin"
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] Move "ostadmin" => "ostree admin"
- Date: Sat, 8 Sep 2012 23:55:42 +0000 (UTC)
commit fa5485c6c4e77a0d161a502d3efb806d6d803f19
Author: Colin Walters <walters verbum org>
Date: Sat Sep 8 18:46:50 2012 -0400
Move "ostadmin" => "ostree admin"
This helps us avoid polluting the global binary namespace.
Makefile-ostadmin.am | 48 -------
Makefile-ostree.am | 24 ++++
Makefile.am | 1 -
src/ostadmin/main.c | 45 ------
src/ostadmin/ot-admin-main.c | 141 --------------------
src/ostadmin/ot-admin-main.h | 32 -----
src/{ostadmin => ostree}/grub2/15_ostree | 0
src/{ostadmin => ostree}/kernel/15_ostree_remove | 0
src/{ostadmin => ostree}/kernel/15_ostree_update | 0
src/ostree/main.c | 1 +
src/{ostadmin => ostree}/ot-admin-builtin-deploy.c | 47 ++++---
src/{ostadmin => ostree}/ot-admin-builtin-diff.c | 10 +-
src/{ostadmin => ostree}/ot-admin-builtin-init.c | 12 +--
.../ot-admin-builtin-update-kernel.c | 65 +++++----
src/{ostadmin => ostree}/ot-admin-builtins.h | 8 +-
src/{ostadmin => ostree}/ot-admin-functions.c | 0
src/{ostadmin => ostree}/ot-admin-functions.h | 0
src/ostree/ot-builtin-admin.c | 105 +++++++++++++++
src/ostree/ot-builtins.h | 1 +
src/ostree/ot-main.c | 14 +-
src/ostree/ot-main.h | 7 +
21 files changed, 218 insertions(+), 343 deletions(-)
---
diff --git a/Makefile-ostree.am b/Makefile-ostree.am
index 571b07f..59b4775 100644
--- a/Makefile-ostree.am
+++ b/Makefile-ostree.am
@@ -23,6 +23,7 @@ endif
ostree_SOURCES = src/ostree/main.c \
src/ostree/ot-builtins.h \
+ src/ostree/ot-builtin-admin.c \
src/ostree/ot-builtin-cat.c \
src/ostree/ot-builtin-config.c \
src/ostree/ot-builtin-checkout.c \
@@ -45,6 +46,16 @@ ostree_SOURCES = src/ostree/main.c \
src/ostree/ot-main.c \
$(NULL)
+# Admin subcommand
+ostree_SOURCES += \
+ src/ostree/ot-admin-builtin-init.c \
+ src/ostree/ot-admin-builtin-diff.c \
+ src/ostree/ot-admin-builtin-deploy.c \
+ src/ostree/ot-admin-builtin-update-kernel.c \
+ src/ostree/ot-admin-functions.h \
+ src/ostree/ot-admin-functions.c \
+ $(NULL)
+
ostree_bin_shared_cflags = $(AM_CFLAGS) -I$(srcdir)/src/libgsystem -I$(srcdir)/src/libotutil -I$(srcdir)/src/libostree -I$(srcdir)/src/ostree -DLOCALEDIR=\"$(datadir)/locale\"
ostree_bin_shared_ldadd = libotutil.la libostree.la
@@ -64,3 +75,16 @@ ostree_pull_LDADD = $(ostree_bin_shared_ldadd) $(OT_INTERNAL_SOUP_LIBS)
endif
MANPAGES += doc/ostree.1
+
+if ENABLE_KERNEL_UPDATES
+
+grub2dir = $(sysconfdir)/grub.d
+grub2_SCRIPTS = src/ostree/grub2/15_ostree
+
+kernelpostinstdir = $(sysconfdir)/kernel/postinst.d
+kernelpostinst_SCRIPTS = src/ostree/kernel/15_ostree_update
+
+kernelprermdir = $(sysconfdir)/kernel/prerm.d
+kernelprerm_SCRIPTS = src/ostree/kernel/15_ostree_remove
+
+endif
diff --git a/Makefile.am b/Makefile.am
index b8a99b4..55b04b1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -78,7 +78,6 @@ include Makefile-daemon.am
include Makefile-otutil.am
include Makefile-libostree.am
include Makefile-ostree.am
-include Makefile-ostadmin.am
include Makefile-switchroot.am
include Makefile-triggers.am
diff --git a/src/ostadmin/grub2/15_ostree b/src/ostree/grub2/15_ostree
similarity index 100%
rename from src/ostadmin/grub2/15_ostree
rename to src/ostree/grub2/15_ostree
diff --git a/src/ostadmin/kernel/15_ostree_remove b/src/ostree/kernel/15_ostree_remove
similarity index 100%
rename from src/ostadmin/kernel/15_ostree_remove
rename to src/ostree/kernel/15_ostree_remove
diff --git a/src/ostadmin/kernel/15_ostree_update b/src/ostree/kernel/15_ostree_update
similarity index 100%
rename from src/ostadmin/kernel/15_ostree_update
rename to src/ostree/kernel/15_ostree_update
diff --git a/src/ostree/main.c b/src/ostree/main.c
index 72231ab..994a837 100644
--- a/src/ostree/main.c
+++ b/src/ostree/main.c
@@ -31,6 +31,7 @@
#include "ot-builtins.h"
static OstreeCommand commands[] = {
+ { "admin", ostree_builtin_admin, OSTREE_BUILTIN_FLAG_NO_REPO },
{ "cat", ostree_builtin_cat, 0 },
{ "commit", ostree_builtin_commit, 0 },
{ "config", ostree_builtin_config, 0 },
diff --git a/src/ostadmin/ot-admin-builtin-deploy.c b/src/ostree/ot-admin-builtin-deploy.c
similarity index 92%
rename from src/ostadmin/ot-admin-builtin-deploy.c
rename to src/ostree/ot-admin-builtin-deploy.c
index 6322f2c..f81404f 100644
--- a/src/ostadmin/ot-admin-builtin-deploy.c
+++ b/src/ostree/ot-admin-builtin-deploy.c
@@ -35,10 +35,8 @@ typedef struct {
static gboolean opt_no_kernel;
static gboolean opt_force;
-static char *opt_ostree_dir = "/ostree";
static GOptionEntry options[] = {
- { "ostree-dir", 0, 0, G_OPTION_ARG_STRING, &opt_ostree_dir, "Path to OSTree root directory (default: /ostree)", NULL },
{ "no-kernel", 0, 0, G_OPTION_ARG_NONE, &opt_no_kernel, "Don't update kernel related config (initramfs, bootloader)", NULL },
{ "force", 0, 0, G_OPTION_ARG_NONE, &opt_force, "Overwrite any existing deployment", NULL },
{ NULL }
@@ -195,27 +193,30 @@ ensure_unlinked (GFile *path,
*/
static gboolean
copy_one_config_file (OtAdminDeploy *self,
+ GFile *orig_etc,
GFile *modified_etc,
GFile *new_etc,
- GFile *file,
+ GFile *src,
GCancellable *cancellable,
GError **error)
{
gboolean ret = FALSE;
- ot_lobj GFile *target_file = NULL;
- ot_lobj GFile *target_parent = NULL;
- ot_lfree char *path = NULL;
+ ot_lobj GFile *dest = NULL;
+ ot_lobj GFile *parent = NULL;
+ ot_lfree char *relative_path = NULL;
+ ot_lobj GFile *modified_path = NULL;
+
+ relative_path = g_file_get_relative_path (orig_etc, src);
+ modified_path = g_file_resolve_relative_path (modified_etc, relative_path);
+ dest = g_file_resolve_relative_path (new_etc, relative_path);
- path = g_file_get_relative_path (modified_etc, file);
- g_assert (path);
- target_file = g_file_resolve_relative_path (new_etc, path);
- target_parent = g_file_get_parent (target_file);
+ parent = g_file_get_parent (dest);
/* FIXME actually we need to copy permissions and xattrs */
- if (!ot_gfile_ensure_directory (target_parent, TRUE, error))
+ if (!ot_gfile_ensure_directory (parent, TRUE, error))
goto out;
- if (!g_file_copy (file, target_file, G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA,
+ if (!g_file_copy (src, dest, G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS | G_FILE_COPY_ALL_METADATA,
cancellable, NULL, NULL, error))
goto out;
@@ -251,7 +252,7 @@ merge_etc_changes (OtAdminDeploy *self,
ot_lptrarray GPtrArray *added = NULL;
guint i;
- modified = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ modified = g_ptr_array_new_with_free_func ((GDestroyNotify) ostree_diff_item_unref);
removed = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
added = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
@@ -287,14 +288,23 @@ merge_etc_changes (OtAdminDeploy *self,
for (i = 0; i < modified->len; i++)
{
OstreeDiffItem *diff = modified->pdata[i];
- if (!copy_one_config_file (self, modified_etc, new_etc, diff->src,
+ ot_lfree char *relative_path = NULL;
+ ot_lobj GFile *modified_path = NULL;
+ ot_lobj GFile *target_path = NULL;
+
+ relative_path = g_file_get_relative_path (orig_etc, diff->src);
+ modified_path = g_file_resolve_relative_path (modified_etc, relative_path);
+ target_path = g_file_resolve_relative_path (new_etc, relative_path);
+
+ if (!copy_one_config_file (self, orig_etc, modified_etc, new_etc, diff->src,
cancellable, error))
goto out;
}
for (i = 0; i < added->len; i++)
{
GFile *file = added->pdata[i];
- if (!copy_one_config_file (self, modified_etc, new_etc, file,
+
+ if (!copy_one_config_file (self, orig_etc, modified_etc, new_etc, file,
cancellable, error))
goto out;
}
@@ -505,8 +515,9 @@ do_update_kernel (OtAdminDeploy *self,
ot_lptrarray GPtrArray *args = NULL;
args = g_ptr_array_new ();
- ot_ptrarray_add_many (args, "ostadmin", "update-kernel",
+ ot_ptrarray_add_many (args, "ostree", "admin",
"--ostree-dir", ot_gfile_get_path_cached (self->ostree_dir),
+ "update-kernel",
ot_gfile_get_path_cached (deploy_path), NULL);
g_ptr_array_add (args, NULL);
@@ -522,7 +533,7 @@ do_update_kernel (OtAdminDeploy *self,
gboolean
-ot_admin_builtin_deploy (int argc, char **argv, GError **error)
+ot_admin_builtin_deploy (int argc, char **argv, GFile *ostree_dir, GError **error)
{
GOptionContext *context;
OtAdminDeploy self_data;
@@ -549,7 +560,7 @@ ot_admin_builtin_deploy (int argc, char **argv, GError **error)
goto out;
}
- self->ostree_dir = g_file_new_for_path (opt_ostree_dir);
+ self->ostree_dir = g_object_ref (ostree_dir);
if (!ot_admin_ensure_initialized (self->ostree_dir, cancellable, error))
goto out;
diff --git a/src/ostadmin/ot-admin-builtin-diff.c b/src/ostree/ot-admin-builtin-diff.c
similarity index 87%
rename from src/ostadmin/ot-admin-builtin-diff.c
rename to src/ostree/ot-admin-builtin-diff.c
index c828f8e..a5c347d 100644
--- a/src/ostadmin/ot-admin-builtin-diff.c
+++ b/src/ostree/ot-admin-builtin-diff.c
@@ -28,19 +28,15 @@
#include <glib/gi18n.h>
-static char *opt_ostree_dir = "/ostree";
-
static GOptionEntry options[] = {
- { "ostree-dir", 0, 0, G_OPTION_ARG_STRING, &opt_ostree_dir, "Path to OSTree root directory (default: /ostree)", NULL },
{ NULL }
};
gboolean
-ot_admin_builtin_diff (int argc, char **argv, GError **error)
+ot_admin_builtin_diff (int argc, char **argv, GFile *ostree_dir, GError **error)
{
GOptionContext *context;
gboolean ret = FALSE;
- ot_lobj GFile *ostree_dir = NULL;
ot_lobj GFile *repo_path = NULL;
ot_lobj GFile *deployment = NULL;
ot_lobj GFile *deploy_parent = NULL;
@@ -58,7 +54,6 @@ ot_admin_builtin_diff (int argc, char **argv, GError **error)
if (!g_option_context_parse (context, &argc, &argv, error))
goto out;
- ostree_dir = g_file_new_for_path (opt_ostree_dir);
repo_path = g_file_get_child (ostree_dir, "repo");
if (argc > 1)
@@ -84,7 +79,7 @@ ot_admin_builtin_diff (int argc, char **argv, GError **error)
ot_gfile_get_basename_cached (deployment),
"-etc", NULL);
- modified = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
+ modified = g_ptr_array_new_with_free_func ((GDestroyNotify) ostree_diff_item_unref);
removed = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
added = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
if (!ostree_diff_dirs (orig_etc_path, new_etc_path, modified, removed, added,
@@ -95,7 +90,6 @@ ot_admin_builtin_diff (int argc, char **argv, GError **error)
ret = TRUE;
out:
- g_clear_object (&ostree_dir);
if (context)
g_option_context_free (context);
return ret;
diff --git a/src/ostadmin/ot-admin-builtin-init.c b/src/ostree/ot-admin-builtin-init.c
similarity index 79%
rename from src/ostadmin/ot-admin-builtin-init.c
rename to src/ostree/ot-admin-builtin-init.c
index 703e14f..f433176 100644
--- a/src/ostadmin/ot-admin-builtin-init.c
+++ b/src/ostree/ot-admin-builtin-init.c
@@ -28,16 +28,12 @@
#include <glib/gi18n.h>
-static char *opt_ostree_dir = "/ostree";
-
static GOptionEntry options[] = {
- { "ostree-dir", 0, 0, G_OPTION_ARG_STRING, &opt_ostree_dir, "Path to OSTree root directory (default: /ostree)", NULL },
{ NULL }
};
-
gboolean
-ot_admin_builtin_init (int argc, char **argv, GError **error)
+ot_admin_builtin_init (int argc, char **argv, GFile *ostree_dir, GError **error)
{
GOptionContext *context;
gboolean ret = FALSE;
@@ -50,12 +46,10 @@ ot_admin_builtin_init (int argc, char **argv, GError **error)
if (!g_option_context_parse (context, &argc, &argv, error))
goto out;
- dir = g_file_new_for_path (opt_ostree_dir);
-
- if (!ot_admin_ensure_initialized (dir, cancellable, error))
+ if (!ot_admin_ensure_initialized (ostree_dir, cancellable, error))
goto out;
- g_print ("%s initialized as OSTree root\n", opt_ostree_dir);
+ g_print ("%s initialized as OSTree root\n", ot_gfile_get_path_cached (ostree_dir));
ret = TRUE;
out:
diff --git a/src/ostadmin/ot-admin-builtin-update-kernel.c b/src/ostree/ot-admin-builtin-update-kernel.c
similarity index 81%
rename from src/ostadmin/ot-admin-builtin-update-kernel.c
rename to src/ostree/ot-admin-builtin-update-kernel.c
index d8edad5..d69b57b 100644
--- a/src/ostadmin/ot-admin-builtin-update-kernel.c
+++ b/src/ostree/ot-admin-builtin-update-kernel.c
@@ -29,20 +29,18 @@
#include <sys/utsname.h>
typedef struct {
- OstreeRepo *repo;
+ GFile *ostree_dir;
} OtAdminUpdateKernel;
-static char *opt_ostree_dir = "/ostree";
-
static GOptionEntry options[] = {
- { "ostree-dir", 0, 0, G_OPTION_ARG_STRING, &opt_ostree_dir, "Path to OSTree root directory", NULL },
{ NULL }
};
static gboolean
-copy_modules (const char *release,
- GCancellable *cancellable,
- GError **error)
+copy_modules (OtAdminUpdateKernel *self,
+ const char *release,
+ GCancellable *cancellable,
+ GError **error)
{
gboolean ret = FALSE;
ot_lobj GFile *src_modules_file = NULL;
@@ -50,7 +48,7 @@ copy_modules (const char *release,
ot_lobj GFile *dest_modules_file = NULL;
src_modules_file = ot_gfile_from_build_path ("/lib/modules", release, NULL);
- dest_modules_file = ot_gfile_from_build_path (opt_ostree_dir, "modules", release, NULL);
+ dest_modules_file = ot_gfile_get_child_build_path (self->ostree_dir, "modules", release, NULL);
dest_modules_parent = g_file_get_parent (dest_modules_file);
if (!ot_gfile_ensure_directory (dest_modules_parent, FALSE, error))
goto out;
@@ -69,10 +67,11 @@ copy_modules (const char *release,
}
static gboolean
-update_initramfs (const char *release,
- const char *deploy_path,
- GCancellable *cancellable,
- GError **error)
+update_initramfs (OtAdminUpdateKernel *self,
+ const char *release,
+ const char *deploy_path,
+ GCancellable *cancellable,
+ GError **error)
{
gboolean ret = FALSE;
ot_lfree char *initramfs_name = NULL;
@@ -85,8 +84,8 @@ update_initramfs (const char *release,
ot_lptrarray GPtrArray *mkinitramfs_args = NULL;
ot_lobj GFile *tmpdir = NULL;
ot_lfree char *initramfs_tmp_path = NULL;
- ot_lfree char *ostree_vardir = NULL;
- ot_lfree char *ostree_moduledir = NULL;
+ ot_lfree GFile *ostree_vardir = NULL;
+ ot_lfree GFile *ostree_moduledir = NULL;
ot_lobj GFile *initramfs_tmp_file = NULL;
ot_lobj GFileInfo *initramfs_tmp_info = NULL;
@@ -94,8 +93,8 @@ update_initramfs (const char *release,
cancellable, error))
goto out;
- ostree_vardir = g_build_filename (opt_ostree_dir, "var", NULL);
- ostree_moduledir = g_build_filename (opt_ostree_dir, "modules", NULL);
+ ostree_vardir = g_file_get_child (self->ostree_dir, "var");
+ ostree_moduledir = g_file_get_child (self->ostree_dir, "modules");
mkinitramfs_args = g_ptr_array_new ();
/* Note: the hardcoded /tmp path below is not actually a
@@ -107,9 +106,9 @@ update_initramfs (const char *release,
"--mount-readonly", "/",
"--mount-proc", "/proc",
"--mount-bind", "/dev", "/dev",
- "--mount-bind", ostree_vardir, "/var",
+ "--mount-bind", ot_gfile_get_path_cached (ostree_vardir), "/var",
"--mount-bind", ot_gfile_get_path_cached (tmpdir), "/tmp",
- "--mount-bind", ostree_moduledir, "/lib/modules",
+ "--mount-bind", ot_gfile_get_path_cached (ostree_moduledir), "/lib/modules",
deploy_path,
"dracut", "-f", "/tmp/initramfs-ostree.img", release,
NULL);
@@ -188,10 +187,11 @@ grep_literal (GFile *f,
}
static gboolean
-get_kernel_path_from_release (const char *release,
- GFile **out_path,
- GCancellable *cancellable,
- GError **error)
+get_kernel_path_from_release (OtAdminUpdateKernel *self,
+ const char *release,
+ GFile **out_path,
+ GCancellable *cancellable,
+ GError **error)
{
gboolean ret = FALSE;
ot_lfree char *name = NULL;
@@ -211,9 +211,10 @@ get_kernel_path_from_release (const char *release,
}
static gboolean
-update_grub (const char *release,
- GCancellable *cancellable,
- GError **error)
+update_grub (OtAdminUpdateKernel *self,
+ const char *release,
+ GCancellable *cancellable,
+ GError **error)
{
gboolean ret = FALSE;
ot_lobj GFile *grub_path = g_file_new_for_path ("/boot/grub/grub.conf");
@@ -232,7 +233,8 @@ update_grub (const char *release,
ot_lfree char *initramfs_arg = NULL;
ot_lobj GFile *kernel_path = NULL;
- if (!get_kernel_path_from_release (release, &kernel_path, cancellable, error))
+ if (!get_kernel_path_from_release (self, release, &kernel_path,
+ cancellable, error))
goto out;
if (kernel_path == NULL)
@@ -268,7 +270,7 @@ update_grub (const char *release,
}
gboolean
-ot_admin_builtin_update_kernel (int argc, char **argv, GError **error)
+ot_admin_builtin_update_kernel (int argc, char **argv, GFile *ostree_dir, GError **error)
{
GOptionContext *context;
OtAdminUpdateKernel self_data;
@@ -304,18 +306,21 @@ ot_admin_builtin_update_kernel (int argc, char **argv, GError **error)
release = utsname.release;
if (argc > 2)
release = argv[2];
+
+ self->ostree_dir = g_object_ref (ostree_dir);
- if (!copy_modules (release, cancellable, error))
+ if (!copy_modules (self, release, cancellable, error))
goto out;
- if (!update_initramfs (release, deploy_path, cancellable, error))
+ if (!update_initramfs (self, release, deploy_path, cancellable, error))
goto out;
- if (!update_grub (release, cancellable, error))
+ if (!update_grub (self, release, cancellable, error))
goto out;
ret = TRUE;
out:
+ g_clear_object (&self->ostree_dir);
if (context)
g_option_context_free (context);
return ret;
diff --git a/src/ostadmin/ot-admin-builtins.h b/src/ostree/ot-admin-builtins.h
similarity index 77%
rename from src/ostadmin/ot-admin-builtins.h
rename to src/ostree/ot-admin-builtins.h
index 4ceca2a..f9e60d7 100644
--- a/src/ostadmin/ot-admin-builtins.h
+++ b/src/ostree/ot-admin-builtins.h
@@ -27,10 +27,10 @@
G_BEGIN_DECLS
-gboolean ot_admin_builtin_init (int argc, char **argv, GError **error);
-gboolean ot_admin_builtin_deploy (int argc, char **argv, GError **error);
-gboolean ot_admin_builtin_diff (int argc, char **argv, GError **error);
-gboolean ot_admin_builtin_update_kernel (int argc, char **argv, GError **error);
+gboolean ot_admin_builtin_init (int argc, char **argv, GFile *ostree_dir, GError **error);
+gboolean ot_admin_builtin_deploy (int argc, char **argv, GFile *ostree_dir, GError **error);
+gboolean ot_admin_builtin_diff (int argc, char **argv, GFile *ostree_dir, GError **error);
+gboolean ot_admin_builtin_update_kernel (int argc, char **argv, GFile *ostree_dir, GError **error);
G_END_DECLS
diff --git a/src/ostadmin/ot-admin-functions.c b/src/ostree/ot-admin-functions.c
similarity index 100%
rename from src/ostadmin/ot-admin-functions.c
rename to src/ostree/ot-admin-functions.c
diff --git a/src/ostadmin/ot-admin-functions.h b/src/ostree/ot-admin-functions.h
similarity index 100%
rename from src/ostadmin/ot-admin-functions.h
rename to src/ostree/ot-admin-functions.h
diff --git a/src/ostree/ot-builtin-admin.c b/src/ostree/ot-builtin-admin.c
new file mode 100644
index 0000000..f8aa8f9
--- /dev/null
+++ b/src/ostree/ot-builtin-admin.c
@@ -0,0 +1,105 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
+ *
+ * Copyright (C) 2011 Colin Walters <walters verbum org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Colin Walters <walters verbum org>
+ */
+
+#include "config.h"
+
+#include "ot-builtins.h"
+#include "ot-admin-builtins.h"
+#include "ot-main.h"
+#include "ostree.h"
+#include "ostree-repo-file.h"
+
+#include <glib/gi18n.h>
+
+static char *opt_ostree_dir = "/ostree";
+
+static GOptionEntry options[] = {
+ { "ostree-dir", 0, 0, G_OPTION_ARG_STRING, &opt_ostree_dir, "Path to OSTree root directory (default: /ostree)", NULL },
+ { NULL }
+};
+
+typedef struct {
+ const char *name;
+ gboolean (*fn) (int argc, char **argv, GFile *ostree_dir, GError **error);
+} OstreeAdminCommand;
+
+static OstreeAdminCommand admin_subcommands[] = {
+ { "init", ot_admin_builtin_init },
+ { "deploy", ot_admin_builtin_deploy },
+ { "update-kernel", ot_admin_builtin_update_kernel },
+ { "config-diff", ot_admin_builtin_diff },
+ { NULL, NULL }
+};
+
+gboolean
+ostree_builtin_admin (int argc, char **argv, GFile *repo_path, GError **error)
+{
+ GOptionContext *context;
+ gboolean ret = FALSE;
+ __attribute__((unused)) GCancellable *cancellable = NULL;
+ const char *subcommand_name;
+ OstreeAdminCommand *subcommand;
+ int subcmd_argc;
+ char **subcmd_argv = NULL;
+ ot_lobj GFile *ostree_dir = NULL;
+
+ context = g_option_context_new ("[OPTIONS] SUBCOMMAND - Run an administrative subcommand");
+ g_option_context_add_main_entries (context, options, NULL);
+
+ if (!g_option_context_parse (context, &argc, &argv, error))
+ goto out;
+
+ if (argc <= 1)
+ {
+ ot_util_usage_error (context, "A valid SUBCOMMAND is required", error);
+ goto out;
+ }
+ subcommand_name = argv[1];
+
+ subcommand = admin_subcommands;
+ while (subcommand->name)
+ {
+ if (g_strcmp0 (subcommand_name, subcommand->name) == 0)
+ break;
+ subcommand++;
+ }
+
+ if (!subcommand->name)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ "Unknown command '%s'", subcommand_name);
+ goto out;
+ }
+
+ ostree_dir = g_file_new_for_path (opt_ostree_dir);
+
+ ostree_prep_builtin_argv (subcommand_name, argc-2, argv+2, &subcmd_argc, &subcmd_argv);
+
+ if (!subcommand->fn (subcmd_argc, subcmd_argv, ostree_dir, error))
+ goto out;
+
+ ret = TRUE;
+ out:
+ if (context)
+ g_option_context_free (context);
+ return ret;
+}
diff --git a/src/ostree/ot-builtins.h b/src/ostree/ot-builtins.h
index b380190..aa7a645 100644
--- a/src/ostree/ot-builtins.h
+++ b/src/ostree/ot-builtins.h
@@ -27,6 +27,7 @@
G_BEGIN_DECLS
+gboolean ostree_builtin_admin (int argc, char **argv, GFile *repo_path, GError **error);
gboolean ostree_builtin_cat (int argc, char **argv, GFile *repo_path, GError **error);
gboolean ostree_builtin_config (int argc, char **argv, GFile *repo_path, GError **error);
gboolean ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GError **error);
diff --git a/src/ostree/ot-main.c b/src/ostree/ot-main.c
index 90f3209..554307f 100644
--- a/src/ostree/ot-main.c
+++ b/src/ostree/ot-main.c
@@ -54,12 +54,12 @@ ostree_usage (char **argv,
return (is_error ? 1 : 0);
}
-static void
-prep_builtin_argv (const char *builtin,
- int argc,
- char **argv,
- int *out_argc,
- char ***out_argv)
+void
+ostree_prep_builtin_argv (const char *builtin,
+ int argc,
+ char **argv,
+ int *out_argc,
+ char ***out_argv)
{
int i;
char **cmd_argv;
@@ -165,7 +165,7 @@ ostree_run (int argc,
goto out;
}
- prep_builtin_argv (cmd, argc-arg_off, argv+arg_off, &cmd_argc, &cmd_argv);
+ ostree_prep_builtin_argv (cmd, argc-arg_off, argv+arg_off, &cmd_argc, &cmd_argv);
if (!command->fn (cmd_argc, cmd_argv, repo_file, &error))
goto out;
diff --git a/src/ostree/ot-main.h b/src/ostree/ot-main.h
index 4deb086..f7e632b 100644
--- a/src/ostree/ot-main.h
+++ b/src/ostree/ot-main.h
@@ -33,6 +33,13 @@ typedef struct {
int flags; /* OstreeBuiltinFlags */
} OstreeCommand;
+void
+ostree_prep_builtin_argv (const char *builtin,
+ int argc,
+ char **argv,
+ int *out_argc,
+ char ***out_argv);
+
int ostree_main (int argc, char **argv, OstreeCommand *commands);
int ostree_run (int argc, char **argv, OstreeCommand *commands, GError **error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]