@@ -27,7 +27,7 @@
#include "common/box.h"
static const char * const btrfs_cmd_group_usage[] = {
- "btrfs [--help] [--version] [--format <format>] <group> [<group>...] <command> [<args>]",
+ "btrfs [--help] [--version] [--format <format>] [-v|--verbose] [-q|--quiet] <group> [<group>...] <command> [<args>]",
NULL
};
@@ -248,6 +248,8 @@ static int handle_global_options(int argc, char **argv)
{ "version", no_argument, NULL, OPT_VERSION },
{ "format", required_argument, NULL, OPT_FORMAT },
{ "full", no_argument, NULL, OPT_FULL },
+ { "verbose", no_argument, NULL, 'v' },
+ { "quiet", no_argument, NULL, 'q' },
{ NULL, 0, NULL, 0}
};
int shift;
@@ -259,7 +261,7 @@ static int handle_global_options(int argc, char **argv)
while (1) {
int c;
- c = getopt_long(argc, argv, "+", long_options, NULL);
+ c = getopt_long(argc, argv, "+vq", long_options, NULL);
if (c < 0)
break;
@@ -270,6 +272,12 @@ static int handle_global_options(int argc, char **argv)
case OPT_FORMAT:
handle_output_format(optarg);
break;
+ case 'v':
+ bconf_be_verbose();
+ break;
+ case 'q':
+ bconf_be_quiet();
+ break;
default:
fprintf(stderr, "Unknown global option: %s\n",
argv[optind - 1]);
@@ -310,6 +318,14 @@ 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)
+ bconf_be_verbose();
+
+ for (i = 0; i < shift; i++)
+ if (strcmp(argv[i], "--quiet") == 0)
+ bconf_be_quiet();
}
static const struct cmd_group btrfs_cmd_group = {
@@ -60,6 +60,11 @@
#define HELPINFO_INSERT_GLOBALS "", \
"Global options:"
#define HELPINFO_INSERT_FORMAT "--foramt TYPE"
+/*
+ * Global verbose option for the sub-commands
+ */
+#define HELPINFO_INSERT_VERBOSE "-v|--verbose increase output verbosity"
+#define HELPINFO_INSERT_QUIET "-q|--quiet print only errors"
struct cmd_struct;
struct cmd_group;
@@ -17,6 +17,7 @@
#include <stdio.h>
#include <stdarg.h>
#include "common/messages.h"
+#include "common/utils.h"
__attribute__ ((format (printf, 1, 2)))
void __btrfs_warning(const char *fmt, ...)
@@ -75,3 +76,27 @@ int __btrfs_error_on(int condition, const char *fmt, ...)
return 1;
}
+
+/*
+ * Print verbose helper function
+ * level: Minimum verbose level at which the message has to be printed.
+ */
+__attribute__ ((format (printf, 2, 3)))
+void pr_verbose(int level, const char *fmt, ...)
+{
+ va_list args;
+
+ if (bconf.verbose == BTRFS_BCONF_QUIET || level == BTRFS_BCONF_QUIET)
+ return;
+
+ /*
+ * level is set by the threads requesting to print only if the command
+ * verbose option is higher than the level.
+ */
+ if (bconf.verbose < level)
+ return;
+
+ va_start(args, fmt);
+ vfprintf(stdout, fmt, args);
+ va_end(args);
+}
@@ -96,3 +96,6 @@ __attribute__ ((format (printf, 2, 3)))
int __btrfs_error_on(int condition, const char *fmt, ...);
#endif
+
+__attribute__ ((format (printf, 2, 3)))
+void pr_verbose(int level, const char *fmt, ...);
@@ -1679,6 +1679,20 @@ u8 rand_u8(void)
void btrfs_config_init(void)
{
bconf.output_format = CMD_FORMAT_TEXT;
+ bconf.verbose = BTRFS_BCONF_UNSET;
+}
+
+void bconf_be_verbose(void)
+{
+ if (bconf.verbose == BTRFS_BCONF_UNSET)
+ bconf.verbose = 1;
+ else
+ bconf.verbose++;
+}
+
+void bconf_be_quiet(void)
+{
+ bconf.verbose = BTRFS_BCONF_QUIET;
}
/* Returns total size of main memory in bytes, -1UL if error. */
@@ -117,16 +117,27 @@ unsigned long total_memory(void);
void print_device_info(struct btrfs_device *device, char *prefix);
void print_all_devices(struct list_head *devices);
+#define BTRFS_BCONF_UNSET -1
+#define BTRFS_BCONF_QUIET 0
/*
* Global program state, configurable by command line and available to
* functions without extra context passing.
*/
struct btrfs_config {
unsigned int output_format;
+
+ /* values
+ * BTRFS_BCONF_QUIET
+ * BTRFS_BCONF_UNSET
+ * > 0: Verbose level
+ */
+ int verbose;
};
extern struct btrfs_config bconf;
void btrfs_config_init(void);
+void bconf_be_verbose(void);
+void bconf_be_quiet(void);
/* Pseudo random number generator wrappers */
int rand_int(void);
Add btrfs(8) global --verbose and --quiet command options to show verbose or no output from the sub-commands. By introducing global a %bconf::verbose memeber to transpire the same down to the sub-command. Further the added helper function pr_verbose() helps to logs the verbose messages, based on the state of the %bconf::verbose. And further HELPINFO_ defines are provides for the usage. Suggested-by: David Sterba <dsterba@suse.com> Signed-off-by: Anand Jain <anand.jain@oracle.com> --- v2: Add missing -q along with --quiet. Create and use bconf_be_verbose() and bconf_be_quiet(). Change help wordings for verbose and quiet. Define and use BTRFS_BCONF_UNSET and BTRFS_BCONF_QUIET. Use HELPINFO_INSERT_GLOBALS. btrfs.c | 20 ++++++++++++++++++-- common/help.h | 5 +++++ common/messages.c | 25 +++++++++++++++++++++++++ common/messages.h | 3 +++ common/utils.c | 14 ++++++++++++++ common/utils.h | 11 +++++++++++ 6 files changed, 76 insertions(+), 2 deletions(-)