[Debian-med-packaging] Bug#1042334: heudiconv: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13

Lucas Nussbaum lucas at debian.org
Wed Jul 26 21:06:34 BST 2023


Source: heudiconv
Version: 0.11.6-1
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-20230726 ftbfs-trixie

Hi,

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


Relevant part (hopefully):
>  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
> 	pybuild --configure -i python{version} -p 3.11
> I: pybuild base:240: python3.11 setup.py config 
> running config
>    dh_auto_build -O--buildsystem=pybuild
> 	pybuild --build -i python{version} -p 3.11
> I: pybuild base:240: /usr/bin/python3 setup.py build 
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/_version.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/dicoms.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/due.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/queue.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/convert.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/info.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/parser.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/main.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> copying heudiconv/bids.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/banda-bids.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/bids_with_ses.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/bids_PhoenixReport.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/reproin.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/convertall.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/bids_ME.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/studyforrest_phase2.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/test_b0dwi_for_fmap.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/multires_7Tbold.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/test_reproin.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/example.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/cmrr_heuristic.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> copying heudiconv/heuristics/uc_bids.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/heuristics
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_dicoms.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/anonymize_script.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_monitor.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_bids.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_main.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_queue.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_regression.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_heuristics.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_convert.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_utils.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> copying heudiconv/tests/test_tarballs.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external
> copying heudiconv/external/dlad.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external
> copying heudiconv/external/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external
> copying heudiconv/external/pydicom.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external
> copying heudiconv/external/dcmstack.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/cli
> copying heudiconv/cli/run.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/cli
> copying heudiconv/cli/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/cli
> copying heudiconv/cli/monitor.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/cli
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external/tests
> copying heudiconv/external/tests/test_dlad.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external/tests
> copying heudiconv/external/tests/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/external/tests
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data
> copying heudiconv/tests/data/axasc35.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data
> copying heudiconv/tests/data/phantom.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/01-fmap_acq-3mm
> copying heudiconv/tests/data/01-fmap_acq-3mm/1.3.12.2.1107.5.2.43.66112.2016101409263663466202201.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/01-fmap_acq-3mm
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/b0dwiForFmap
> copying heudiconv/tests/data/b0dwiForFmap/b0dwi_for_fmap+00002.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/b0dwiForFmap
> copying heudiconv/tests/data/b0dwiForFmap/b0dwi_for_fmap+00003.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/b0dwiForFmap
> copying heudiconv/tests/data/b0dwiForFmap/b0dwi_for_fmap+00001.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/b0dwiForFmap
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/01-anat-scout
> copying heudiconv/tests/data/01-anat-scout/0001.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/01-anat-scout
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/Phoenix
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/Phoenix/01+AA
> copying heudiconv/tests/data/Phoenix/01+AA/01+AA+00001.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/Phoenix/01+AA
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/Phoenix/99+PhoenixDocument
> copying heudiconv/tests/data/Phoenix/99+PhoenixDocument/99+PhoenixDocument+00001.dcm -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data/Phoenix/99+PhoenixDocument
> copying heudiconv/tests/data/sample_nifti_params.txt -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data
> copying heudiconv/tests/data/sample_nifti.nii.gz -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/data
>    dh_auto_test -O--buildsystem=pybuild
> 	pybuild --test --test-pytest -i python{version} -p 3.11
> I: pybuild pybuild:307: cp -a heudiconv/tests /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/
> I: pybuild base:240: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build; python3.11 -m pytest 
> ============================= test session starts ==============================
> platform linux -- Python 3.11.4, pytest-7.4.0, pluggy-1.2.0
> rootdir: /<<PKGBUILDDIR>>
> collected 99 items / 1 skipped
> 
> heudiconv/external/tests/test_dlad.py .                                  [  1%]
> heudiconv/heuristics/test_reproin.py ........                            [  9%]
> heudiconv/tests/test_bids.py ..................................s         [ 44%]
> heudiconv/tests/test_convert.py ..........                               [ 54%]
> heudiconv/tests/test_dicoms.py ...                                       [ 57%]
> heudiconv/tests/test_heuristics.py ...........                           [ 68%]
> heudiconv/tests/test_main.py .....F........                              [ 82%]
> heudiconv/tests/test_queue.py ...                                        [ 85%]
> heudiconv/tests/test_regression.py sss.                                  [ 89%]
> heudiconv/tests/test_tarballs.py .                                       [ 90%]
> heudiconv/tests/test_utils.py .........                                  [100%]
> 
> =================================== FAILURES ===================================
> ___________________________ test_prepare_for_datalad ___________________________
> 
> tmpdir = local('/tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0')
> 
>     def test_prepare_for_datalad(tmpdir):
>         pytest.importorskip("datalad", minversion=MIN_VERSION)
>         studydir = tmpdir.join("PI").join("study")
>         studydir_ = str(studydir)
>         os.makedirs(studydir_)
>         populate_bids_templates(studydir_)
>     
>         add_to_datalad(str(tmpdir), studydir_, None, False)
>     
>         from datalad.api import Dataset
>         superds = Dataset(str(tmpdir))
>     
>         assert superds.is_installed()
>         assert not superds.repo.dirty
>         subdss = superds.subdatasets(recursive=True, result_xfm='relpaths')
>         for ds_path in sorted(subdss):
>             ds = Dataset(opj(superds.path, ds_path))
>             assert ds.is_installed()
>             assert not ds.repo.dirty
>     
>         # the last one should have been the study
>         target_files = {
>             '.gitattributes',
>             '.datalad/config', '.datalad/.gitattributes',
>             'dataset_description.json',
>             'scans.json',
>             'CHANGES', 'README'}
>         assert set(ds.repo.get_indexed_files()) == target_files
>         # and all are under git
>         for f in target_files:
> >           assert not ds.repo.is_under_annex(f)
> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_main.py:142: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3/dist-packages/datalad/support/gitrepo.py:322: in _wrap_normalize_paths
>     result = func(self, files_new, *args, **kwargs)
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:1991: in is_under_annex
>     return self._check_files(check, files, batch)
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:1936: in _check_files
>     annex_res = fn(files, normalize_paths=False, batch=batch)
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:1988: in check
>     return self.info([f for f in files if not isdir(f)],
> /usr/lib/python3/dist-packages/datalad/support/gitrepo.py:322: in _wrap_normalize_paths
>     result = func(self, files_new, *args, **kwargs)
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:2502: in info
>     json_objects = self._call_annex_records(
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:1077: in _call_annex_records
>     raise e
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:1041: in _call_annex_records
>     out = self._call_annex(
> /usr/lib/python3/dist-packages/datalad/support/annexrepo.py:937: in _call_annex
>     return runner.run_on_filelist_chunks(
> /usr/lib/python3/dist-packages/datalad/runner/gitrunner.py:256: in run_on_filelist_chunks
>     for res in self._get_chunked_results(cmd=cmd,
> /usr/lib/python3/dist-packages/datalad/runner/gitrunner.py:184: in _get_chunked_results
>     yield self.run(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <datalad.runner.gitrunner.GitWitlessRunner object at 0x7fb8072c5f90>
> cmd = ['git', '-c', 'diff.ignoreSubmodules=none', '-c', 'annex.merge-annex-branches=false', 'annex', ...]
> protocol = <class 'datalad.support.annexrepo.AnnexJsonProtocol'>, stdin = None
> cwd = None
> env = {'APT_CONFIG': '/var/lib/sbuild/apt.conf', 'ASFLAGS': '', 'CCACHE_DIR': '/<<PKGBUILDDIR>>/.pyb...-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security', ...}
> timeout = None, exception_on_error = True, kwargs = {}
> applied_cwd = PosixPath('/tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI/study')
> applied_env = {'APT_CONFIG': '/var/lib/sbuild/apt.conf', 'ASFLAGS': '', 'CCACHE_DIR': '/<<PKGBUILDDIR>>/.pyb...-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security', ...}
> threaded_runner = <datalad.runner.nonasyncrunner.ThreadedRunner object at 0x7fb807239ad0>
> results_or_iterator = {'code': 1, 'stderr': 'fatal: Not a valid object name ./CHANGES\ninfo: 1 failed\n', 'stdout': '', 'stdout_json': [{'command': 'info', 'error-messages': [], 'file': './CHANGES', 'input': ['./CHANGES'], ...}]}
> results = {'code': 1, 'stderr': 'fatal: Not a valid object name ./CHANGES\ninfo: 1 failed\n', 'stdout': '', 'stdout_json': [{'command': 'info', 'error-messages': [], 'file': './CHANGES', 'input': ['./CHANGES'], ...}]}
> 
>     def run(self,
>             cmd: list | str,
>             protocol: type[WitlessProtocol] | None = None,
>             stdin: bytes | IO | Queue | None = None,
>             cwd: PathLike | str | None = None,
>             env: dict | None = None,
>             timeout: float | None = None,
>             exception_on_error: bool = True,
>             **kwargs) -> dict | _ResultGenerator:
>         """Execute a command and communicate with it.
>     
>         Parameters
>         ----------
>         cmd : list or str
>           Sequence of program arguments. Passing a single string causes
>           execution via the platform shell.
>         protocol : WitlessProtocol, optional
>           Protocol class handling interaction with the running process
>           (e.g. output capture). A number of pre-crafted classes are
>           provided (e.g `KillOutput`, `NoCapture`, `GitProgress`).
>           If the protocol has the GeneratorMixIn-mixin, the run-method
>           will return an iterator and can therefore be used in a for-clause.
>         stdin : file-like, bytes, Queue, or None
>           If stdin is a file-like, it will be directly used as stdin for the
>           subprocess. The caller is responsible for writing to it and closing it.
>           If stdin is a bytes, it will be fed to stdin of the subprocess.
>           If all data is written, stdin will be closed.
>           If stdin is a Queue, all elements (bytes) put into the Queue will
>           be passed to stdin until None is read from the queue. If None is read,
>           stdin of the subprocess is closed.
>         cwd : str or path-like, optional
>           If given, commands are executed with this path as PWD,
>           the PWD of the parent process is used otherwise. Overrides
>           any `cwd` given to the constructor.
>         env : dict, optional
>           Environment to be used for command execution. If given, it will
>           completely replace any environment provided to theconstructor. If
>           `cwd` is given, 'PWD' in the environment is set to its value.
>           This must be a complete environment definition, no values
>           from the current environment will be inherited. Overrides
>           any `env` given to the constructor.
>         timeout: float, optional
>           None or the seconds after which a timeout callback is
>           invoked, if no progress was made in communicating with
>           the sub-process, or if waiting for the subprocess exit
>           took more than the specified time. See the protocol and
>           `ThreadedRunner` descriptions for a more detailed discussion
>           on timeouts.
>         exception_on_error : bool, optional
>           This argument is only interpreted if the protocol is a subclass
>           of `GeneratorMixIn`. If it is `True` (default), a
>           `CommandErrorException` is raised by the generator if the
>           sub process exited with a return code not equal to zero. If the
>           parameter is `False`, no exception is raised. In both cases the
>           return code can be read from the attribute `return_code` of
>           the generator.
>         kwargs :
>           Passed to the Protocol class constructor.
>     
>         Returns
>         -------
>           dict | _ResultGenerator
>     
>             If the protocol is not a subclass of `GeneratorMixIn`, the
>             result of protocol._prepare_result will be returned.
>     
>             If the protocol is a subclass of `GeneratorMixIn`, a Generator, i.e.
>             a `_ResultGenerator`, will be returned. This allows to use this
>             method in constructs like:
>     
>                 for protocol_output in runner.run():
>                     ...
>     
>             Where the iterator yields whatever protocol.pipe_data_received
>             sends into the generator.
>             If all output was yielded and the process has terminated, the
>             generator will raise StopIteration(return_code), where
>             return_code is the return code of the process. The return code
>             of the process will also be stored in the "return_code"-attribute
>             of the runner. So you could write:
>     
>                gen = runner.run()
>                for file_descriptor, data in gen:
>                    ...
>     
>                # get the return code of the process
>                result = gen.return_code
>     
>         Raises
>         ------
>         CommandError
>           On execution failure (non-zero exit code) this exception is
>           raised which provides the command (cmd), stdout, stderr,
>           exit code (status), and a message identifying the failed
>           command, as properties.
>         FileNotFoundError
>           When a given executable does not exist.
>         """
>         if protocol is None:
>             # by default let all subprocess stream pass through
>             protocol = NoCapture
>     
>         applied_cwd = cwd or self.cwd
>         applied_env = self._get_adjusted_env(
>             env=env or self.env,
>             cwd=applied_cwd,
>         )
>     
>         lgr.debug(
>             'Run %r (protocol_class=%s) (cwd=%s)',
>             cmd,
>             protocol.__name__,
>             applied_cwd
>         )
>     
>         threaded_runner = ThreadedRunner(
>             cmd=cmd,
>             protocol_class=protocol,
>             stdin=stdin,
>             protocol_kwargs=kwargs,
>             timeout=timeout,
>             exception_on_error=exception_on_error,
>             cwd=applied_cwd,
>             env=applied_env
>         )
>     
>         results_or_iterator = threaded_runner.run()
>         if issubclass(protocol, GeneratorMixIn):
>             return results_or_iterator
>     
>         results = cast(dict, results_or_iterator)
>         # log before any exception is raised
>         lgr.debug("Finished %r with status %s", cmd, results['code'])
>     
>         # make it such that we always blow if a protocol did not report
>         # a return code at all
>         if results.get('code', True) not in [0, None]:
>             # the runner has a better idea, doc string warns Protocol
>             # implementations not to return these
>             results.pop('cmd', None)
>             results.pop('cwd', None)
> >           raise CommandError(
>                 # whatever the results were, we carry them forward
>                 cmd=cmd,
>                 cwd=applied_cwd,
>                 **results,
>             )
> E           datalad.runner.exception.CommandError: CommandError: 'git -c diff.ignoreSubmodules=none -c annex.merge-annex-branches=false annex info --bytes --fast --json --json-error-messages -c annex.dotfiles=true -- ./CHANGES' failed with exitcode 1 under /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI/study [info keys: stdout_json]
> E           > not a directory or an annexed file or a treeish or a remote or a uuid
> E            [err: 'fatal: Not a valid object name ./CHANGES
> E           info: 1 failed']
> 
> /usr/lib/python3/dist-packages/datalad/runner/runner.py:220: CommandError
> ----------------------------- Captured stdout call -----------------------------
> create(ok): /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0 (dataset)
> add(ok): PI (dataset)
> add(ok): .gitmodules (file)
> save(ok): . (dataset)
> create(ok): PI (dataset)
> action summary:
>   add (ok: 2)
>   create (ok: 1)
>   save (ok: 1)
> add(ok): study (dataset)
> add(ok): .gitmodules (file)
> save(ok): . (dataset)
> create(ok): study (dataset)
> action summary:
>   add (ok: 2)
>   create (ok: 1)
>   save (ok: 1)
> add(ok): .gitattributes (file)
> save(ok): . (dataset)
> action summary:
>   add (ok: 1)
>   save (ok: 1)
> add(ok): CHANGES (file)
> add(ok): README (file)
> add(ok): dataset_description.json (file)
> add(ok): scans.json (file)
> save(ok): . (dataset)
> action summary:
>   add (ok: 4)
>   save (ok: 1)
> add(ok): study (dataset)
> add(ok): .gitmodules (file)
> save(ok): PI (dataset)
> add(ok): PI (dataset)
> add(ok): .gitmodules (file)
> save(ok): . (dataset)
> action summary:
>   add (ok: 4)
>   save (notneeded: 1, ok: 2)
> subdataset(ok): PI (dataset)
> subdataset(ok): PI/study (dataset)
> ------------------------------ Captured log call -------------------------------
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: starting
> INFO     datalad.core.local.save:log.py:432 
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: done
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: starting
> INFO     datalad.core.local.save:log.py:432 
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: done
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: starting
> INFO     datalad.core.local.save:log.py:432 
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI/study
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: done
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: starting
> INFO     datalad.core.local.save:log.py:432 
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI/study
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: done
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: starting
> INFO     datalad.core.local.save:log.py:432 
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI/study
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0/PI
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: processed result for /tmp/pytest-of-user42/pytest-0/test_prepare_for_datalad0
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad.core.local.save:log.py:432 Total: done
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> INFO     datalad:log.py:432 Clear progress bars
> INFO     datalad:log.py:432 Refresh progress bars
> =============================== warnings summary ===============================
> ../../../../../../usr/lib/python3/dist-packages/traits/observation/_generated_parser.py:258
>   /usr/lib/python3/dist-packages/traits/observation/_generated_parser.py:258: DeprecationWarning: module 'sre_parse' is deprecated
>     import sre_parse
> 
> ../../../../../../usr/lib/python3/dist-packages/traits/observation/_generated_parser.py:259
>   /usr/lib/python3/dist-packages/traits/observation/_generated_parser.py:259: DeprecationWarning: module 'sre_constants' is deprecated
>     import sre_constants
> 
> heudiconv/bids.py:162
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/bids.py:162: DeprecationWarning: invalid escape sequence '\s'
>     """Aggregate across the entire BIDS dataset ``.json``\s into top level ``.json``\s
> 
> heudiconv/bids.py:181
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/bids.py:181: DeprecationWarning: invalid escape sequence '\_'
>     for fpath in find_files('.*_task-.*\_bold\.json',
> 
> heudiconv/bids.py:184
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/bids.py:184: DeprecationWarning: invalid escape sequence '\.'
>     exclude="/\.(datalad|heudiconv)/"):
> 
> heudiconv/bids.py:190
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/bids.py:190: DeprecationWarning: invalid escape sequence '\.'
>     task = re.sub('.*_(task-[^_\.]*(_acq-[^_\.]*)?)_.*', r'\1', fpath)
> 
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_convert.py::test_b0dwi_for_fmap
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_heuristics.py::test_phoenix_doc_conversion
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_main.py::test_cache
>   /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build/heudiconv/parser.py:204: DeprecationWarning: The 'warn' method is deprecated, use 'warning' instead
>     lgr.warn("Heuristic is missing an `infotoids` method, assigning "
> 
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_convert.py::test_b0dwi_for_fmap
>   /usr/lib/python3/dist-packages/etelemetry/client.py:95: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
>     from pkg_resources import parse_version
> 
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_convert.py::test_b0dwi_for_fmap
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_convert.py::test_b0dwi_for_fmap
>   /usr/lib/python3/dist-packages/nipype/utils/filemanip.py:696: DeprecationWarning: Use setlocale(), getencoding() and getlocale() instead
>     default_encoding = encoding or locale.getdefaultlocale()[1] or "UTF-8"
> 
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_convert.py: 4 warnings
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_dicoms.py: 2 warnings
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_heuristics.py: 22 warnings
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_main.py: 2 warnings
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_regression.py: 4 warnings
>   /usr/lib/python3/dist-packages/nipype/utils/subprocess.py:34: DeprecationWarning: Use setlocale(), getencoding() and getlocale() instead
>     self.default_encoding = locale.getdefaultlocale()[1] or "UTF-8"
> 
> .pybuild/cpython3_3.11_heudiconv/build/heudiconv/tests/test_convert.py::test_b0dwi_for_fmap
>   /usr/lib/python3/dist-packages/pydicom/valuerep.py:290: UserWarning: The value length (22) exceeds the maximum length of 16 allowed for VR SH.
>     warnings.warn(msg)
> 
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info ============================
> FAILED heudiconv/tests/test_main.py::test_prepare_for_datalad - datalad.runne...
> ============ 1 failed, 94 passed, 5 skipped, 47 warnings in 36.35s =============
> E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_heudiconv/build; python3.11 -m pytest 
> 	rm -fr -- /tmp/dh-xdg-rundir-gMzdxhdF
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2023/07/26/heudiconv_0.11.6-1_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20230726;users=lucas@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20230726&fusertaguser=lucas@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

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 mark 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 mine
so that we can identify if something relevant changed in the meantime.



More information about the Debian-med-packaging mailing list