1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2024-12-27 10:18:12 +00:00

restore some print statements

the heuristics i used are the following:

 1. if we are prompting the use, use print on stderr (input() may
    produce some stuff on stdout, but it's outside the scope of this
    patch). we do not want those prompts to end up on the standard
    output in case we are piping stuff around

 2. if the command is primarily producing output for the user on the
    console (`list`, `info`, `help`), we simply print on the default
    file descriptor.

 3. everywhere else, we use the logging module with varying levels of
    verbosity, as appropriate.
This commit is contained in:
Antoine Beaupré 2015-10-02 11:13:01 -04:00
parent c9b11316ab
commit ca6c52610f
3 changed files with 32 additions and 32 deletions

View file

@ -162,15 +162,15 @@ def do_create(self, args):
if args.stats: if args.stats:
t = datetime.now() t = datetime.now()
diff = t - t0 diff = t - t0
logger.warning('-' * 78) print('-' * 78)
logger.warning('Archive name: %s' % args.archive.archive) print('Archive name: %s' % args.archive.archive)
logger.warning('Archive fingerprint: %s' % hexlify(archive.id).decode('ascii')) print('Archive fingerprint: %s' % hexlify(archive.id).decode('ascii'))
logger.warning('Start time: %s' % t0.strftime('%c')) print('Start time: %s' % t0.strftime('%c'))
logger.warning('End time: %s' % t.strftime('%c')) print('End time: %s' % t.strftime('%c'))
logger.warning('Duration: %s' % format_timedelta(diff)) print('Duration: %s' % format_timedelta(diff))
logger.warning('Number of files: %d' % archive.stats.nfiles) print('Number of files: %d' % archive.stats.nfiles)
logger.warning(archive.stats.print_('This archive:', cache)) print(archive.stats.print_('This archive:', cache))
logger.warning('-' * 78) print('-' * 78)
return self.exit_code return self.exit_code
def _process(self, archive, cache, excludes, exclude_caches, skip_inodes, path, restrict_dev, def _process(self, archive, cache, excludes, exclude_caches, skip_inodes, path, restrict_dev,
@ -317,11 +317,12 @@ def do_delete(self, args):
if args.stats: if args.stats:
logger.warning(stats.print_('Deleted data:', cache)) logger.warning(stats.print_('Deleted data:', cache))
else: else:
logger.warning("You requested to completely DELETE the repository *including* all archives it contains:") print("You requested to completely DELETE the repository *including* all archives it contains:", file=sys.stderr)
for archive_info in manifest.list_archive_infos(sort_by='ts'): for archive_info in manifest.list_archive_infos(sort_by='ts'):
logger.warning(format_archive(archive_info)) print(format_archive(archive_info), file=sys.stderr)
if not os.environ.get('BORG_CHECK_I_KNOW_WHAT_I_AM_DOING'): if not os.environ.get('BORG_CHECK_I_KNOW_WHAT_I_AM_DOING'):
print("""Type "YES" if you understand this and want to continue.""") print("""Type "YES" if you understand this and want to continue.""", file=sys.stderr)
# XXX: prompt may end up on stdout, but we'll assume that input() does the right thing
if input('Do you want to continue? ') != 'YES': if input('Do you want to continue? ') != 'YES':
self.exit_code = 1 self.exit_code = 1
return self.exit_code return self.exit_code
@ -365,7 +366,7 @@ def do_list(self, args):
archive = Archive(repository, key, manifest, args.src.archive) archive = Archive(repository, key, manifest, args.src.archive)
if args.short: if args.short:
for item in archive.iter_items(): for item in archive.iter_items():
print(remove_surrogates(item[b'path']), file=sys.stderr) print(remove_surrogates(item[b'path']))
else: else:
tmap = {1: 'p', 2: 'c', 4: 'd', 6: 'b', 0o10: '-', 0o12: 'l', 0o14: 's'} tmap = {1: 'p', 2: 'c', 4: 'd', 6: 'b', 0o10: '-', 0o12: 'l', 0o14: 's'}
for item in archive.iter_items(): for item in archive.iter_items():
@ -393,11 +394,10 @@ def do_list(self, args):
print('%s%s %-6s %-6s %8d %s %s%s' % ( print('%s%s %-6s %-6s %8d %s %s%s' % (
type, mode, item[b'user'] or item[b'uid'], type, mode, item[b'user'] or item[b'uid'],
item[b'group'] or item[b'gid'], size, format_time(mtime), item[b'group'] or item[b'gid'], size, format_time(mtime),
remove_surrogates(item[b'path']), extra), remove_surrogates(item[b'path']), extra))
file=sys.stderr)
else: else:
for archive_info in manifest.list_archive_infos(sort_by='ts'): for archive_info in manifest.list_archive_infos(sort_by='ts'):
print(format_archive(archive_info), file=sys.stderr) print(format_archive(archive_info))
return self.exit_code return self.exit_code
def do_info(self, args): def do_info(self, args):
@ -407,14 +407,14 @@ def do_info(self, args):
cache = Cache(repository, key, manifest, do_files=args.cache_files) cache = Cache(repository, key, manifest, do_files=args.cache_files)
archive = Archive(repository, key, manifest, args.archive.archive, cache=cache) archive = Archive(repository, key, manifest, args.archive.archive, cache=cache)
stats = archive.calc_stats(cache) stats = archive.calc_stats(cache)
logger.warning('Name:', archive.name) print('Name:', archive.name)
logger.warning('Fingerprint: %s' % hexlify(archive.id).decode('ascii')) print('Fingerprint: %s' % hexlify(archive.id).decode('ascii'))
logger.warning('Hostname:', archive.metadata[b'hostname']) print('Hostname:', archive.metadata[b'hostname'])
logger.warning('Username:', archive.metadata[b'username']) print('Username:', archive.metadata[b'username'])
logger.warning('Time: %s' % to_localtime(archive.ts).strftime('%c')) print('Time: %s' % to_localtime(archive.ts).strftime('%c'))
logger.warning('Command line:', remove_surrogates(' '.join(archive.metadata[b'cmdline']))) print('Command line:', remove_surrogates(' '.join(archive.metadata[b'cmdline'])))
logger.warning('Number of files: %d' % stats.nfiles) print('Number of files: %d' % stats.nfiles)
logger.warning(stats.print_('This archive:', cache)) print(stats.print_('This archive:', cache))
return self.exit_code return self.exit_code
def do_prune(self, args): def do_prune(self, args):
@ -496,10 +496,10 @@ def do_help(self, parser, commands, args):
if not args.topic: if not args.topic:
parser.print_help() parser.print_help()
elif args.topic in self.helptext: elif args.topic in self.helptext:
print(self.helptext[args.topic], file=sys.stderr) print(self.helptext[args.topic])
elif args.topic in commands: elif args.topic in commands:
if args.epilog_only: if args.epilog_only:
print(commands[args.topic].epilog, file=sys.stderr) print(commands[args.topic].epilog)
elif args.usage_only: elif args.usage_only:
commands[args.topic].epilog = None commands[args.topic].epilog = None
commands[args.topic].print_help() commands[args.topic].print_help()
@ -531,13 +531,13 @@ def preprocess_args(self, args):
('--yearly', '--keep-yearly', 'Warning: "--yearly" has been deprecated. Use "--keep-yearly" instead.') ('--yearly', '--keep-yearly', 'Warning: "--yearly" has been deprecated. Use "--keep-yearly" instead.')
] ]
if args and args[0] == 'verify': if args and args[0] == 'verify':
print('Warning: "borg verify" has been deprecated. Use "borg extract --dry-run" instead.', file=sys.stderr) print('Warning: "borg verify" has been deprecated. Use "borg extract --dry-run" instead.')
args = ['extract', '--dry-run'] + args[1:] args = ['extract', '--dry-run'] + args[1:]
for i, arg in enumerate(args[:]): for i, arg in enumerate(args[:]):
for old_name, new_name, warning in deprecations: for old_name, new_name, warning in deprecations:
if arg.startswith(old_name): if arg.startswith(old_name):
args[i] = arg.replace(old_name, new_name) args[i] = arg.replace(old_name, new_name)
print(warning, file=sys.stderr) print(warning)
return args return args
def run(self, args=None): def run(self, args=None):

View file

@ -74,9 +74,9 @@ def __del__(self):
self.close() self.close()
def _confirm(self, message, env_var_override=None): def _confirm(self, message, env_var_override=None):
logger.warning(message) print(message, file=sys.stderr)
if env_var_override and os.environ.get(env_var_override): if env_var_override and os.environ.get(env_var_override):
logger.warning("Yes (From {})".format(env_var_override)) print("Yes (From {})".format(env_var_override), file=sys.stderr)
return True return True
if not sys.stdin.isatty(): if not sys.stdin.isatty():
return False return False

View file

@ -196,9 +196,9 @@ def new(cls, allow_empty=False):
logger.info('Remember your passphrase. Your data will be inaccessible without it.') logger.info('Remember your passphrase. Your data will be inaccessible without it.')
return passphrase return passphrase
else: else:
logger.warning('Passphrases do not match') print('Passphrases do not match', file=sys.stderr)
else: else:
logger.warning('Passphrase must not be blank') print('Passphrase must not be blank', file=sys.stderr)
def __repr__(self): def __repr__(self):
return '<Passphrase "***hidden***">' return '<Passphrase "***hidden***">'