Source: borgmatic
Version: 1.5.12-1
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20210120 ftbfs-bullseye

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_clean
> rm -rf borgmatic.egg-info
> for man in borgmatic generate-borgmatic-config upgrade-borgmatic-config 
> validate-borgmatic-config ; do \
>       [ ! -f debian/$man.1 ] || rm debian/$man.1 ; \
> done
> make[1]: Leaving directory '/<<PKGBUILDDIR>>'
>  dpkg-source -b .
> dpkg-source: info: using source format '3.0 (quilt)'
> dpkg-source: info: building borgmatic using existing 
> ./borgmatic_1.5.12.orig.tar.gz
> dpkg-source: info: using patch list from debian/patches/series
> dpkg-source: info: building borgmatic in borgmatic_1.5.12-1.debian.tar.xz
> dpkg-source: info: building borgmatic in borgmatic_1.5.12-1.dsc
>  debian/rules binary
> dh binary --with python3 --buildsystem=pybuild
>    dh_update_autotools_config -O--buildsystem=pybuild
>    dh_autoreconf -O--buildsystem=pybuild
>    dh_auto_configure -O--buildsystem=pybuild
> I: pybuild base:232: python3.9 setup.py config 
> running config
>    dh_auto_build -O--buildsystem=pybuild
> I: pybuild base:232: /usr/bin/python3 setup.py build 
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic
> copying borgmatic/execute.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic
> copying borgmatic/__init__.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic
> copying borgmatic/verbosity.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic
> copying borgmatic/logger.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic
> copying borgmatic/signals.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/healthchecks.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/__init__.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/cronitor.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/command.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/dispatch.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/postgresql.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/monitor.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/cronhub.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/mysql.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/pagerduty.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> copying borgmatic/hooks/dump.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/hooks
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/validate.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/convert.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/__init__.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/override.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/load.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/legacy.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/normalize.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/collect.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/generate.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> copying borgmatic/config/checks.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> copying borgmatic/commands/__init__.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> copying borgmatic/commands/borgmatic.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> copying borgmatic/commands/generate_config.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> copying borgmatic/commands/arguments.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> copying borgmatic/commands/validate_config.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> copying borgmatic/commands/convert_config.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/commands
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/prune.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/umount.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/mount.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/__init__.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/flags.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/environment.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/check.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/create.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/list.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/info.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/init.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/export_tar.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> copying borgmatic/borg/extract.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/borg
> running egg_info
> creating borgmatic.egg-info
> writing borgmatic.egg-info/PKG-INFO
> writing dependency_links to borgmatic.egg-info/dependency_links.txt
> writing entry points to borgmatic.egg-info/entry_points.txt
> writing requirements to borgmatic.egg-info/requires.txt
> writing top-level names to borgmatic.egg-info/top_level.txt
> writing manifest file 'borgmatic.egg-info/SOURCES.txt'
> reading manifest file 'borgmatic.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> writing manifest file 'borgmatic.egg-info/SOURCES.txt'
> copying borgmatic/config/schema.yaml -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/borgmatic/config
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:232: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; 
> python3.9 -m pytest --ignore=tests/end-to-end --ignore=tests/integration
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.9.1+, pytest-6.0.2, py-1.10.0, pluggy-0.13.0
> rootdir: /<<PKGBUILDDIR>>, configfile: setup.cfg
> collected 540 items
> 
> tests/unit/test_execute.py .....................................         [  
> 6%]
> tests/unit/test_logger.py ......................................         [ 
> 13%]
> tests/unit/test_verbosity.py ..                                          [ 
> 14%]
> tests/unit/borg/test_check.py ......................................     [ 
> 21%]
> tests/unit/borg/test_create.py ......................................... [ 
> 28%]
> ..............................................                           [ 
> 37%]
> tests/unit/borg/test_environment.py .......                              [ 
> 38%]
> tests/unit/borg/test_export_tar.py .............                         [ 
> 41%]
> tests/unit/borg/test_extract.py .....................                    [ 
> 45%]
> tests/unit/borg/test_flags.py ........                                   [ 
> 46%]
> tests/unit/borg/test_info.py ...............                             [ 
> 49%]
> tests/unit/borg/test_init.py ...........                                 [ 
> 51%]
> tests/unit/borg/test_list.py ..............................              [ 
> 56%]
> tests/unit/borg/test_mount.py .........                                  [ 
> 58%]
> tests/unit/borg/test_prune.py .................                          [ 
> 61%]
> tests/unit/borg/test_umount.py ...                                       [ 
> 62%]
> tests/unit/commands/test_arguments.py ........                           [ 
> 63%]
> tests/unit/commands/test_borgmatic.py .................................. [ 
> 70%]
> ....F                                                                    [ 
> 70%]
> tests/unit/config/test_checks.py ...                                     [ 
> 71%]
> tests/unit/config/test_collect.py ............                           [ 
> 73%]
> tests/unit/config/test_convert.py .......                                [ 
> 75%]
> tests/unit/config/test_generate.py .........                             [ 
> 76%]
> tests/unit/config/test_legacy.py .............                           [ 
> 79%]
> tests/unit/config/test_normalize.py ....                                 [ 
> 79%]
> tests/unit/config/test_override.py ..........                            [ 
> 81%]
> tests/unit/config/test_validate.py ..................                    [ 
> 85%]
> tests/unit/hooks/test_command.py ............                            [ 
> 87%]
> tests/unit/hooks/test_cronhub.py .....                                   [ 
> 88%]
> tests/unit/hooks/test_cronitor.py ....                                   [ 
> 88%]
> tests/unit/hooks/test_dispatch.py ......                                 [ 
> 90%]
> tests/unit/hooks/test_dump.py ...........                                [ 
> 92%]
> tests/unit/hooks/test_healthchecks.py ..FFF.....                         [ 
> 93%]
> tests/unit/hooks/test_mysql.py ..............                            [ 
> 96%]
> tests/unit/hooks/test_pagerduty.py ....                                  [ 
> 97%]
> tests/unit/hooks/test_postgresql.py ...............                      
> [100%]
> 
> =================================== FAILURES 
> ===================================
> ___ test_collect_configuration_run_summary_logs_outputs_merged_json_results 
> ____
> 
>     def 
> test_collect_configuration_run_summary_logs_outputs_merged_json_results():
>         
> flexmock(module).should_receive('run_configuration').and_return(['foo', 
> 'bar']).and_return(
>             ['baz']
>         )
> >       
> > flexmock(module.sys.stdout).should_receive('write').with_args('["foo", 
> > "bar", "baz"]').once()
> 
> tests/unit/commands/test_borgmatic.py:450: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/flexmock.py:391: in with_args
>     self._verify_signature_match(*kargs, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <flexmock.Expectation object at 0x7f3ff2c18160>
> kargs = ('["foo", "bar", "baz"]',), kwargs = {}, is_method = False, args_len 
> = 2
> minimum = 2, maximum = 2, total_positional = 1, named_optionals = []
> 
>     def _verify_signature_match(self, *kargs, **kwargs):
>         if isinstance(self._mock, Mock):
>             return  # no sense in enforcing this for fake objects
>         allowed = self.argspec
>         # we consider object a method for purposes or not counting 
> "self"/"cls" as argument if:
>         #  - one of inspect.ismethod, inspect.isfunction, _isclass return True
>         #    (in Python 3 it's sometimes impossible to tell whether callable 
> is method or not,
>         #     so we try both inspect.ismethod and inspect.isfunction; classes 
> are callable too -
>         #     they have __init__)
>         #  - it's not a static method
>         #  - the mocked object is a module - module "methods" are in fact 
> plain functions;
>         #    unless they're classes, which means they still have __init__
>         is_method = ((inspect.ismethod(self.original) or 
> inspect.isfunction(self.original)
>                       or _isclass(self.original)) and
>                      self.method_type is not staticmethod and
>                      (not isinstance(self._mock, types.ModuleType) or
>                       _isclass(self.original)))
>         args_len = len(allowed.args)
>         if is_method:
>             args_len -= 1
>         minimum = args_len - (allowed.defaults and len(allowed.defaults) or 0)
>         maximum = None
>         if allowed.varargs is None and allowed.keywords is None:
>             maximum = args_len
>         total_positional = len(
>             kargs + tuple(a for a in kwargs if a in allowed.args))
>         named_optionals = [a for a in kwargs
>                            if allowed.defaults
>                            if a in allowed.args[len(allowed.args) - 
> len(allowed.defaults):]]
>         if allowed.defaults and total_positional == minimum and 
> named_optionals:
>             minimum += len(named_optionals)
>         if total_positional < minimum:
> >           raise MethodSignatureError(
>                 '%s requires at least %s arguments, expectation provided %s' %
>                 (self.name, minimum, total_positional))
> E           flexmock.MethodSignatureError: write requires at least 2 
> arguments, expectation provided 1
> 
> /usr/lib/python3/dist-packages/flexmock.py:278: MethodSignatureError
> __________ test_format_buffered_logs_for_payload_flattens_log_buffer 
> ___________
> 
> self = <_pytest.logging.LoggingPlugin object at 0x7f3ff3aa7970>
> item = <Function test_format_buffered_logs_for_payload_flattens_log_buffer>
> when = 'call'
> 
>     def _runtest_for(self, item: nodes.Item, when: str) -> Generator[None, 
> None, None]:
>         """Implements the internals of pytest_runtest_xxx() hook."""
>         with catching_logs(
>             self.caplog_handler, level=self.log_level,
>         ) as caplog_handler, catching_logs(
>             self.report_handler, level=self.log_level,
>         ) as report_handler:
>             caplog_handler.reset()
>             report_handler.reset()
>             item._store[caplog_records_key][when] = caplog_handler.records
>             item._store[caplog_handler_key] = caplog_handler
>     
>             yield
>     
>             log = report_handler.stream.getvalue().strip()
> >           item.add_report_section(when, "log", log)
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:694: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <_pytest.logging.catching_logs object at 0x7f3ff2a01040>, type = None
> value = None, traceback = None
> 
>     def __exit__(self, type, value, traceback):
>         root_logger = logging.getLogger()
>         if self.level is not None:
>             root_logger.setLevel(self.orig_level)
> >       root_logger.removeHandler(self.handler)
> E       AttributeError: 'MockClass' object has no attribute 'removeHandler'
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:310: AttributeError
> 
> During handling of the above exception, another exception occurred:
> 
> cls = <class '_pytest.runner.CallInfo'>
> func = <function call_runtest_hook.<locals>.<lambda> at 0x7f3ff293e8b0>
> when = 'call'
> reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
> 
>     @classmethod
>     def from_call(
>         cls,
>         func: "Callable[[], _T]",
>         when: "Literal['collect', 'setup', 'call', 'teardown']",
>         reraise: "Optional[Union[Type[BaseException], 
> Tuple[Type[BaseException], ...]]]" = None,
>     ) -> "CallInfo[_T]":
>         excinfo = None
>         start = timing.time()
>         precise_start = timing.perf_counter()
>         try:
> >           result = func()  # type: Optional[_T]
> 
> /usr/lib/python3/dist-packages/_pytest/runner.py:294: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/_pytest/runner.py:247: in <lambda>
>     lambda: ihook(item=item, **kwds), when=when, reraise=reraise
> /usr/lib/python3/dist-packages/pluggy/hooks.py:286: in __call__
>     return self._hookexec(self, self.get_hookimpls(), kwargs)
> /usr/lib/python3/dist-packages/pluggy/manager.py:92: in _hookexec
>     return self._inner_hookexec(hook, methods, kwargs)
> /usr/lib/python3/dist-packages/pluggy/manager.py:83: in <lambda>
>     self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
> /usr/lib/python3/dist-packages/_pytest/logging.py:708: in pytest_runtest_call
>     yield from self._runtest_for(item, "call")
> /usr/lib/python3/dist-packages/_pytest/logging.py:694: in _runtest_for
>     item.add_report_section(when, "log", log)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <_pytest.logging.catching_logs object at 0x7f3ff29f68c0>
> type = <class 'AttributeError'>
> value = AttributeError("'MockClass' object has no attribute 'removeHandler'")
> traceback = <traceback object at 0x7f3ff2a011c0>
> 
>     def __exit__(self, type, value, traceback):
>         root_logger = logging.getLogger()
>         if self.level is not None:
>             root_logger.setLevel(self.orig_level)
> >       root_logger.removeHandler(self.handler)
> E       AttributeError: 'MockClass' object has no attribute 'removeHandler'
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:310: AttributeError
> _ 
> test_format_buffered_logs_for_payload_inserts_truncation_indicator_when_logs_forgotten
>  _
> 
> self = <_pytest.logging.LoggingPlugin object at 0x7f3ff3aa7970>
> item = <Function 
> test_format_buffered_logs_for_payload_inserts_truncation_indicator_when_logs_forgotten>
> when = 'call'
> 
>     def _runtest_for(self, item: nodes.Item, when: str) -> Generator[None, 
> None, None]:
>         """Implements the internals of pytest_runtest_xxx() hook."""
>         with catching_logs(
>             self.caplog_handler, level=self.log_level,
>         ) as caplog_handler, catching_logs(
>             self.report_handler, level=self.log_level,
>         ) as report_handler:
>             caplog_handler.reset()
>             report_handler.reset()
>             item._store[caplog_records_key][when] = caplog_handler.records
>             item._store[caplog_handler_key] = caplog_handler
>     
>             yield
>     
>             log = report_handler.stream.getvalue().strip()
> >           item.add_report_section(when, "log", log)
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:694: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <_pytest.logging.catching_logs object at 0x7f3ff2b0de40>, type = None
> value = None, traceback = None
> 
>     def __exit__(self, type, value, traceback):
>         root_logger = logging.getLogger()
>         if self.level is not None:
>             root_logger.setLevel(self.orig_level)
> >       root_logger.removeHandler(self.handler)
> E       AttributeError: 'MockClass' object has no attribute 'removeHandler'
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:310: AttributeError
> 
> During handling of the above exception, another exception occurred:
> 
> cls = <class '_pytest.runner.CallInfo'>
> func = <function call_runtest_hook.<locals>.<lambda> at 0x7f3ff293ec10>
> when = 'call'
> reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
> 
>     @classmethod
>     def from_call(
>         cls,
>         func: "Callable[[], _T]",
>         when: "Literal['collect', 'setup', 'call', 'teardown']",
>         reraise: "Optional[Union[Type[BaseException], 
> Tuple[Type[BaseException], ...]]]" = None,
>     ) -> "CallInfo[_T]":
>         excinfo = None
>         start = timing.time()
>         precise_start = timing.perf_counter()
>         try:
> >           result = func()  # type: Optional[_T]
> 
> /usr/lib/python3/dist-packages/_pytest/runner.py:294: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/_pytest/runner.py:247: in <lambda>
>     lambda: ihook(item=item, **kwds), when=when, reraise=reraise
> /usr/lib/python3/dist-packages/pluggy/hooks.py:286: in __call__
>     return self._hookexec(self, self.get_hookimpls(), kwargs)
> /usr/lib/python3/dist-packages/pluggy/manager.py:92: in _hookexec
>     return self._inner_hookexec(hook, methods, kwargs)
> /usr/lib/python3/dist-packages/pluggy/manager.py:83: in <lambda>
>     self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
> /usr/lib/python3/dist-packages/_pytest/logging.py:708: in pytest_runtest_call
>     yield from self._runtest_for(item, "call")
> /usr/lib/python3/dist-packages/_pytest/logging.py:694: in _runtest_for
>     item.add_report_section(when, "log", log)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <_pytest.logging.catching_logs object at 0x7f3ff2b0dec0>
> type = <class 'AttributeError'>
> value = AttributeError("'MockClass' object has no attribute 'removeHandler'")
> traceback = <traceback object at 0x7f3ff2921a80>
> 
>     def __exit__(self, type, value, traceback):
>         root_logger = logging.getLogger()
>         if self.level is not None:
>             root_logger.setLevel(self.orig_level)
> >       root_logger.removeHandler(self.handler)
> E       AttributeError: 'MockClass' object has no attribute 'removeHandler'
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:310: AttributeError
> _ 
> test_format_buffered_logs_for_payload_without_handler_produces_empty_payload _
> 
> self = <_pytest.logging.LoggingPlugin object at 0x7f3ff3aa7970>
> item = <Function 
> test_format_buffered_logs_for_payload_without_handler_produces_empty_payload>
> when = 'call'
> 
>     def _runtest_for(self, item: nodes.Item, when: str) -> Generator[None, 
> None, None]:
>         """Implements the internals of pytest_runtest_xxx() hook."""
>         with catching_logs(
>             self.caplog_handler, level=self.log_level,
>         ) as caplog_handler, catching_logs(
>             self.report_handler, level=self.log_level,
>         ) as report_handler:
>             caplog_handler.reset()
>             report_handler.reset()
>             item._store[caplog_records_key][when] = caplog_handler.records
>             item._store[caplog_handler_key] = caplog_handler
>     
>             yield
>     
>             log = report_handler.stream.getvalue().strip()
> >           item.add_report_section(when, "log", log)
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:694: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <_pytest.logging.catching_logs object at 0x7f3ff2b063c0>, type = None
> value = None, traceback = None
> 
>     def __exit__(self, type, value, traceback):
>         root_logger = logging.getLogger()
>         if self.level is not None:
>             root_logger.setLevel(self.orig_level)
> >       root_logger.removeHandler(self.handler)
> E       AttributeError: 'MockClass' object has no attribute 'removeHandler'
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:310: AttributeError
> 
> During handling of the above exception, another exception occurred:
> 
> cls = <class '_pytest.runner.CallInfo'>
> func = <function call_runtest_hook.<locals>.<lambda> at 0x7f3ff293e820>
> when = 'call'
> reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
> 
>     @classmethod
>     def from_call(
>         cls,
>         func: "Callable[[], _T]",
>         when: "Literal['collect', 'setup', 'call', 'teardown']",
>         reraise: "Optional[Union[Type[BaseException], 
> Tuple[Type[BaseException], ...]]]" = None,
>     ) -> "CallInfo[_T]":
>         excinfo = None
>         start = timing.time()
>         precise_start = timing.perf_counter()
>         try:
> >           result = func()  # type: Optional[_T]
> 
> /usr/lib/python3/dist-packages/_pytest/runner.py:294: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> /usr/lib/python3/dist-packages/_pytest/runner.py:247: in <lambda>
>     lambda: ihook(item=item, **kwds), when=when, reraise=reraise
> /usr/lib/python3/dist-packages/pluggy/hooks.py:286: in __call__
>     return self._hookexec(self, self.get_hookimpls(), kwargs)
> /usr/lib/python3/dist-packages/pluggy/manager.py:92: in _hookexec
>     return self._inner_hookexec(hook, methods, kwargs)
> /usr/lib/python3/dist-packages/pluggy/manager.py:83: in <lambda>
>     self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
> /usr/lib/python3/dist-packages/_pytest/logging.py:708: in pytest_runtest_call
>     yield from self._runtest_for(item, "call")
> /usr/lib/python3/dist-packages/_pytest/logging.py:694: in _runtest_for
>     item.add_report_section(when, "log", log)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> self = <_pytest.logging.catching_logs object at 0x7f3ff2b06600>
> type = <class 'AttributeError'>
> value = AttributeError("'MockClass' object has no attribute 'removeHandler'")
> traceback = <traceback object at 0x7f3ff29bbe00>
> 
>     def __exit__(self, type, value, traceback):
>         root_logger = logging.getLogger()
>         if self.level is not None:
>             root_logger.setLevel(self.orig_level)
> >       root_logger.removeHandler(self.handler)
> E       AttributeError: 'MockClass' object has no attribute 'removeHandler'
> 
> /usr/lib/python3/dist-packages/_pytest/logging.py:310: AttributeError
> =========================== short test summary info 
> ============================
> FAILED 
> tests/unit/commands/test_borgmatic.py::test_collect_configuration_run_summary_logs_outputs_merged_json_results
> FAILED 
> tests/unit/hooks/test_healthchecks.py::test_format_buffered_logs_for_payload_flattens_log_buffer
> FAILED 
> tests/unit/hooks/test_healthchecks.py::test_format_buffered_logs_for_payload_inserts_truncation_indicator_when_logs_forgotten
> FAILED 
> tests/unit/hooks/test_healthchecks.py::test_format_buffered_logs_for_payload_without_handler_produces_empty_payload
> ======================== 4 failed, 536 passed in 1.22s 
> =========================
> E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; python3.9 -m pytest 
> --ignore=tests/end-to-end --ignore=tests/integration
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 
> returned exit code 13

The full build log is available from:
   http://qa-logs.debian.net/2021/01/20/borgmatic_1.5.12-1_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please marking it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with me
so that we can identify if something relevant changed in the meantime.

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.

Reply via email to