btrfs-progs: send: add quiet option

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>
master
M G Berberich 2016-05-12 21:49:25 +02:00 committed by David Sterba
parent 2e8b5209c8
commit 09c052a8b4
2 changed files with 26 additions and 12 deletions

View 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
-----------

View File

@ -44,7 +44,11 @@
#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
};