Pārlūkot izejas kodu

log stats consistently, fixes #526

prune and create now both require --verbose --stats to show stats.
it was implemented in this way (and not with print) so you can feed the stats data
into the logging system, too.

delete now says "Archive deleted" in verbose mode (for consistency,
it already said "Repository deleted" when deleting a repo).

also: add helpers.log_multi to comfortably and prettily output a block of log lines
Thomas Waldmann 9 gadi atpakaļ
vecāks
revīzija
84672f7081
2 mainītis faili ar 35 papildinājumiem un 11 dzēšanām
  1. 18 11
      borg/archiver.py
  2. 17 0
      borg/helpers.py

+ 18 - 11
borg/archiver.py

@@ -21,7 +21,7 @@ from .helpers import Error, location_validator, format_time, format_file_size, \
     get_cache_dir, get_keys_dir, prune_within, prune_split, unhexlify, \
     get_cache_dir, get_keys_dir, prune_within, prune_split, unhexlify, \
     Manifest, remove_surrogates, update_excludes, format_archive, check_extension_modules, Statistics, \
     Manifest, remove_surrogates, update_excludes, format_archive, check_extension_modules, Statistics, \
     dir_is_tagged, bigint_to_int, ChunkerParams, CompressionSpec, is_slow_msgpack, yes, sysinfo, \
     dir_is_tagged, bigint_to_int, ChunkerParams, CompressionSpec, is_slow_msgpack, yes, sysinfo, \
-    EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
+    EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR, log_multi
 from .logger import create_logger, setup_logging
 from .logger import create_logger, setup_logging
 logger = create_logger()
 logger = create_logger()
 from .compress import Compressor, COMPR_BUFFER
 from .compress import Compressor, COMPR_BUFFER
@@ -37,6 +37,8 @@ has_lchflags = hasattr(os, 'lchflags')
 # default umask, overriden by --umask, defaults to read/write only for owner
 # default umask, overriden by --umask, defaults to read/write only for owner
 UMASK_DEFAULT = 0o077
 UMASK_DEFAULT = 0o077
 
 
+DASHES = '-' * 78
+
 
 
 class ToggleAction(argparse.Action):
 class ToggleAction(argparse.Action):
     """argparse action to handle "toggle" flags easily
     """argparse action to handle "toggle" flags easily
@@ -187,12 +189,12 @@ class Archiver:
                 archive.stats.show_progress(final=True)
                 archive.stats.show_progress(final=True)
             if args.stats:
             if args.stats:
                 archive.end = datetime.now()
                 archive.end = datetime.now()
-                print('-' * 78)
-                print(str(archive))
-                print()
-                print(str(archive.stats))
-                print(str(cache))
-                print('-' * 78)
+                log_multi(DASHES,
+                          str(archive),
+                          DASHES,
+                          str(archive.stats),
+                          str(cache),
+                          DASHES)
         return self.exit_code
         return self.exit_code
 
 
     def _process(self, archive, cache, excludes, exclude_caches, exclude_if_present,
     def _process(self, archive, cache, excludes, exclude_caches, exclude_if_present,
@@ -339,9 +341,12 @@ class Archiver:
             manifest.write()
             manifest.write()
             repository.commit(save_space=args.save_space)
             repository.commit(save_space=args.save_space)
             cache.commit()
             cache.commit()
+            logger.info("Archive deleted.")
             if args.stats:
             if args.stats:
-                logger.info(stats.summary.format(label='Deleted data:', stats=stats))
-                logger.info(str(cache))
+                log_multi(DASHES,
+                          stats.summary.format(label='Deleted data:', stats=stats),
+                          str(cache),
+                          DASHES)
         else:
         else:
             if not args.cache_only:
             if not args.cache_only:
                 msg = []
                 msg = []
@@ -495,8 +500,10 @@ class Archiver:
             repository.commit(save_space=args.save_space)
             repository.commit(save_space=args.save_space)
             cache.commit()
             cache.commit()
         if args.stats:
         if args.stats:
-            logger.info(stats.summary.format(label='Deleted data:', stats=stats))
-            logger.info(str(cache))
+            log_multi(DASHES,
+                      stats.summary.format(label='Deleted data:', stats=stats),
+                      str(cache),
+                      DASHES)
         return self.exit_code
         return self.exit_code
 
 
     def do_upgrade(self, args):
     def do_upgrade(self, args):

+ 17 - 0
borg/helpers.py

@@ -18,6 +18,10 @@ import platform
 import time
 import time
 import unicodedata
 import unicodedata
 
 
+import logging
+from .logger import create_logger
+logger = create_logger()
+
 from datetime import datetime, timezone, timedelta
 from datetime import datetime, timezone, timedelta
 from fnmatch import translate
 from fnmatch import translate
 from operator import attrgetter
 from operator import attrgetter
@@ -971,3 +975,16 @@ def sysinfo():
     info.append('Python: %s %s' % (platform.python_implementation(), platform.python_version()))
     info.append('Python: %s %s' % (platform.python_implementation(), platform.python_version()))
     info.append('')
     info.append('')
     return '\n'.join(info)
     return '\n'.join(info)
+
+
+def log_multi(*msgs, level=logging.INFO):
+    """
+    log multiple lines of text, each line by a separate logging call for cosmetic reasons
+
+    each positional argument may be a single or multiple lines (separated by \n) of text.
+    """
+    lines = []
+    for msg in msgs:
+        lines.extend(msg.splitlines())
+    for line in lines:
+        logger.log(level, line)