Your message dated Wed, 30 Aug 2023 13:35:48 -0400
with message-id <ZO999KVSLs/u+w6D@bilena>
and subject line Re: Bug#1042334: heudiconv: FTBFS: dh_auto_test: error: 
pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13
has caused the Debian Bug report #1042334,
regarding heudiconv: FTBFS: dh_auto_test: error: pybuild --test --test-pytest 
-i python{version} -p 3.11 returned exit code 13
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1042334: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1042334
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: heudiconv
Version: 0.11.6-1
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lu...@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=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20230726&fusertaguser=lu...@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.

--- End Message ---
--- Begin Message ---
Thank you Lucas for filing and Nilesh for trying it out.
Sorry I have missed this one.

Looking at the actual error

> 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']

and checking installed versions:

    Get:88 http://127.0.0.1:12990/debian sid/main amd64 git-annex amd64 
10.20230626-1 [13.2 MB]
    ...
    Get:184 http://127.0.0.1:12990/debian sid/main amd64 python3-datalad all 
0.18.1-2 [876 kB]

reminded me that I did some related fixes in datalad... and indeed

        # 0.18.2 (2023-02-27)

        - Address compatibility with most recent git-annex where info would 
exit with non-0.  [PR #7292](https://github.com/datalad/datalad/pull/7292) (by 
[@yarikoptic](https://github.com/yarikoptic))

and since we have now datalad 0.19.3-2 in trixie and sid, let's consider this 
one done.

Cheers!

On Wed, 30 Aug 2023, Nilesh Patra wrote:

> Control: tags -1 unreproducible
> Control: tags -1 moreinfo

> Hi Lucas,

> On Wed, 26 Jul 2023 22:06:34 +0200 Lucas Nussbaum <lu...@debian.org> wrote:
> > Source: heudiconv
> > Version: 0.11.6-1
> > Severity: serious
> > Justification: FTBFS
> > ...
> > > heudiconv/tests/test_heuristics.py ...........                           
> > > [ 68%]
> > > heudiconv/tests/test_main.py .....F........                              
> > > [ 82%]

> Can't repro this in a clean unstable chroot and a new version which has the 
> exact same test passes
> buildd in experimental. Can you please try a re-run and check if this still 
> persists at your end?

> Thanks,
> Nilesh



-- 
Yaroslav O. Halchenko
Center for Open Neuroscience     http://centerforopenneuroscience.org
Dartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755
WWW:   http://www.linkedin.com/in/yarik        

Attachment: signature.asc
Description: PGP signature


--- End Message ---

Reply via email to