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.