btrfs-progs: send: add quiet option
authorM G Berberich <btrfs@oss.m-berberich.de>
Thu, 12 May 2016 19:49:25 +0000 (21:49 +0200)
committerDavid Sterba <dsterba@suse.com>
Wed, 1 Jun 2016 12:56:56 +0000 (14:56 +0200)
Add new options -q,--quiet to prevent printing messages on stderr, added
--verbose as alternative for -v.  Moved 'Mode NO_FILE_DATA enabled'
message to stderr. The default verboisty level is 1 to keep some
backward compatibility.

Signed-off-by: M G Berberich <btrfs@oss.m-berberich.de>
[ minor adjustments in the options, help text and changelog, added
  manual page text ]
Signed-off-by: David Sterba <dsterba@suse.com>
Documentation/btrfs-send.asciidoc
cmds-send.c

index 1d54788..47b0b04 100644 (file)
@@ -37,9 +37,6 @@ are exactly in the same state on both sides, the sender and the receiver.
 
 `Options`
 
--v::
-enable verbose output, print generated commands in a readable form, (each
-occurrence of this option increases the verbosity level)
 -e::
 if sending multiple subvolumes at once, use the new format and omit the
 'end cmd' marker in the stream separating the subvolumes
@@ -56,6 +53,11 @@ send in 'NO_FILE_DATA' mode
 The output stream does not contain any file
 data and thus cannot be used to transfer changes. This mode is faster and
 useful to show the differences in metadata.
+-v|--verbose::
+enable verbose output, print generated commands in a readable form, (each
+occurrence of this option increases the verbosity level)
+-q|--quiet::
+suppress all messagese except errors
 
 EXIT STATUS
 -----------
index 07070ad..74d0128 100644 (file)
 #include "send.h"
 #include "send-utils.h"
 
-static int g_verbose = 0;
+/*
+ * Default is 1 for historical reasons, changing may break scripts that expect
+ * the 'At subvol' message.
+ */
+static int g_verbose = 1;
 
 struct btrfs_send {
        int send_fd;
@@ -301,10 +305,10 @@ static int do_send(struct btrfs_send *send, u64 parent_root_id,
                                "Try upgrading your kernel or don't use -e.\n");
                goto out;
        }
-       if (g_verbose > 0)
+       if (g_verbose > 1)
                fprintf(stderr, "BTRFS_IOC_SEND returned %d\n", ret);
 
-       if (g_verbose > 0)
+       if (g_verbose > 1)
                fprintf(stderr, "joining genl thread\n");
 
        close(pipefd[1]);
@@ -429,9 +433,11 @@ int cmd_send(int argc, char **argv)
        while (1) {
                enum { GETOPT_VAL_SEND_NO_DATA = 256 };
                static const struct option long_options[] = {
+                       { "verbose", no_argument, NULL, 'v' },
+                       { "quiet", no_argument, NULL, 'q' },
                        { "no-data", no_argument, NULL, GETOPT_VAL_SEND_NO_DATA }
                };
-               int c = getopt_long(argc, argv, "vec:f:i:p:", long_options, NULL);
+               int c = getopt_long(argc, argv, "vqec:f:i:p:", long_options, NULL);
 
                if (c < 0)
                        break;
@@ -440,6 +446,9 @@ int cmd_send(int argc, char **argv)
                case 'v':
                        g_verbose++;
                        break;
+               case 'q':
+                       g_verbose = 0;
+                       break;
                case 'e':
                        new_end_cmd_semantic = 1;
                        break;
@@ -622,8 +631,9 @@ int cmd_send(int argc, char **argv)
                }
        }
 
-       if (send_flags & BTRFS_SEND_FLAG_NO_FILE_DATA)
-               printf("Mode NO_FILE_DATA enabled\n");
+       if ((send_flags & BTRFS_SEND_FLAG_NO_FILE_DATA) && g_verbose > 1)
+               if (g_verbose > 1)
+                       fprintf(stderr, "Mode NO_FILE_DATA enabled\n");
 
        for (i = optind; i < argc; i++) {
                int is_first_subvol;
@@ -632,7 +642,8 @@ int cmd_send(int argc, char **argv)
                free(subvol);
                subvol = argv[i];
 
-               fprintf(stderr, "At subvol %s\n", subvol);
+               if (g_verbose > 0)
+                       fprintf(stderr, "At subvol %s\n", subvol);
 
                subvol = realpath(subvol, NULL);
                if (!subvol) {
@@ -713,8 +724,6 @@ const char * const cmd_send_usage[] = {
        "which case 'btrfs send' will determine a suitable parent among the",
        "clone sources itself.",
        "\n",
-       "-v               Enable verbose debug output. Each occurrence of",
-       "                 this option increases the verbose level more.",
        "-e               If sending multiple subvols at once, use the new",
        "                 format and omit the end-cmd between the subvols.",
        "-p <parent>      Send an incremental stream from <parent> to",
@@ -728,5 +737,8 @@ const char * const cmd_send_usage[] = {
        "                 does not contain any file data and thus cannot be used",
        "                 to transfer changes. This mode is faster and useful to",
        "                 show the differences in metadata.",
+       "-v|--verbose     enable verbose output to stderr, each occurrence of",
+       "                 this option increases verbosity",
+       "-q|--quiet       suppress all messages, except errors",
        NULL
 };