@@ -26,8 +26,10 @@
#include "common/help.h"
#include "common/box.h"
+extern bool global_verbose;
+
static const char * const btrfs_cmd_group_usage[] = {
- "btrfs [--help] [--version] [--format <format>] <group> [<group>...] <command> [<args>]",
+ "btrfs [--help] [--version] [--format <format>] [--verbose] <group> [<group>...] <command> [<args>]",
NULL
};
@@ -242,12 +244,13 @@ static void handle_output_format(const char *format)
*/
static int handle_global_options(int argc, char **argv)
{
- enum { OPT_HELP = 256, OPT_VERSION, OPT_FULL, OPT_FORMAT };
+ enum { OPT_HELP = 256, OPT_VERSION, OPT_FULL, OPT_FORMAT, OPT_VERBOSE };
static const struct option long_options[] = {
{ "help", no_argument, NULL, OPT_HELP },
{ "version", no_argument, NULL, OPT_VERSION },
{ "format", required_argument, NULL, OPT_FORMAT },
{ "full", no_argument, NULL, OPT_FULL },
+ { "verbose", no_argument, NULL, OPT_VERBOSE },
{ NULL, 0, NULL, 0}
};
int shift;
@@ -270,6 +273,7 @@ static int handle_global_options(int argc, char **argv)
case OPT_FORMAT:
handle_output_format(optarg);
break;
+ case OPT_VERBOSE: break;
default:
fprintf(stderr, "Unknown global option: %s\n",
argv[optind - 1]);
@@ -310,6 +314,10 @@ static void handle_special_globals(int shift, int argc, char **argv)
cmd_execute(&cmd_struct_version, argc, argv);
exit(0);
}
+
+ for (i = 0; i < shift; i++)
+ if (strcmp(argv[i], "--verbose") == 0)
+ global_verbose = true;
}
static const struct cmd_group btrfs_cmd_group = {
@@ -53,6 +53,14 @@
"-t|--tbytes show sizes in TiB, or TB with --si"
/*
+ * Global verbose option for the sub-commands
+ */
+#define HELPINFO_INSERT_VERBOSE \
+ "-v|--verbose show verbose output"
+#define HELPINFO_INSERT_VERBOSE_SHORT \
+ "-v show verbose output"
+
+/*
* Special marker in the help strings that will preemptively insert the global
* options and then continue with the following text that possibly follows
* after the regular options
@@ -16,6 +16,7 @@
#include <stdio.h>
#include <stdarg.h>
+#include <stdbool.h>
#include "common/messages.h"
__attribute__ ((format (printf, 1, 2)))
@@ -75,3 +76,21 @@ int __btrfs_error_on(int condition, const char *fmt, ...)
return 1;
}
+
+bool global_verbose = false;
+
+__attribute__ ((format (printf, 2, 3)))
+void pr_verbose(bool condition, const char *fmt, ...)
+{
+ va_list args;
+
+ if (condition == false)
+ return;
+
+ if (global_verbose == false)
+ return;
+
+ va_start(args, fmt);
+ vfprintf(stdout, fmt, args);
+ va_end(args);
+}
@@ -14,6 +14,8 @@
* Boston, MA 021110-1307, USA.
*/
+#include <stdbool.h>
+
#ifndef __BTRFS_MESSAGES_H__
#define __BTRFS_MESSAGES_H__
@@ -96,3 +98,6 @@ __attribute__ ((format (printf, 2, 3)))
int __btrfs_error_on(int condition, const char *fmt, ...);
#endif
+
+__attribute__ ((format (printf, 2, 3)))
+void pr_verbose(bool condition, const char *fmt, ...);
The idea is to use the global --verbose command option to show verbose output from the sub-commands. This patch adds a global bool variable, %global_verbose, to transpire the verbose requisites to the sub-command level. And provides pr_verbose() helper function to log the verbose messages. Suggested-by: David Sterba <dsterba@suse.com> Signed-off-by: Anand Jain <anand.jain@oracle.com> --- btrfs.c | 12 ++++++++++-- common/help.h | 8 ++++++++ common/messages.c | 19 +++++++++++++++++++ common/messages.h | 5 +++++ 4 files changed, 42 insertions(+), 2 deletions(-)