Package: src:datalad
Version: 1.1.3-2
Severity: serious
Tags: ftbfs

Dear maintainer:

During a rebuild of all packages in unstable, your package failed to build:

--------------------------------------------------------------------------------
[...]
 debian/rules build
dh build --with python3 --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   debian/rules override_dh_auto_configure
make[1]: Entering directory '/build/reproducible-path/datalad-1.1.3'
# cheap fake of an installed datalad, so we get .egg-info with entry points
/usr/bin/make bin
make[2]: Entering directory '/build/reproducible-path/datalad-1.1.3'
mkdir -p bin
PYTHONPATH="bin:" python3 setup.py develop --install-dir bin
running develop
/usr/lib/python3/dist-packages/setuptools/command/develop.py:41: 
EasyInstallDeprecationWarning: easy_install command is deprecated.
!!

[... snipped ...]

            ----------
            s: str
              what to append to 'datalad ' invocation
            expected: iterable of str
              What entries to expect - would raise AssertionError if any is
              not present in output
            exit_code: int, optional
              If incomplete/malformed we seems to get 2, most frequently used
              so default
Returns
            -------
            list of str
              Entries output
            """
            if os.path.exists(out_fn):  # reuse but ensure it is gone
                os.unlink(out_fn)
            comp_line = f'datalad {s}'
            runner.run(
                comp_line.split(' '),
                env=dict(os.environ,
                         _ARGCOMPLETE='1',
                         _ARGCOMPLETE_STDOUT_FILENAME=out_fn,
                         COMP_LINE=comp_line,
                         # without -1 seems to get "finished completion", 
someone can investigate more
                         COMP_POINT=str(len(comp_line)-1),  # always at the end 
ATM
                         ))
            with open(out_fn, 'rb') as f:
                entries = f.read().split(b'\x0b')
                entries = [e.decode() for e in entries]
            diff = set(expected).difference(entries)
            if diff:
                raise AssertionError(
                    f"Entries {sorted(diff)} were expected but not found in the 
completion output: {entries}"
                )
            return entries  # for extra analyzes if so desired
all_commands = get_all_commands()
      get_completions('i', {'install'})

datalad/cli/tests/test_main.py:421:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
datalad/cli/tests/test_main.py:401: in get_completions
    runner.run(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <datalad.runner.runner.WitlessRunner object at 0x7f032c717790>
cmd = ['datalad', 'i']
protocol = <class 'datalad.runner.coreprotocols.NoCapture'>, stdin = None
cwd = None
env = {'APT_CONFIG': '/var/lib/sbuild/apt.conf', 'ASFLAGS': '', 
'ASFLAGS_FOR_BUILD': '', 'CCACHE_DIR': 
'/build/reproducible-path/datalad-1.1.3/.pybuild/ccache', ...}
timeout = None, exception_on_error = True, kwargs = {}, applied_cwd = None
applied_env = {'APT_CONFIG': '/var/lib/sbuild/apt.conf', 'ASFLAGS': '', 
'ASFLAGS_FOR_BUILD': '', 'CCACHE_DIR': 
'/build/reproducible-path/datalad-1.1.3/.pybuild/ccache', ...}
threaded_runner = <datalad.runner.nonasyncrunner.ThreadedRunner object at 
0x7f032c717b30>
results_or_iterator = {'code': 1, 'stderr': '', 'stdout': ''}
results = {'code': 1, 'stderr': '', 'stdout': ''}, return_code = 1

    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 first 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. Then this argument interpreted within this function
          to not raise `CommandError` if value is False in case of non-0 exit.
        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 or it was non-0 and we were not asked ignore
        # errors
        return_code = results.get('code', None)
        if return_code is None or (return_code and exception_on_error):
            # 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: 'datalad i' 
failed with exitcode 1

datalad/runner/runner.py:242: CommandError
__________________________________ test_setup __________________________________

    def test_setup():
        # insufficient arguments
      check_setup_parser([], 2)

datalad/cli/tests/test_parser.py:73:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = [], exit_code = 2

    def check_setup_parser(args, exit_code=None):
        parser = None
        with patch('sys.stderr', new_callable=StringIO) as cmerr:
            with patch('sys.stdout', new_callable=StringIO) as cmout:
                if exit_code is not None:
                  with assert_raises(SystemExit) as cm:
E                   Failed: DID NOT RAISE <class 'SystemExit'>

datalad/cli/tests/test_parser.py:60: Failed
____________________________ test_run_datalad_help _____________________________

cmd = 'datalad --help'

    def check_run_and_get_output(cmd):
        runner = WitlessRunner()
        try:
            # suppress log output happen it was set to high values
            with patch.dict('os.environ', {'DATALAD_LOG_LEVEL': 'WARN'}):
              output = runner.run(
                    ["datalad", "--help"],
                    protocol=StdOutErrCapture)

datalad/tests/test_installed.py:32:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <datalad.runner.runner.WitlessRunner object at 0x7f032d3d83d0>
cmd = ['datalad', '--help']
protocol = <class 'datalad.runner.coreprotocols.StdOutErrCapture'>, stdin = None
cwd = None, env = None, timeout = None, exception_on_error = True, kwargs = {}
applied_cwd = None, applied_env = None
threaded_runner = <datalad.runner.nonasyncrunner.ThreadedRunner object at 
0x7f032d3d93d0>
results_or_iterator = {'code': 2, 'stderr': 'usage: datalad [-c 
(:name|name=value)] [-C PATH] [--cmd] [-l LEVEL]\n               
[--on-failu...to-figshare, no-annex, check-dates, unlock, uninstall, 
create-test-dataset, sshrun, shell-completion)\n', 'stdout': ''}
results = {'code': 2, 'stderr': 'usage: datalad [-c (:name|name=value)] [-C 
PATH] [--cmd] [-l LEVEL]\n               [--on-failu...to-figshare, no-annex, 
check-dates, unlock, uninstall, create-test-dataset, sshrun, 
shell-completion)\n', 'stdout': ''}
return_code = 2

    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 first 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. Then this argument interpreted within this function
          to not raise `CommandError` if value is False in case of non-0 exit.
        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 or it was non-0 and we were not asked ignore
        # errors
        return_code = results.get('code', None)
        if return_code is None or (return_code and exception_on_error):
            # 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: 'datalad 
--help' failed with exitcode 2 [err: 'usage: datalad [-c (:name|name=value)] 
[-C PATH] [--cmd] [-l LEVEL]
E                          [--on-failure {ignore,continue,stop}]
E                          [--report-status 
{success,failure,ok,notneeded,impossible,error}]
E                          [--report-type {dataset,file}]
E                          [-f 
{generic,json,json_pp,tailored,disabled,'<template>'}]
E                          [--dbg] [--idbg] [--version]
E                          
{create-sibling-github,create-sibling-gitlab,create-sibling-gogs,create-sibling-gin,create-sibling-gitea,create-sibling-ria,create-sibling,siblings,update,subdatasets,drop,remove,addurls,copy-file,download-url,foreach-dataset,install,rerun,run-procedure,create,save,status,clone,get,push,run,diff,configuration,wtf,clean,add-archive-content,add-readme,export-archive,export-archive-ora,export-to-figshare,no-annex,check-dates,unlock,uninstall,create-test-dataset,sshrun,shell-completion}
E                          ...
E           datalad: error: argument 
{create-sibling-github,create-sibling-gitlab,create-sibling-gogs,create-sibling-gin,create-sibling-gitea,create-sibling-ria,create-sibling,siblings,update,subdatasets,drop,remove,addurls,copy-file,download-url,foreach-dataset,install,rerun,run-procedure,create,save,status,clone,get,push,run,diff,configuration,wtf,clean,add-archive-content,add-readme,export-archive,export-archive-ora,export-to-figshare,no-annex,check-dates,unlock,uninstall,create-test-dataset,sshrun,shell-completion}:
 invalid choice: '/build/reproducible-path/datalad-1.1.3/bin/datalad' (choose 
from create-sibling-github, create-sibling-gitlab, create-sibling-gogs, 
create-sibling-gin, create-sibling-gitea, create-sibling-ria, create-sibling, 
siblings, update, subdatasets, drop, remove, addurls, copy-file, download-url, 
foreach-dataset, install, rerun, run-procedure, create, save, status, clone, 
get, push, run, diff, configuration, wtf, clean, add-archive-content, 
add-readme, export-archive, export-archive-ora, export-to-figshare, no-annex, 
check-dates, unlock, uninstall, create-test-dataset, sshrun, shell-completion)']

datalad/runner/runner.py:242: CommandError

During handling of the above exception, another exception occurred:

    @assert_cwd_unchanged
    def test_run_datalad_help():
      out, err = check_run_and_get_output("datalad --help")

datalad/tests/test_installed.py:43:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

cmd = 'datalad --help'

    def check_run_and_get_output(cmd):
        runner = WitlessRunner()
        try:
            # suppress log output happen it was set to high values
            with patch.dict('os.environ', {'DATALAD_LOG_LEVEL': 'WARN'}):
                output = runner.run(
                    ["datalad", "--help"],
                    protocol=StdOutErrCapture)
        except CommandError as e:
          raise AssertionError("'datalad --help' failed to start normally. "
                                 "Exited with %d and output %s" % (e.code, 
(e.stdout, e.stderr)))
E           AssertionError: 'datalad --help' failed to start normally. Exited with 2 and output 
('', "usage: datalad [-c (:name|name=value)] [-C PATH] [--cmd] [-l LEVEL]\n               
[--on-failure {ignore,continue,stop}]\n               [--report-status 
{success,failure,ok,notneeded,impossible,error}]\n               [--report-type 
{dataset,file}]\n               [-f 
{generic,json,json_pp,tailored,disabled,'<template>'}]\n               [--dbg] [--idbg] 
[--version]\n               
{create-sibling-github,create-sibling-gitlab,create-sibling-gogs,create-sibling-gin,create-sibling-gitea,create-sibling-ria,create-sibling,siblings,update,subdatasets,drop,remove,addurls,copy-file,download-url,foreach-dataset,install,rerun,run-procedure,create,save,status,clone,get,push,run,diff,configuration,wtf,clean,add-archive-content,add-readme,export-archive,export-archive-ora,export-to-figshare,no-annex,check-dates,unlock,uninstall,create-test-dataset,sshrun,shell-completion}\n
               ...\ndatalad: error: argument 
{create-sibling-github,create-sibling-gitlab,create-sibling-gogs,create-sibling-gin,create-sibling-gitea,create-sibling-ria,create-sibling,siblings,update,subdatasets,drop,remove,addurls,copy-file,download-url,foreach-dataset,install,rerun,run-procedure,create,save,status,clone,get,push,run,diff,configuration,wtf,clean,add-archive-content,add-readme,export-archive,export-archive-ora,export-to-figshare,no-annex,check-dates,unlock,uninstall,create-test-dataset,sshrun,shell-completion}:
 invalid choice: '/build/reproducible-path/datalad-1.1.3/bin/datalad' (choose from 
create-sibling-github, create-sibling-gitlab, create-sibling-gogs, create-sibling-gin, 
create-sibling-gitea, create-sibling-ria, create-sibling, siblings, update, subdatasets, drop, 
remove, addurls, copy-file, download-url, foreach-dataset, install, rerun, run-procedure, 
create, save, status, clone, get, push, run, diff, configuration, wtf, clean, 
add-archive-content, add-readme, export-archive, export-archive-ora, export-to-figshare, 
no-annex, check-dates, unlock, uninstall, create-test-dataset, sshrun, 
shell-completion)\n")

datalad/tests/test_installed.py:36: AssertionError
=============================== warnings summary ===============================
.pybuild/cpython3_3.12_datalad/build/datalad/downloaders/tests/test_http.py: 13 
warnings
  /usr/lib/python3/dist-packages/httpretty/core.py:1077: DeprecationWarning: 
datetime.datetime.utcnow() is deprecated and scheduled for removal in a future 
version. Use timezone-aware objects to represent datetimes in UTC: 
datetime.datetime.now(datetime.UTC).
    now = datetime.utcnow()

.pybuild/cpython3_3.12_datalad/build/datalad/downloaders/tests/test_http.py: 1 
warning
.pybuild/cpython3_3.12_datalad/build/datalad/downloaders/tests/test_shub.py: 3 
warnings
.pybuild/cpython3_3.12_datalad/build/datalad/local/tests/test_add_archive_content.py:
 3 warnings
.pybuild/cpython3_3.12_datalad/build/datalad/local/tests/test_addurls.py: 1 
warning
.pybuild/cpython3_3.12_datalad/build/datalad/local/tests/test_copy_file.py: 2 
warnings
.pybuild/cpython3_3.12_datalad/build/datalad/local/tests/test_download_url.py: 
5 warnings
.pybuild/cpython3_3.12_datalad/build/datalad/runner/tests/test_nonasyncrunner.py:
 1 warning
.pybuild/cpython3_3.12_datalad/build/datalad/support/tests/test_annexrepo.py: 7 
warnings
.pybuild/cpython3_3.12_datalad/build/datalad/support/tests/test_locking.py: 2 
warnings
  /usr/lib/python3.12/multiprocessing/popen_fork.py:66: DeprecationWarning: 
This process (pid=778939) is multi-threaded, use of fork() may lead to 
deadlocks in the child.
    self.pid = os.fork()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED datalad/cli/tests/test_main.py::test_version - assert 2 == 0
FAILED datalad/cli/tests/test_main.py::test_help_np - assert 2 == 0
FAILED datalad/cli/tests/test_main.py::test_dashh - assert 2 == 0
FAILED datalad/cli/tests/test_main.py::test_combined_short_option - assert 't...
FAILED datalad/cli/tests/test_main.py::test_incorrect_option[opts0-error: 
(invalid|too few arguments|unrecognized argument)]
FAILED datalad/cli/tests/test_main.py::test_incorrect_option[opts1-error: 
(invalid|too few arguments|unrecognized argument)]
FAILED datalad/cli/tests/test_main.py::test_incorrect_option[opts2-error: 
(invalid|too few arguments|unrecognized argument)]
FAILED datalad/cli/tests/test_main.py::test_incorrect_option[opts3-error: 
(invalid|too few arguments|unrecognized argument)]
FAILED datalad/cli/tests/test_main.py::test_script_shims[datalad] - datalad.r...
FAILED datalad/cli/tests/test_main.py::test_completion - datalad.runner.excep...
FAILED datalad/cli/tests/test_parser.py::test_setup - Failed: DID NOT RAISE <...
FAILED datalad/tests/test_installed.py::test_run_datalad_help - AssertionErro...
= 12 failed, 1095 passed, 105 skipped, 57 deselected, 2 xfailed, 1 xpassed, 38 
warnings in 883.65s (0:14:43) =
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd 
/build/reproducible-path/datalad-1.1.3/.pybuild/cpython3_3.12_datalad/build; 
python3.12 -m pytest -s -v -k 'not test_test and not 
test_subprocess_return_code_capture and not test_gracefull_death' -c 
/build/reproducible-path/datalad-1.1.3/tox.ini
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 
3.12" --test-pytest returned exit code 13
make[1]: *** [debian/rules:44: override_dh_auto_test] Error 25
make[1]: Leaving directory '/build/reproducible-path/datalad-1.1.3'
make: *** [debian/rules:25: build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2
--------------------------------------------------------------------------------

The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:

https://people.debian.org/~sanvila/build-logs/202411/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and affects, so that this is still visible in the BTS web
page for this package.

Thanks.

Reply via email to