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:
parent
c9b11316ab
commit
ca6c52610f
3 changed files with 32 additions and 32 deletions
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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***">'
|
||||||
|
|
Loading…
Reference in a new issue