Browse Source

Rework logging/verbosity system (#90)

Looks great, merged! Thanks again for all your hard work here.
floli 6 years ago
parent
commit
7252b8d614

+ 2 - 1
AUTHORS

@@ -1,11 +1,12 @@
 Dan Helfman <witten@torsion.org>: Main developer
 Dan Helfman <witten@torsion.org>: Main developer
 
 
 Alexander Görtz: Python 3 compatibility
 Alexander Görtz: Python 3 compatibility
+Florian Lindner: Logging rewrite
 Henning Schroeder: Copy editing
 Henning Schroeder: Copy editing
 Johannes Feichtner: Support for user hooks
 Johannes Feichtner: Support for user hooks
 Michele Lazzeri: Custom archive names
 Michele Lazzeri: Custom archive names
+Nick Whyte: Support prefix filtering for archive consistency checks
 newtonne: Read encryption password from external file
 newtonne: Read encryption password from external file
 Robin `ypid` Schneider: Support additional options of Borg
 Robin `ypid` Schneider: Support additional options of Borg
 Scott Squires: Custom archive names
 Scott Squires: Custom archive names
 Thomas LÉVEIL: Support for a keep_minutely prune option. Support for the --json option
 Thomas LÉVEIL: Support for a keep_minutely prune option. Support for the --json option
-Nick Whyte: Support prefix filtering for archive consistency checks

+ 2 - 0
NEWS

@@ -4,6 +4,8 @@
  * #88: Fix declared pykwalify compatibility version range in setup.py to prevent use of ancient
  * #88: Fix declared pykwalify compatibility version range in setup.py to prevent use of ancient
    versions of pykwalify with large version numbers.
    versions of pykwalify with large version numbers.
  * #89: Pass --show-rc option to Borg when at highest verbosity level.
  * #89: Pass --show-rc option to Borg when at highest verbosity level.
+ * #90: Rewrite of logging system. Now verbosity flags passed to borg are derived from borgmatic's
+   log level. Note that the output of borgmatic might slightly change.
 
 
 1.2.2
 1.2.2
  * #85: Fix compatibility issue between pykwalify and ruamel.yaml 0.15.52, which manifested in
  * #85: Fix compatibility issue between pykwalify and ruamel.yaml 0.15.52, which manifested in

+ 11 - 11
borgmatic/borg/check.py

@@ -3,7 +3,6 @@ import os
 import subprocess
 import subprocess
 
 
 from borgmatic.borg import extract
 from borgmatic.borg import extract
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
 
 
 
 
 DEFAULT_CHECKS = ('repository', 'archives')
 DEFAULT_CHECKS = ('repository', 'archives')
@@ -74,12 +73,10 @@ def _make_check_flags(checks, check_last=None, prefix=None):
     ) + last_flags + prefix_flags
     ) + last_flags + prefix_flags
 
 
 
 
-def check_archives(verbosity, repository, storage_config, consistency_config, local_path='borg',
-                   remote_path=None):
+def check_archives(repository, storage_config, consistency_config, local_path='borg', remote_path=None):
     '''
     '''
-    Given a verbosity flag, a local or remote repository path, a storage config dict, a consistency
-    config dict, and a local/remote commands to run, check the contained Borg archives for
-    consistency.
+    Given a local or remote repository path, a storage config dict, a consistency config dict, 
+    and a local/remote commands to run, check the contained Borg archives for consistency.
 
 
     If there are no consistency checks to run, skip running them.
     If there are no consistency checks to run, skip running them.
     '''
     '''
@@ -91,10 +88,13 @@ def check_archives(verbosity, repository, storage_config, consistency_config, lo
         remote_path_flags = ('--remote-path', remote_path) if remote_path else ()
         remote_path_flags = ('--remote-path', remote_path) if remote_path else ()
         lock_wait = storage_config.get('lock_wait', None)
         lock_wait = storage_config.get('lock_wait', None)
         lock_wait_flags = ('--lock-wait', str(lock_wait)) if lock_wait else ()
         lock_wait_flags = ('--lock-wait', str(lock_wait)) if lock_wait else ()
-        verbosity_flags = {
-            VERBOSITY_SOME: ('--info',),
-            VERBOSITY_LOTS: ('--debug', '--show-rc'),
-        }.get(verbosity, ())
+
+        verbosity_flags = ()
+        if logger.isEnabledFor(logging.INFO):
+            verbosity_flags = ('--info',)
+        if logger.isEnabledFor(logging.DEBUG):
+            verbosity_flags = ('--debug', '--show-rc')
+
         prefix = consistency_config.get('prefix')
         prefix = consistency_config.get('prefix')
 
 
         full_command = (
         full_command = (
@@ -109,4 +109,4 @@ def check_archives(verbosity, repository, storage_config, consistency_config, lo
         subprocess.check_call(full_command, stdout=stdout, stderr=subprocess.STDOUT)
         subprocess.check_call(full_command, stdout=stdout, stderr=subprocess.STDOUT)
 
 
     if 'extract' in checks:
     if 'extract' in checks:
-        extract.extract_last_archive_dry_run(verbosity, repository, lock_wait, local_path, remote_path)
+        extract.extract_last_archive_dry_run(repository, lock_wait, local_path, remote_path)

+ 5 - 7
borgmatic/borg/create.py

@@ -5,8 +5,6 @@ import os
 import subprocess
 import subprocess
 import tempfile
 import tempfile
 
 
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
-
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
@@ -105,7 +103,7 @@ def _make_exclude_flags(location_config, exclude_filename=None):
 
 
 
 
 def create_archive(
 def create_archive(
-    verbosity, dry_run, repository, location_config, storage_config, local_path='borg', remote_path=None,
+    dry_run, repository, location_config, storage_config, local_path='borg', remote_path=None,
 ):
 ):
     '''
     '''
     Given vebosity/dry-run flags, a local or remote repository path, a location config dict, and a
     Given vebosity/dry-run flags, a local or remote repository path, a location config dict, and a
@@ -150,10 +148,10 @@ def create_archive(
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--umask', str(umask)) if umask else ())
         + (('--umask', str(umask)) if umask else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
-        + {
-            VERBOSITY_SOME: ('--info',) if dry_run else ('--info', '--stats'),
-            VERBOSITY_LOTS: ('--debug', '--list', '--show-rc') if dry_run else ('--debug', '--list', '--show-rc', '--stats'),
-        }.get(verbosity, ())
+        + (('--list', '--filter', 'AME',) if logger.isEnabledFor(logging.INFO) else ())
+        + (( '--info',) if logger.getEffectiveLevel() == logging.INFO else ())
+        + (('--stats',) if not dry_run and logger.isEnabledFor(logging.INFO) else ())
+        + (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
         + (('--dry-run',) if dry_run else ())
         + (('--dry-run',) if dry_run else ())
     )
     )
 
 

+ 8 - 8
borgmatic/borg/extract.py

@@ -2,23 +2,23 @@ import logging
 import sys
 import sys
 import subprocess
 import subprocess
 
 
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
-
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
 
 
-def extract_last_archive_dry_run(verbosity, repository, lock_wait=None, local_path='borg', remote_path=None):
+def extract_last_archive_dry_run(repository, lock_wait=None, local_path='borg', remote_path=None):
     '''
     '''
     Perform an extraction dry-run of just the most recent archive. If there are no archives, skip
     Perform an extraction dry-run of just the most recent archive. If there are no archives, skip
     the dry-run.
     the dry-run.
     '''
     '''
     remote_path_flags = ('--remote-path', remote_path) if remote_path else ()
     remote_path_flags = ('--remote-path', remote_path) if remote_path else ()
     lock_wait_flags = ('--lock-wait', str(lock_wait)) if lock_wait else ()
     lock_wait_flags = ('--lock-wait', str(lock_wait)) if lock_wait else ()
-    verbosity_flags = {
-        VERBOSITY_SOME: ('--info',),
-        VERBOSITY_LOTS: ('--debug', '--show-rc'),
-    }.get(verbosity, ())
+    verbosity_flags = ()
+    if logger.isEnabledFor(logging.DEBUG):
+        verbosity_flags = ('--debug', '--show-rc')
+    elif logger.isEnabledFor(logging.INFO):
+        verbosity_flags = ('--info',)
+    
 
 
     full_list_command = (
     full_list_command = (
         local_path, 'list',
         local_path, 'list',
@@ -32,7 +32,7 @@ def extract_last_archive_dry_run(verbosity, repository, lock_wait=None, local_pa
     if not last_archive_name:
     if not last_archive_name:
         return
         return
 
 
-    list_flag = ('--list',) if verbosity == VERBOSITY_LOTS else ()
+    list_flag = ('--list',) if logger.isEnabledFor(logging.DEBUG) else ()
     full_extract_command = (
     full_extract_command = (
         local_path, 'extract',
         local_path, 'extract',
         '--dry-run',
         '--dry-run',

+ 4 - 10
borgmatic/borg/info.py

@@ -1,17 +1,13 @@
 import logging
 import logging
 import subprocess
 import subprocess
 
 
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
-
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
 
 
-def display_archives_info(
-    verbosity, repository, storage_config, local_path='borg', remote_path=None, json=False
-):
+def display_archives_info(repository, storage_config, local_path='borg', remote_path=None, json=False):
     '''
     '''
-    Given a verbosity flag, a local or remote repository path, and a storage config dict,
+    Given a local or remote repository path, and a storage config dict,
     display summary information for Borg archives in the repository.
     display summary information for Borg archives in the repository.
     '''
     '''
     lock_wait = storage_config.get('lock_wait', None)
     lock_wait = storage_config.get('lock_wait', None)
@@ -20,11 +16,9 @@ def display_archives_info(
         (local_path, 'info', repository)
         (local_path, 'info', repository)
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
+        + (('--info',)  if logger.getEffectiveLevel() == logging.INFO else ())
+        + (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
         + (('--json',) if json else ())
         + (('--json',) if json else ())
-        + {
-            VERBOSITY_SOME: ('--info',),
-            VERBOSITY_LOTS: ('--debug', '--show-rc'),
-        }.get(verbosity, ())
     )
     )
 
 
     logger.debug(' '.join(full_command))
     logger.debug(' '.join(full_command))

+ 4 - 11
borgmatic/borg/list.py

@@ -1,17 +1,13 @@
 import logging
 import logging
 import subprocess
 import subprocess
 
 
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
-
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
 
 
 
 
-def list_archives(
-    verbosity, repository, storage_config, local_path='borg', remote_path=None, json=False
-):
+def list_archives(repository, storage_config, local_path='borg', remote_path=None, json=False):
     '''
     '''
-    Given a verbosity flag, a local or remote repository path, and a storage config dict,
+    Given a local or remote repository path, and a storage config dict,
     list Borg archives in the repository.
     list Borg archives in the repository.
     '''
     '''
     lock_wait = storage_config.get('lock_wait', None)
     lock_wait = storage_config.get('lock_wait', None)
@@ -20,13 +16,10 @@ def list_archives(
         (local_path, 'list', repository)
         (local_path, 'list', repository)
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
+        + (('--info',)  if logger.getEffectiveLevel() == logging.INFO  else ())
+        + (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
         + (('--json',) if json else ())
         + (('--json',) if json else ())
-        + {
-            VERBOSITY_SOME: ('--info',),
-            VERBOSITY_LOTS: ('--debug', '--show-rc'),
-        }.get(verbosity, ())
     )
     )
-
     logger.debug(' '.join(full_command))
     logger.debug(' '.join(full_command))
 
 
     output = subprocess.check_output(full_command)
     output = subprocess.check_output(full_command)

+ 5 - 8
borgmatic/borg/prune.py

@@ -1,7 +1,6 @@
 import logging
 import logging
 import subprocess
 import subprocess
 
 
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
 
 
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -32,10 +31,9 @@ def _make_prune_flags(retention_config):
     )
     )
 
 
 
 
-def prune_archives(verbosity, dry_run, repository, storage_config, retention_config,
-                   local_path='borg', remote_path=None):
+def prune_archives(dry_run, repository, storage_config, retention_config, local_path='borg', remote_path=None):
     '''
     '''
-    Given verbosity/dry-run flags, a local or remote repository path, a storage config dict, and a
+    Given dry-run flag, a local or remote repository path, a storage config dict, and a
     retention config dict, prune Borg archives according to the retention policy specified in that
     retention config dict, prune Borg archives according to the retention policy specified in that
     configuration.
     configuration.
     '''
     '''
@@ -54,10 +52,9 @@ def prune_archives(verbosity, dry_run, repository, storage_config, retention_con
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--remote-path', remote_path) if remote_path else ())
         + (('--umask', str(umask)) if umask else ())
         + (('--umask', str(umask)) if umask else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
         + (('--lock-wait', str(lock_wait)) if lock_wait else ())
-        + {
-            VERBOSITY_SOME: ('--info', '--stats',),
-            VERBOSITY_LOTS: ('--debug', '--stats', '--list', '--show-rc'),
-        }.get(verbosity, ())
+        + (('--stats',) if not dry_run and logger.isEnabledFor(logging.INFO) else ())
+        + (( '--info',) if logger.getEffectiveLevel() == logging.INFO else ())
+        + (('--debug', '--list', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
         + (('--dry-run',) if dry_run else ())
         + (('--dry-run',) if dry_run else ())
     )
     )
 
 

+ 1 - 6
borgmatic/commands/borgmatic.py

@@ -10,7 +10,7 @@ from borgmatic.borg import check as borg_check, create as borg_create, prune as
 from borgmatic.commands import hook
 from borgmatic.commands import hook
 from borgmatic.config import collect, convert, validate
 from borgmatic.config import collect, convert, validate
 from borgmatic.signals import configure_signals
 from borgmatic.signals import configure_signals
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS, verbosity_to_log_level
+from borgmatic.verbosity import verbosity_to_log_level
 
 
 
 
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
@@ -165,7 +165,6 @@ def _run_commands_on_repository(
     if args.prune:
     if args.prune:
         logger.info('{}: Pruning archives{}'.format(repository, dry_run_label))
         logger.info('{}: Pruning archives{}'.format(repository, dry_run_label))
         borg_prune.prune_archives(
         borg_prune.prune_archives(
-            args.verbosity,
             args.dry_run,
             args.dry_run,
             repository,
             repository,
             storage,
             storage,
@@ -176,7 +175,6 @@ def _run_commands_on_repository(
     if args.create:
     if args.create:
         logger.info('{}: Creating archive{}'.format(repository, dry_run_label))
         logger.info('{}: Creating archive{}'.format(repository, dry_run_label))
         borg_create.create_archive(
         borg_create.create_archive(
-            args.verbosity,
             args.dry_run,
             args.dry_run,
             repository,
             repository,
             location,
             location,
@@ -187,7 +185,6 @@ def _run_commands_on_repository(
     if args.check:
     if args.check:
         logger.info('{}: Running consistency checks'.format(repository))
         logger.info('{}: Running consistency checks'.format(repository))
         borg_check.check_archives(
         borg_check.check_archives(
-            args.verbosity,
             repository,
             repository,
             storage,
             storage,
             consistency,
             consistency,
@@ -197,7 +194,6 @@ def _run_commands_on_repository(
     if args.list:
     if args.list:
         logger.info('{}: Listing archives'.format(repository))
         logger.info('{}: Listing archives'.format(repository))
         output = borg_list.list_archives(
         output = borg_list.list_archives(
-            args.verbosity,
             repository,
             repository,
             storage,
             storage,
             local_path=local_path,
             local_path=local_path,
@@ -211,7 +207,6 @@ def _run_commands_on_repository(
     if args.info:
     if args.info:
         logger.info('{}: Displaying summary info for archives'.format(repository))
         logger.info('{}: Displaying summary info for archives'.format(repository))
         output = borg_info.display_archives_info(
         output = borg_info.display_archives_info(
-            args.verbosity,
             repository,
             repository,
             storage,
             storage,
             local_path=local_path,
             local_path=local_path,

+ 6 - 14
borgmatic/tests/unit/borg/test_check.py

@@ -1,12 +1,11 @@
 from subprocess import STDOUT
 from subprocess import STDOUT
-import sys
+import logging, sys
 
 
 from flexmock import flexmock
 from flexmock import flexmock
 import pytest
 import pytest
 
 
 from borgmatic.borg import check as module
 from borgmatic.borg import check as module
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
-
+from borgmatic.tests.unit.test_verbosity import insert_logging_mock
 
 
 def insert_subprocess_mock(check_call_command, **kwargs):
 def insert_subprocess_mock(check_call_command, **kwargs):
     subprocess = flexmock(module.subprocess)
     subprocess = flexmock(module.subprocess)
@@ -125,7 +124,6 @@ def test_check_archives_calls_borg_with_parameters(checks):
     flexmock(module.os).should_receive('devnull')
     flexmock(module.os).should_receive('devnull')
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
@@ -142,43 +140,42 @@ def test_check_archives_with_extract_check_calls_extract_only():
     insert_subprocess_never()
     insert_subprocess_never()
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
     )
     )
 
 
 
 
-def test_check_archives_with_verbosity_some_calls_borg_with_info_parameter():
+def test_check_archives_with_log_info_calls_borg_with_info_parameter():
     checks = ('repository',)
     checks = ('repository',)
     consistency_config = {'check_last': None}
     consistency_config = {'check_last': None}
     flexmock(module).should_receive('_parse_checks').and_return(checks)
     flexmock(module).should_receive('_parse_checks').and_return(checks)
     flexmock(module).should_receive('_make_check_flags').and_return(())
     flexmock(module).should_receive('_make_check_flags').and_return(())
+    insert_logging_mock(logging.INFO)
     insert_subprocess_mock(
     insert_subprocess_mock(
         ('borg', 'check', 'repo', '--info'),
         ('borg', 'check', 'repo', '--info'),
         stdout=None, stderr=STDOUT,
         stdout=None, stderr=STDOUT,
     )
     )
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=VERBOSITY_SOME,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
     )
     )
 
 
 
 
-def test_check_archives_with_verbosity_lots_calls_borg_with_debug_parameter():
+def test_check_archives_with_log_debug_calls_borg_with_debug_parameter():
     checks = ('repository',)
     checks = ('repository',)
     consistency_config = {'check_last': None}
     consistency_config = {'check_last': None}
     flexmock(module).should_receive('_parse_checks').and_return(checks)
     flexmock(module).should_receive('_parse_checks').and_return(checks)
     flexmock(module).should_receive('_make_check_flags').and_return(())
     flexmock(module).should_receive('_make_check_flags').and_return(())
+    insert_logging_mock(logging.DEBUG)
     insert_subprocess_mock(
     insert_subprocess_mock(
         ('borg', 'check', 'repo', '--debug', '--show-rc'),
         ('borg', 'check', 'repo', '--debug', '--show-rc'),
         stdout=None, stderr=STDOUT,
         stdout=None, stderr=STDOUT,
     )
     )
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=VERBOSITY_LOTS,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
@@ -191,7 +188,6 @@ def test_check_archives_without_any_checks_bails():
     insert_subprocess_never()
     insert_subprocess_never()
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
@@ -213,7 +209,6 @@ def test_check_archives_with_local_path_calls_borg_via_local_path():
     flexmock(module.os).should_receive('devnull')
     flexmock(module.os).should_receive('devnull')
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
@@ -236,7 +231,6 @@ def test_check_archives_with_remote_path_calls_borg_with_remote_path_parameters(
     flexmock(module.os).should_receive('devnull')
     flexmock(module.os).should_receive('devnull')
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
@@ -259,7 +253,6 @@ def test_check_archives_with_lock_wait_calls_borg_with_lock_wait_parameters():
     flexmock(module.os).should_receive('devnull')
     flexmock(module.os).should_receive('devnull')
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={'lock_wait': 5},
         storage_config={'lock_wait': 5},
         consistency_config=consistency_config,
         consistency_config=consistency_config,
@@ -283,7 +276,6 @@ def test_check_archives_with_retention_prefix():
     flexmock(module.os).should_receive('devnull')
     flexmock(module.os).should_receive('devnull')
 
 
     module.check_archives(
     module.check_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         consistency_config=consistency_config,
         consistency_config=consistency_config,

+ 19 - 35
borgmatic/tests/unit/borg/test_create.py

@@ -1,9 +1,9 @@
-import os
+import logging, os
 
 
 from flexmock import flexmock
 from flexmock import flexmock
 
 
 from borgmatic.borg import create as module
 from borgmatic.borg import create as module
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
+from borgmatic.tests.unit.test_verbosity import insert_logging_mock
 
 
 
 
 def test_initialize_environment_with_passcommand_should_set_environment():
 def test_initialize_environment_with_passcommand_should_set_environment():
@@ -216,7 +216,6 @@ def test_create_archive_calls_borg_with_parameters():
     insert_subprocess_mock(CREATE_COMMAND)
     insert_subprocess_mock(CREATE_COMMAND)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -237,7 +236,6 @@ def test_create_archive_with_patterns_calls_borg_with_patterns():
     insert_subprocess_mock(CREATE_COMMAND + pattern_flags)
     insert_subprocess_mock(CREATE_COMMAND + pattern_flags)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -258,7 +256,6 @@ def test_create_archive_with_exclude_patterns_calls_borg_with_excludes():
     insert_subprocess_mock(CREATE_COMMAND + exclude_flags)
     insert_subprocess_mock(CREATE_COMMAND + exclude_flags)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -270,16 +267,16 @@ def test_create_archive_with_exclude_patterns_calls_borg_with_excludes():
     )
     )
 
 
 
 
-def test_create_archive_with_verbosity_some_calls_borg_with_info_parameter():
+def test_create_archive_with_log_info_calls_borg_with_info_parameter():
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
-    insert_subprocess_mock(CREATE_COMMAND + ('--info', '--stats',))
-
+    insert_subprocess_mock(CREATE_COMMAND + ('--list', '--filter', 'AME', '--info', '--stats',))
+    insert_logging_mock(logging.INFO)
+    
     module.create_archive(
     module.create_archive(
-        verbosity=VERBOSITY_SOME,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -291,15 +288,15 @@ def test_create_archive_with_verbosity_some_calls_borg_with_info_parameter():
     )
     )
 
 
 
 
-def test_create_archive_with_verbosity_lots_calls_borg_with_debug_parameter():
+def test_create_archive_with_log_debug_calls_borg_with_debug_parameter():
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
-    insert_subprocess_mock(CREATE_COMMAND + ('--debug', '--list', '--show-rc', '--stats'))
+    insert_subprocess_mock(CREATE_COMMAND + ('--list', '--filter', 'AME','--stats', '--debug', '--show-rc'))
+    insert_logging_mock(logging.DEBUG)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=VERBOSITY_LOTS,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -320,7 +317,6 @@ def test_create_archive_with_dry_run_calls_borg_with_dry_run_parameter():
     insert_subprocess_mock(CREATE_COMMAND + ('--dry-run',))
     insert_subprocess_mock(CREATE_COMMAND + ('--dry-run',))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=True,
         dry_run=True,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -332,16 +328,18 @@ def test_create_archive_with_dry_run_calls_borg_with_dry_run_parameter():
     )
     )
 
 
 
 
-def test_create_archive_with_dry_run_and_verbosity_some_calls_borg_without_stats_parameter():
+def test_create_archive_with_dry_run_and_log_info_calls_borg_without_stats_parameter():
+    """ --dry-run and --stats are mutually exclusive, see:
+    https://borgbackup.readthedocs.io/en/stable/usage/create.html#description """
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
-    insert_subprocess_mock(CREATE_COMMAND + ('--info', '--dry-run'))
+    insert_subprocess_mock(CREATE_COMMAND + ('--list', '--filter', 'AME', '--info', '--dry-run'))
+    insert_logging_mock(logging.INFO)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=VERBOSITY_SOME,
         dry_run=True,
         dry_run=True,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -353,16 +351,18 @@ def test_create_archive_with_dry_run_and_verbosity_some_calls_borg_without_stats
     )
     )
 
 
 
 
-def test_create_archive_with_dry_run_and_verbosity_lots_calls_borg_without_stats_parameter():
+def test_create_archive_with_dry_run_and_log_debug_calls_borg_without_stats_parameter():
+    """ --dry-run and --stats are mutually exclusive, see:
+    https://borgbackup.readthedocs.io/en/stable/usage/create.html#description """
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_expand_directories').and_return(('foo', 'bar')).and_return(())
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_write_pattern_file').and_return(None)
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_pattern_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
     flexmock(module).should_receive('_make_exclude_flags').and_return(())
-    insert_subprocess_mock(CREATE_COMMAND + ('--debug', '--list', '--show-rc', '--dry-run'))
+    insert_subprocess_mock(CREATE_COMMAND + ('--list', '--filter', 'AME', '--debug', '--show-rc', '--dry-run'))
+    insert_logging_mock(logging.DEBUG)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=VERBOSITY_LOTS,
         dry_run=True,
         dry_run=True,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -382,7 +382,6 @@ def test_create_archive_with_checkpoint_interval_calls_borg_with_checkpoint_inte
     insert_subprocess_mock(CREATE_COMMAND + ('--checkpoint-interval', '600'))
     insert_subprocess_mock(CREATE_COMMAND + ('--checkpoint-interval', '600'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -402,7 +401,6 @@ def test_create_archive_with_compression_calls_borg_with_compression_parameters(
     insert_subprocess_mock(CREATE_COMMAND + ('--compression', 'rle'))
     insert_subprocess_mock(CREATE_COMMAND + ('--compression', 'rle'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -422,7 +420,6 @@ def test_create_archive_with_remote_rate_limit_calls_borg_with_remote_ratelimit_
     insert_subprocess_mock(CREATE_COMMAND + ('--remote-ratelimit', '100'))
     insert_subprocess_mock(CREATE_COMMAND + ('--remote-ratelimit', '100'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -442,7 +439,6 @@ def test_create_archive_with_one_file_system_calls_borg_with_one_file_system_par
     insert_subprocess_mock(CREATE_COMMAND + ('--one-file-system',))
     insert_subprocess_mock(CREATE_COMMAND + ('--one-file-system',))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -463,7 +459,6 @@ def test_create_archive_with_bsd_flags_true_calls_borg_without_nobsdflags_parame
     insert_subprocess_mock(CREATE_COMMAND)
     insert_subprocess_mock(CREATE_COMMAND)
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -484,7 +479,6 @@ def test_create_archive_with_bsd_flags_false_calls_borg_with_nobsdflags_paramete
     insert_subprocess_mock(CREATE_COMMAND + ('--nobsdflags',))
     insert_subprocess_mock(CREATE_COMMAND + ('--nobsdflags',))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -505,7 +499,6 @@ def test_create_archive_with_files_cache_calls_borg_with_files_cache_parameters(
     insert_subprocess_mock(CREATE_COMMAND + ('--files-cache', 'ctime,size'))
     insert_subprocess_mock(CREATE_COMMAND + ('--files-cache', 'ctime,size'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -526,7 +519,6 @@ def test_create_archive_with_local_path_calls_borg_via_local_path():
     insert_subprocess_mock(('borg1',) + CREATE_COMMAND[1:])
     insert_subprocess_mock(('borg1',) + CREATE_COMMAND[1:])
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -547,7 +539,6 @@ def test_create_archive_with_remote_path_calls_borg_with_remote_path_parameters(
     insert_subprocess_mock(CREATE_COMMAND + ('--remote-path', 'borg1'))
     insert_subprocess_mock(CREATE_COMMAND + ('--remote-path', 'borg1'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -568,7 +559,6 @@ def test_create_archive_with_umask_calls_borg_with_umask_parameters():
     insert_subprocess_mock(CREATE_COMMAND + ('--umask', '740'))
     insert_subprocess_mock(CREATE_COMMAND + ('--umask', '740'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -588,7 +578,6 @@ def test_create_archive_with_lock_wait_calls_borg_with_lock_wait_parameters():
     insert_subprocess_mock(CREATE_COMMAND + ('--lock-wait', '5'))
     insert_subprocess_mock(CREATE_COMMAND + ('--lock-wait', '5'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -609,7 +598,6 @@ def test_create_archive_with_source_directories_glob_expands():
     flexmock(module.glob).should_receive('glob').with_args('foo*').and_return(['foo', 'food'])
     flexmock(module.glob).should_receive('glob').with_args('foo*').and_return(['foo', 'food'])
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -630,7 +618,6 @@ def test_create_archive_with_non_matching_source_directories_glob_passes_through
     flexmock(module.glob).should_receive('glob').with_args('foo*').and_return([])
     flexmock(module.glob).should_receive('glob').with_args('foo*').and_return([])
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -650,7 +637,6 @@ def test_create_archive_with_glob_calls_borg_with_expanded_directories():
     insert_subprocess_mock(('borg', 'create', 'repo::{}'.format(DEFAULT_ARCHIVE_NAME), 'foo', 'food'))
     insert_subprocess_mock(('borg', 'create', 'repo::{}'.format(DEFAULT_ARCHIVE_NAME), 'foo', 'food'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -670,7 +656,6 @@ def test_create_archive_with_archive_name_format_calls_borg_with_archive_name():
     insert_subprocess_mock(('borg', 'create', 'repo::ARCHIVE_NAME', 'foo', 'bar'))
     insert_subprocess_mock(('borg', 'create', 'repo::ARCHIVE_NAME', 'foo', 'bar'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={
@@ -692,7 +677,6 @@ def test_create_archive_with_archive_name_format_accepts_borg_placeholders():
     insert_subprocess_mock(('borg', 'create', 'repo::Documents_{hostname}-{now}', 'foo', 'bar'))
     insert_subprocess_mock(('borg', 'create', 'repo::Documents_{hostname}-{now}', 'foo', 'bar'))
 
 
     module.create_archive(
     module.create_archive(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         location_config={
         location_config={

+ 6 - 10
borgmatic/tests/unit/borg/test_extract.py

@@ -1,9 +1,10 @@
-import sys
+import logging, sys
 
 
 from flexmock import flexmock
 from flexmock import flexmock
 
 
 from borgmatic.borg import extract as module
 from borgmatic.borg import extract as module
 from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
 from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
+from borgmatic.tests.unit.test_verbosity import insert_logging_mock
 
 
 
 
 def insert_subprocess_mock(check_call_command, **kwargs):
 def insert_subprocess_mock(check_call_command, **kwargs):
@@ -32,7 +33,6 @@ def test_extract_last_archive_dry_run_should_call_borg_with_last_archive():
     )
     )
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=None,
         repository='repo',
         repository='repo',
         lock_wait=None,
         lock_wait=None,
     )
     )
@@ -47,13 +47,12 @@ def test_extract_last_archive_dry_run_without_any_archives_should_bail():
     insert_subprocess_never()
     insert_subprocess_never()
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=None,
         repository='repo',
         repository='repo',
         lock_wait=None,
         lock_wait=None,
     )
     )
 
 
 
 
-def test_extract_last_archive_dry_run_with_verbosity_some_should_call_borg_with_info_parameter():
+def test_extract_last_archive_dry_run_with_log_info_should_call_borg_with_info_parameter():
     flexmock(sys.stdout).encoding = 'utf-8'
     flexmock(sys.stdout).encoding = 'utf-8'
     insert_subprocess_check_output_mock(
     insert_subprocess_check_output_mock(
         ('borg', 'list', '--short', 'repo', '--info'),
         ('borg', 'list', '--short', 'repo', '--info'),
@@ -62,15 +61,15 @@ def test_extract_last_archive_dry_run_with_verbosity_some_should_call_borg_with_
     insert_subprocess_mock(
     insert_subprocess_mock(
         ('borg', 'extract', '--dry-run', 'repo::archive2', '--info'),
         ('borg', 'extract', '--dry-run', 'repo::archive2', '--info'),
     )
     )
+    insert_logging_mock(logging.INFO)
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=VERBOSITY_SOME,
         repository='repo',
         repository='repo',
         lock_wait=None,
         lock_wait=None,
     )
     )
 
 
 
 
-def test_extract_last_archive_dry_run_with_verbosity_lots_should_call_borg_with_debug_parameter():
+def test_extract_last_archive_dry_run_with_log_debug_should_call_borg_with_debug_parameter():
     flexmock(sys.stdout).encoding = 'utf-8'
     flexmock(sys.stdout).encoding = 'utf-8'
     insert_subprocess_check_output_mock(
     insert_subprocess_check_output_mock(
         ('borg', 'list', '--short', 'repo', '--debug', '--show-rc'),
         ('borg', 'list', '--short', 'repo', '--debug', '--show-rc'),
@@ -79,9 +78,9 @@ def test_extract_last_archive_dry_run_with_verbosity_lots_should_call_borg_with_
     insert_subprocess_mock(
     insert_subprocess_mock(
         ('borg', 'extract', '--dry-run', 'repo::archive2', '--debug', '--show-rc', '--list'),
         ('borg', 'extract', '--dry-run', 'repo::archive2', '--debug', '--show-rc', '--list'),
     )
     )
+    insert_logging_mock(logging.DEBUG)
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=VERBOSITY_LOTS,
         repository='repo',
         repository='repo',
         lock_wait=None,
         lock_wait=None,
     )
     )
@@ -98,7 +97,6 @@ def test_extract_last_archive_dry_run_should_call_borg_via_local_path():
     )
     )
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=None,
         repository='repo',
         repository='repo',
         lock_wait=None,
         lock_wait=None,
         local_path='borg1',
         local_path='borg1',
@@ -116,7 +114,6 @@ def test_extract_last_archive_dry_run_should_call_borg_with_remote_path_paramete
     )
     )
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=None,
         repository='repo',
         repository='repo',
         lock_wait=None,
         lock_wait=None,
         remote_path='borg1',
         remote_path='borg1',
@@ -134,7 +131,6 @@ def test_extract_last_archive_dry_run_should_call_borg_with_lock_wait_parameters
     )
     )
 
 
     module.extract_last_archive_dry_run(
     module.extract_last_archive_dry_run(
-        verbosity=None,
         repository='repo',
         repository='repo',
         lock_wait=5,
         lock_wait=5,
     )
     )

+ 6 - 11
borgmatic/tests/unit/borg/test_info.py

@@ -1,9 +1,10 @@
+import logging
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from flexmock import flexmock
 from flexmock import flexmock
 
 
 from borgmatic.borg import info as module
 from borgmatic.borg import info as module
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
+from borgmatic.tests.unit.test_verbosity import insert_logging_mock
 
 
 
 
 def insert_subprocess_mock(check_call_command, **kwargs):
 def insert_subprocess_mock(check_call_command, **kwargs):
@@ -18,29 +19,27 @@ def test_display_archives_info_calls_borg_with_parameters():
     insert_subprocess_mock(INFO_COMMAND)
     insert_subprocess_mock(INFO_COMMAND)
 
 
     module.display_archives_info(
     module.display_archives_info(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
     )
     )
 
 
 
 
-def test_display_archives_info_with_verbosity_some_calls_borg_with_info_parameter():
+def test_display_archives_info_with_log_info_calls_borg_with_info_parameter():
     insert_subprocess_mock(INFO_COMMAND + ('--info',))
     insert_subprocess_mock(INFO_COMMAND + ('--info',))
-
+    insert_logging_mock(logging.INFO)
     module.display_archives_info(
     module.display_archives_info(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=VERBOSITY_SOME,
     )
     )
 
 
 
 
-def test_display_archives_info_with_verbosity_lots_calls_borg_with_debug_parameter():
+def test_display_archives_info_with_log_debug_calls_borg_with_debug_parameter():
     insert_subprocess_mock(INFO_COMMAND + ('--debug', '--show-rc'))
     insert_subprocess_mock(INFO_COMMAND + ('--debug', '--show-rc'))
+    insert_logging_mock(logging.DEBUG)
 
 
     module.display_archives_info(
     module.display_archives_info(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=VERBOSITY_LOTS,
     )
     )
 
 
 
 
@@ -48,7 +47,6 @@ def test_display_archives_info_with_json_calls_borg_with_json_parameter():
     insert_subprocess_mock(INFO_COMMAND + ('--json',))
     insert_subprocess_mock(INFO_COMMAND + ('--json',))
 
 
     module.display_archives_info(
     module.display_archives_info(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         json=True,
         json=True,
@@ -59,7 +57,6 @@ def test_display_archives_info_with_local_path_calls_borg_via_local_path():
     insert_subprocess_mock(('borg1',) + INFO_COMMAND[1:])
     insert_subprocess_mock(('borg1',) + INFO_COMMAND[1:])
 
 
     module.display_archives_info(
     module.display_archives_info(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         local_path='borg1',
         local_path='borg1',
@@ -70,7 +67,6 @@ def test_display_archives_info_with_remote_path_calls_borg_with_remote_path_para
     insert_subprocess_mock(INFO_COMMAND + ('--remote-path', 'borg1'))
     insert_subprocess_mock(INFO_COMMAND + ('--remote-path', 'borg1'))
 
 
     module.display_archives_info(
     module.display_archives_info(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         remote_path='borg1',
         remote_path='borg1',
@@ -82,7 +78,6 @@ def test_display_archives_info_with_lock_wait_calls_borg_with_lock_wait_paramete
     insert_subprocess_mock(INFO_COMMAND + ('--lock-wait', '5'))
     insert_subprocess_mock(INFO_COMMAND + ('--lock-wait', '5'))
 
 
     module.display_archives_info(
     module.display_archives_info(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config=storage_config,
         storage_config=storage_config,
     )
     )

+ 6 - 10
borgmatic/tests/unit/borg/test_list.py

@@ -1,9 +1,10 @@
+import logging
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from flexmock import flexmock
 from flexmock import flexmock
 
 
 from borgmatic.borg import list as module
 from borgmatic.borg import list as module
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
+from borgmatic.tests.unit.test_verbosity import insert_logging_mock
 
 
 
 
 def insert_subprocess_mock(check_call_command, **kwargs):
 def insert_subprocess_mock(check_call_command, **kwargs):
@@ -18,29 +19,28 @@ def test_list_archives_calls_borg_with_parameters():
     insert_subprocess_mock(LIST_COMMAND)
     insert_subprocess_mock(LIST_COMMAND)
 
 
     module.list_archives(
     module.list_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
     )
     )
 
 
 
 
-def test_list_archives_with_verbosity_some_calls_borg_with_info_parameter():
+def test_list_archives_with_log_info_calls_borg_with_info_parameter():
     insert_subprocess_mock(LIST_COMMAND + ('--info',))
     insert_subprocess_mock(LIST_COMMAND + ('--info',))
+    insert_logging_mock(logging.INFO)
 
 
     module.list_archives(
     module.list_archives(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=VERBOSITY_SOME,
     )
     )
 
 
 
 
-def test_list_archives_with_verbosity_lots_calls_borg_with_debug_parameter():
+def test_list_archives_with_log_debug_calls_borg_with_debug_parameter():
     insert_subprocess_mock(LIST_COMMAND + ('--debug', '--show-rc'))
     insert_subprocess_mock(LIST_COMMAND + ('--debug', '--show-rc'))
+    insert_logging_mock(logging.DEBUG)
 
 
     module.list_archives(
     module.list_archives(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=VERBOSITY_LOTS,
     )
     )
 
 
 
 
@@ -48,7 +48,6 @@ def test_list_archives_with_json_calls_borg_with_json_parameter():
     insert_subprocess_mock(LIST_COMMAND + ('--json',))
     insert_subprocess_mock(LIST_COMMAND + ('--json',))
 
 
     module.list_archives(
     module.list_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         json=True,
         json=True,
@@ -59,7 +58,6 @@ def test_list_archives_with_local_path_calls_borg_via_local_path():
     insert_subprocess_mock(('borg1',) + LIST_COMMAND[1:])
     insert_subprocess_mock(('borg1',) + LIST_COMMAND[1:])
 
 
     module.list_archives(
     module.list_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         local_path='borg1',
         local_path='borg1',
@@ -70,7 +68,6 @@ def test_list_archives_with_remote_path_calls_borg_with_remote_path_parameters()
     insert_subprocess_mock(LIST_COMMAND + ('--remote-path', 'borg1'))
     insert_subprocess_mock(LIST_COMMAND + ('--remote-path', 'borg1'))
 
 
     module.list_archives(
     module.list_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
         remote_path='borg1',
         remote_path='borg1',
@@ -82,7 +79,6 @@ def test_list_archives_with_lock_wait_calls_borg_with_lock_wait_parameters():
     insert_subprocess_mock(LIST_COMMAND + ('--lock-wait', '5'))
     insert_subprocess_mock(LIST_COMMAND + ('--lock-wait', '5'))
 
 
     module.list_archives(
     module.list_archives(
-        verbosity=None,
         repository='repo',
         repository='repo',
         storage_config=storage_config,
         storage_config=storage_config,
     )
     )

+ 9 - 13
borgmatic/tests/unit/borg/test_prune.py

@@ -1,9 +1,10 @@
+import logging
 from collections import OrderedDict
 from collections import OrderedDict
 
 
 from flexmock import flexmock
 from flexmock import flexmock
 
 
 from borgmatic.borg import prune as module
 from borgmatic.borg import prune as module
-from borgmatic.verbosity import VERBOSITY_SOME, VERBOSITY_LOTS
+from borgmatic.tests.unit.test_verbosity import insert_logging_mock
 
 
 
 
 def insert_subprocess_mock(check_call_command, **kwargs):
 def insert_subprocess_mock(check_call_command, **kwargs):
@@ -11,6 +12,7 @@ def insert_subprocess_mock(check_call_command, **kwargs):
     subprocess.should_receive('check_call').with_args(check_call_command, **kwargs).once()
     subprocess.should_receive('check_call').with_args(check_call_command, **kwargs).once()
 
 
 
 
+
 BASE_PRUNE_FLAGS = (
 BASE_PRUNE_FLAGS = (
     ('--keep-daily', '1'),
     ('--keep-daily', '1'),
     ('--keep-weekly', '2'),
     ('--keep-weekly', '2'),
@@ -63,7 +65,6 @@ def test_prune_archives_calls_borg_with_parameters():
     insert_subprocess_mock(PRUNE_COMMAND)
     insert_subprocess_mock(PRUNE_COMMAND)
 
 
     module.prune_archives(
     module.prune_archives(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
@@ -71,33 +72,33 @@ def test_prune_archives_calls_borg_with_parameters():
     )
     )
 
 
 
 
-def test_prune_archives_with_verbosity_some_calls_borg_with_info_parameter():
+def test_prune_archives_with_log_info_calls_borg_with_info_parameter():
     retention_config = flexmock()
     retention_config = flexmock()
     flexmock(module).should_receive('_make_prune_flags').with_args(retention_config).and_return(
     flexmock(module).should_receive('_make_prune_flags').with_args(retention_config).and_return(
         BASE_PRUNE_FLAGS,
         BASE_PRUNE_FLAGS,
     )
     )
-    insert_subprocess_mock(PRUNE_COMMAND + ('--info', '--stats',))
+    insert_subprocess_mock(PRUNE_COMMAND + ('--stats', '--info',))
+    insert_logging_mock(logging.INFO)
 
 
     module.prune_archives(
     module.prune_archives(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=VERBOSITY_SOME,
         dry_run=False,
         dry_run=False,
         retention_config=retention_config,
         retention_config=retention_config,
     )
     )
 
 
 
 
-def test_prune_archives_with_verbosity_lots_calls_borg_with_debug_parameter():
+def test_prune_archives_with_log_debug_calls_borg_with_debug_parameter():
     retention_config = flexmock()
     retention_config = flexmock()
     flexmock(module).should_receive('_make_prune_flags').with_args(retention_config).and_return(
     flexmock(module).should_receive('_make_prune_flags').with_args(retention_config).and_return(
         BASE_PRUNE_FLAGS,
         BASE_PRUNE_FLAGS,
     )
     )
-    insert_subprocess_mock(PRUNE_COMMAND + ('--debug', '--stats', '--list', '--show-rc'))
+    insert_subprocess_mock(PRUNE_COMMAND + ('--stats', '--debug', '--list', '--show-rc'))
+    insert_logging_mock(logging.DEBUG)
 
 
     module.prune_archives(
     module.prune_archives(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=VERBOSITY_LOTS,
         dry_run=False,
         dry_run=False,
         retention_config=retention_config,
         retention_config=retention_config,
     )
     )
@@ -113,7 +114,6 @@ def test_prune_archives_with_dry_run_calls_borg_with_dry_run_parameter():
     module.prune_archives(
     module.prune_archives(
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
-        verbosity=None,
         dry_run=True,
         dry_run=True,
         retention_config=retention_config,
         retention_config=retention_config,
     )
     )
@@ -127,7 +127,6 @@ def test_prune_archives_with_local_path_calls_borg_via_local_path():
     insert_subprocess_mock(('borg1',) + PRUNE_COMMAND[1:])
     insert_subprocess_mock(('borg1',) + PRUNE_COMMAND[1:])
 
 
     module.prune_archives(
     module.prune_archives(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
@@ -144,7 +143,6 @@ def test_prune_archives_with_remote_path_calls_borg_with_remote_path_parameters(
     insert_subprocess_mock(PRUNE_COMMAND + ('--remote-path', 'borg1'))
     insert_subprocess_mock(PRUNE_COMMAND + ('--remote-path', 'borg1'))
 
 
     module.prune_archives(
     module.prune_archives(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         storage_config={},
         storage_config={},
@@ -162,7 +160,6 @@ def test_prune_archives_with_umask_calls_borg_with_umask_parameters():
     insert_subprocess_mock(PRUNE_COMMAND + ('--umask', '077'))
     insert_subprocess_mock(PRUNE_COMMAND + ('--umask', '077'))
 
 
     module.prune_archives(
     module.prune_archives(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         storage_config=storage_config,
         storage_config=storage_config,
@@ -179,7 +176,6 @@ def test_prune_archives_with_lock_wait_calls_borg_with_lock_wait_parameters():
     insert_subprocess_mock(PRUNE_COMMAND + ('--lock-wait', '5'))
     insert_subprocess_mock(PRUNE_COMMAND + ('--lock-wait', '5'))
 
 
     module.prune_archives(
     module.prune_archives(
-        verbosity=None,
         dry_run=False,
         dry_run=False,
         repository='repo',
         repository='repo',
         storage_config=storage_config,
         storage_config=storage_config,

+ 9 - 0
borgmatic/tests/unit/test_verbosity.py

@@ -1,10 +1,19 @@
 import logging
 import logging
 
 
+from flexmock import flexmock
+
 from borgmatic import verbosity as module
 from borgmatic import verbosity as module
 
 
+def insert_logging_mock(log_level):
+    """ Mocks the isEnabledFor from python logging. """
+    logging = flexmock(module.logging.Logger)
+    logging.should_receive('isEnabledFor').replace_with(lambda lvl : lvl >= log_level)
+    logging.should_receive('getEffectiveLevel').replace_with(lambda: log_level)
+
 
 
 def test_verbosity_to_log_level_maps_known_verbosity_to_log_level():
 def test_verbosity_to_log_level_maps_known_verbosity_to_log_level():
     assert module.verbosity_to_log_level(module.VERBOSITY_SOME) == logging.INFO
     assert module.verbosity_to_log_level(module.VERBOSITY_SOME) == logging.INFO
+    assert module.verbosity_to_log_level(module.VERBOSITY_LOTS) == logging.DEBUG
 
 
 
 
 def test_verbosity_to_log_level_maps_unknown_verbosity_to_warning_level():
 def test_verbosity_to_log_level_maps_unknown_verbosity_to_warning_level():