diff --git a/Makefile-src.am b/Makefile-src.am index be5716dd..80763968 100644 --- a/Makefile-src.am +++ b/Makefile-src.am @@ -53,6 +53,7 @@ ostree_SOURCES = src/main.c \ src/ot-builtin-init.c \ src/ot-builtin-link-file.c \ src/ot-builtin-log.c \ + src/ot-builtin-run-triggers.c \ src/ot-builtin-show.c \ $(NULL) ostree_CFLAGS = -I$(srcdir)/src -I$(srcdir)/src/libostree -I$(srcdir)/src/libotutil -DLOCALEDIR=\"$(datadir)/locale\" $(GIO_UNIX_CFLAGS) diff --git a/src/main.c b/src/main.c index d6e0b5e5..e0a813d2 100644 --- a/src/main.c +++ b/src/main.c @@ -35,6 +35,7 @@ static OstreeBuiltin builtins[] = { { "link-file", ostree_builtin_link_file, 0 }, { "log", ostree_builtin_log, 0 }, { "fsck", ostree_builtin_fsck, 0 }, + { "run-triggers", ostree_builtin_run_triggers, 0 }, { "show", ostree_builtin_show, 0 }, { NULL } }; diff --git a/src/ot-builtin-checkout.c b/src/ot-builtin-checkout.c index ea6c1216..30622fd2 100644 --- a/src/ot-builtin-checkout.c +++ b/src/ot-builtin-checkout.c @@ -27,11 +27,9 @@ #include static char *repo_path; -static gboolean no_triggers; static GOptionEntry options[] = { { "repo", 0, 0, G_OPTION_ARG_FILENAME, &repo_path, "Repository path", "repo" }, - { "no-triggers", 0, 0, G_OPTION_ARG_NONE, &no_triggers, "Do not run post-installation trigger scripts", NULL }, { NULL } }; @@ -74,13 +72,6 @@ ostree_builtin_checkout (int argc, char **argv, const char *prefix, GError **err if (!ostree_repo_checkout (repo, commit, destination, error)) goto out; - if (!no_triggers) - { - checkout = ostree_checkout_new (repo, destination); - if (!ostree_checkout_run_triggers (checkout, error)) - goto out; - } - ret = TRUE; out: if (context) diff --git a/src/ot-builtin-run-triggers.c b/src/ot-builtin-run-triggers.c new file mode 100644 index 00000000..55274187 --- /dev/null +++ b/src/ot-builtin-run-triggers.c @@ -0,0 +1,81 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2011 Colin Walters + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Author: Colin Walters + */ + +#include "config.h" + +#include "ot-builtins.h" +#include "ostree.h" + +#include + +static char *repo_path; + +static GOptionEntry options[] = { + { "repo", 0, 0, G_OPTION_ARG_FILENAME, &repo_path, "Repository path", "repo" }, + { NULL } +}; + +gboolean +ostree_builtin_run_triggers (int argc, char **argv, const char *prefix, GError **error) +{ + GOptionContext *context; + gboolean ret = FALSE; + OstreeRepo *repo = NULL; + OstreeCheckout *checkout = NULL; + const char *dir; + + context = g_option_context_new ("DIR - Run trigger scripts for directory"); + g_option_context_add_main_entries (context, options, NULL); + + if (!g_option_context_parse (context, &argc, &argv, error)) + goto out; + + if (repo_path == NULL) + repo_path = "."; + + repo = ostree_repo_new (repo_path); + if (!ostree_repo_check (repo, error)) + goto out; + + if (argc < 1) + { + gchar *help = g_option_context_get_help (context, TRUE, NULL); + g_printerr ("%s\n", help); + g_free (help); + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, + "DIR must be specified"); + goto out; + } + + dir = argv[1]; + + checkout = ostree_checkout_new (repo, dir); + if (!ostree_checkout_run_triggers (checkout, error)) + goto out; + + ret = TRUE; + out: + if (context) + g_option_context_free (context); + g_clear_object (&repo); + g_clear_object (&checkout); + return ret; +} diff --git a/src/ot-builtins.h b/src/ot-builtins.h index 7e6d7e7e..ea0dedac 100644 --- a/src/ot-builtins.h +++ b/src/ot-builtins.h @@ -41,6 +41,7 @@ gboolean ostree_builtin_commit (int argc, char **argv, const char *prefix, GErro gboolean ostree_builtin_init (int argc, char **argv, const char *prefix, GError **error); gboolean ostree_builtin_log (int argc, char **argv, const char *prefix, GError **error); gboolean ostree_builtin_link_file (int argc, char **argv, const char *prefix, GError **error); +gboolean ostree_builtin_run_triggers (int argc, char **argv, const char *prefix, GError **error); gboolean ostree_builtin_fsck (int argc, char **argv, const char *prefix, GError **error); gboolean ostree_builtin_show (int argc, char **argv, const char *prefix, GError **error);