From f5a170ce46be439be7c5a63446d486a0e2e75012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 14 Mar 2020 12:58:04 +0100 Subject: [PATCH] extensions-tool: Add common option to silence errors Error reporting is useful when used interactively, but often undesirable when used in scripts. Account for that with a common --quiet option, which is more convenient than redirection stderr to /dev/null. https://gitlab.gnome.org/GNOME/gnome-shell/issues/2391 --- .../extensions-tool/man/gnome-extensions.txt | 7 ++++ .../extensions-tool/src/command-create.c | 1 + .../extensions-tool/src/command-disable.c | 1 + .../extensions-tool/src/command-enable.c | 1 + .../extensions-tool/src/command-info.c | 1 + .../extensions-tool/src/command-install.c | 1 + .../extensions-tool/src/command-list.c | 1 + .../extensions-tool/src/command-pack.c | 1 + .../extensions-tool/src/command-prefs.c | 1 + .../extensions-tool/src/command-reset.c | 2 ++ .../extensions-tool/src/command-uninstall.c | 1 + subprojects/extensions-tool/src/common.h | 2 ++ subprojects/extensions-tool/src/main.c | 33 +++++++++++++++++++ 13 files changed, 53 insertions(+) diff --git a/subprojects/extensions-tool/man/gnome-extensions.txt b/subprojects/extensions-tool/man/gnome-extensions.txt index 125c9b82c..d94c0bd2e 100644 --- a/subprojects/extensions-tool/man/gnome-extensions.txt +++ b/subprojects/extensions-tool/man/gnome-extensions.txt @@ -42,6 +42,13 @@ DESCRIPTION *gnome-extensions* is a utility that makes some common GNOME extensions operations available on the command line. +COMMON OPTIONS +-------------- +All commands except for *help* and *version* handle the following options: + +*--quiet*, *-q*:: +Do not print error messages + COMMANDS -------- *help* ['COMMAND']:: diff --git a/subprojects/extensions-tool/src/command-create.c b/subprojects/extensions-tool/src/command-create.c index e32e7c262..7fb5d7a78 100644 --- a/subprojects/extensions-tool/src/command-create.c +++ b/subprojects/extensions-tool/src/command-create.c @@ -262,6 +262,7 @@ handle_create (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Create a new extension")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group ()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-disable.c b/subprojects/extensions-tool/src/command-disable.c index aa8efab5b..116f6699c 100644 --- a/subprojects/extensions-tool/src/command-disable.c +++ b/subprojects/extensions-tool/src/command-disable.c @@ -56,6 +56,7 @@ handle_disable (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Disable an extension")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-enable.c b/subprojects/extensions-tool/src/command-enable.c index c790ec95f..786e45109 100644 --- a/subprojects/extensions-tool/src/command-enable.c +++ b/subprojects/extensions-tool/src/command-enable.c @@ -56,6 +56,7 @@ handle_enable (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Enable an extension")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-info.c b/subprojects/extensions-tool/src/command-info.c index a0ae0c6ac..e280023e1 100644 --- a/subprojects/extensions-tool/src/command-info.c +++ b/subprojects/extensions-tool/src/command-info.c @@ -78,6 +78,7 @@ handle_info (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Show extensions info")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-install.c b/subprojects/extensions-tool/src/command-install.c index 501f9502c..2eefabafa 100644 --- a/subprojects/extensions-tool/src/command-install.c +++ b/subprojects/extensions-tool/src/command-install.c @@ -183,6 +183,7 @@ handle_install (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Install an extension bundle")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-list.c b/subprojects/extensions-tool/src/command-list.c index f92dafa4e..bc021fd14 100644 --- a/subprojects/extensions-tool/src/command-list.c +++ b/subprojects/extensions-tool/src/command-list.c @@ -150,6 +150,7 @@ handle_list (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("List installed extensions")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-pack.c b/subprojects/extensions-tool/src/command-pack.c index d98e8fa4f..c8d995006 100644 --- a/subprojects/extensions-tool/src/command-pack.c +++ b/subprojects/extensions-tool/src/command-pack.c @@ -480,6 +480,7 @@ handle_pack (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Create an extension bundle")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-prefs.c b/subprojects/extensions-tool/src/command-prefs.c index 693d48406..86799eafc 100644 --- a/subprojects/extensions-tool/src/command-prefs.c +++ b/subprojects/extensions-tool/src/command-prefs.c @@ -89,6 +89,7 @@ handle_prefs (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Opens extension preferences")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-reset.c b/subprojects/extensions-tool/src/command-reset.c index 32b5fbaf2..2615f1595 100644 --- a/subprojects/extensions-tool/src/command-reset.c +++ b/subprojects/extensions-tool/src/command-reset.c @@ -1,4 +1,5 @@ /* command-reset.c + g_option_context_add_group (context, get_option_group()); * * Copyright 2019 Florian Müllner * @@ -56,6 +57,7 @@ handle_reset (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Reset an extension")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/command-uninstall.c b/subprojects/extensions-tool/src/command-uninstall.c index 757de6d1b..5974e098e 100644 --- a/subprojects/extensions-tool/src/command-uninstall.c +++ b/subprojects/extensions-tool/src/command-uninstall.c @@ -71,6 +71,7 @@ handle_uninstall (int argc, char *argv[], gboolean do_help) g_option_context_set_help_enabled (context, FALSE); g_option_context_set_summary (context, _("Uninstall an extension")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); + g_option_context_add_group (context, get_option_group()); if (do_help) { diff --git a/subprojects/extensions-tool/src/common.h b/subprojects/extensions-tool/src/common.h index 32f4b788b..fb23b6580 100644 --- a/subprojects/extensions-tool/src/common.h +++ b/subprojects/extensions-tool/src/common.h @@ -45,6 +45,8 @@ typedef enum { DISPLAY_DETAILED } DisplayFormat; +GOptionGroup *get_option_group (void); + void show_help (GOptionContext *context, const char *message); diff --git a/subprojects/extensions-tool/src/main.c b/subprojects/extensions-tool/src/main.c index 62d383db7..cc7cd80cd 100644 --- a/subprojects/extensions-tool/src/main.c +++ b/subprojects/extensions-tool/src/main.c @@ -49,6 +49,39 @@ extension_state_to_string (ExtensionState state) return "UNKNOWN"; } +static void +print_nothing (const char *message) +{ +} + +static gboolean +quiet_cb (const gchar *option_name, + const gchar *value, + gpointer data, + GError **error) +{ + g_set_printerr_handler (print_nothing); + return TRUE; +} + +GOptionGroup * +get_option_group () +{ + GOptionEntry entries[] = { + { .long_name = "quiet", .short_name = 'q', + .description = _("Do not print error messages"), + .arg = G_OPTION_ARG_CALLBACK, .arg_data = &quiet_cb, + .flags = G_OPTION_FLAG_NO_ARG | G_OPTION_FLAG_IN_MAIN }, + { NULL } + }; + GOptionGroup *group; + + group = g_option_group_new ("Common", "common options", "common options", NULL, NULL); + g_option_group_add_entries (group, entries); + + return group; +} + void show_help (GOptionContext *context, const char *message) {