Your message dated Tue, 17 Sep 2019 10:34:40 +0000
with message-id <e1iaaoi-000epn...@fasolo.debian.org>
and subject line Bug#940471: fixed in diffoscope 124
has caused the Debian Bug report #940471,
regarding diffoscope: test failures
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.)


-- 
940471: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=940471
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: diffoscope
Version: 123
Severity: serious

Hello, looks like the latest diffoscope in unstable has a test failure that is 
preventing it from entering testing:

snip of the test failure:
==================================== ERRORS ====================================
____________________ ERROR at setup of test_identification _____________________

tmpdir = local('/tmp/pytest-of-debci/pytest-0/test_identification0')

    @pytest.fixture
    def cmi(tmpdir):
        input_ = str(tmpdir.join('{}.mli'.format(prefix)))
        output = str(tmpdir.join('{}.cmi'.format(prefix)))
    
        with open(input_, 'w') as f:
            pass
    
>       subprocess.check_call(('ocamlc', '-c', input_))

f          = <_io.TextIOWrapper 
name='/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli' mode='w' 
encoding='UTF-8'>
input_     = '/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli'
output     = '/tmp/pytest-of-debci/pytest-0/test_identification0/test1.cmi'
prefix     = 'test1'
tmpdir     = local('/tmp/pytest-of-debci/pytest-0/test_identification0')

tests/comparators/test_ocaml.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.7/subprocess.py:342: in check_call
    retcode = call(*popenargs, **kwargs)
/usr/lib/python3.7/subprocess.py:323: in call
    with Popen(*popenargs, **kwargs) as p:
/usr/lib/python3.7/subprocess.py:775: in __init__
    restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <subprocess.Popen object at 0x7f9a4e7e9e90>
args = ['ocamlc', '-c', 
'/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli']
executable = b'ocamlc', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1
errwrite = -1, restore_signals = True, start_new_session = False

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals, start_new_session):
        """Execute program (POSIX version)"""
    
        if isinstance(args, (str, bytes)):
            args = [args]
        else:
            args = list(args)
    
        if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable
    
        if executable is None:
            executable = args[0]
        orig_executable = executable
    
        # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()
    
                if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable 
name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _posixsubprocess.fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session, preexec_fn)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)
    
            # self._devnull is not always defined.
            devnull_fd = getattr(self, '_devnull', None)
            if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
                os.close(p2cread)
            if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
                os.close(c2pwrite)
            if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
                os.close(errwrite)
            if devnull_fd is not None:
                os.close(devnull_fd)
            # Prevent a double close of these fds from __init__ on error.
            self._closed_child_pipe_fds = True
    
            # Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)
    
        if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass
    
            try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                child_exec_never_called = (err_msg == "noexec")
                if child_exec_never_called:
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                    if errno_num == errno.ENOENT:
                        err_msg += ': ' + repr(err_filename)
>               raise child_exception_type(errno_num, err_msg, err_filename)
E               FileNotFoundError: [Errno 2] No such file or directory: 
'ocamlc': 'ocamlc'

args       = ['ocamlc', '-c', 
'/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli']
c2pread    = -1
c2pwrite   = -1
child_exception_type = <class 'OSError'>
child_exec_never_called = False
close_fds  = True
creationflags = 0
cwd        = None
devnull_fd = None
env        = None
env_list   = None
err_filename = 'ocamlc'
err_msg    = "No such file or directory: 'ocamlc'"
errno_num  = 2
errpipe_data = bytearray(b'OSError:2:')
errpipe_read = 8
errpipe_write = 10
errread    = -1
errwrite   = -1
exception_name = bytearray(b'OSError')
executable = b'ocamlc'
executable_list = (b'/usr/local/bin/ocamlc',
 b'/usr/bin/ocamlc',
 b'/bin/ocamlc',
 b'/usr/local/games/ocamlc',
 b'/usr/games/ocamlc',
 b'/sbin/ocamlc',
 b'/usr/sbin/ocamlc',
 b'/usr/local/sbin/ocamlc')
fds_to_keep = {10}
hex_errno  = bytearray(b'2')
low_fds_to_close = []
orig_executable = 'ocamlc'
p2cread    = -1
p2cwrite   = -1
part       = b''
pass_fds   = ()
pid        = 8251
preexec_fn = None
restore_signals = True
self       = <subprocess.Popen object at 0x7f9a4e7e9e90>
shell      = False
start_new_session = False
startupinfo = None
sts        = 65280

/usr/lib/python3.7/subprocess.py:1522: FileNotFoundError
____________________ ERROR at setup of test_no_differences _____________________

tmpdir = local('/tmp/pytest-of-debci/pytest-0/test_no_differences0')

    @pytest.fixture
    def cmi(tmpdir):
        input_ = str(tmpdir.join('{}.mli'.format(prefix)))
        output = str(tmpdir.join('{}.cmi'.format(prefix)))
    
        with open(input_, 'w') as f:
            pass
    
>       subprocess.check_call(('ocamlc', '-c', input_))

f          = <_io.TextIOWrapper 
name='/tmp/pytest-of-debci/pytest-0/test_no_differences0/test1.mli' mode='w' 
encoding='UTF-8'>
input_     = '/tmp/pytest-of-debci/pytest-0/test_no_differences0/test1.mli'
output     = '/tmp/pytest-of-debci/pytest-0/test_no_differences0/test1.cmi'
prefix     = 'test1'
tmpdir     = local('/tmp/pytest-of-debci/pytest-0/test_no_differences0')

tests/comparators/test_ocaml.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.7/subprocess.py:342: in check_call
    retcode = call(*popenargs, **kwargs)
/usr/lib/python3.7/subprocess.py:323: in call
    with Popen(*popenargs, **kwargs) as p:
/usr/lib/python3.7/subprocess.py:775: in __init__
    restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <subprocess.Popen object at 0x7f9a4e82b8d0>
args = ['ocamlc', '-c', 
'/tmp/pytest-of-debci/pytest-0/test_no_differences0/test1.mli']
executable = b'ocamlc', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1
errwrite = -1, restore_signals = True, start_new_session = False

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals, start_new_session):
        """Execute program (POSIX version)"""
    
        if isinstance(args, (str, bytes)):
            args = [args]
        else:
            args = list(args)
    
        if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable
    
        if executable is None:
            executable = args[0]
        orig_executable = executable
    
        # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()
    
                if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable 
name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _posixsubprocess.fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session, preexec_fn)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)
    
            # self._devnull is not always defined.
            devnull_fd = getattr(self, '_devnull', None)
            if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
                os.close(p2cread)
            if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
                os.close(c2pwrite)
            if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
                os.close(errwrite)
            if devnull_fd is not None:
                os.close(devnull_fd)
            # Prevent a double close of these fds from __init__ on error.
            self._closed_child_pipe_fds = True
    
            # Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)
    
        if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass
    
            try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                child_exec_never_called = (err_msg == "noexec")
                if child_exec_never_called:
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                    if errno_num == errno.ENOENT:
                        err_msg += ': ' + repr(err_filename)
>               raise child_exception_type(errno_num, err_msg, err_filename)
E               FileNotFoundError: [Errno 2] No such file or directory: 
'ocamlc': 'ocamlc'

args       = ['ocamlc', '-c', 
'/tmp/pytest-of-debci/pytest-0/test_no_differences0/test1.mli']
c2pread    = -1
c2pwrite   = -1
child_exception_type = <class 'OSError'>
child_exec_never_called = False
close_fds  = True
creationflags = 0
cwd        = None
devnull_fd = None
env        = None
env_list   = None
err_filename = 'ocamlc'
err_msg    = "No such file or directory: 'ocamlc'"
errno_num  = 2
errpipe_data = bytearray(b'OSError:2:')
errpipe_read = 8
errpipe_write = 10
errread    = -1
errwrite   = -1
exception_name = bytearray(b'OSError')
executable = b'ocamlc'
executable_list = (b'/usr/local/bin/ocamlc',
 b'/usr/bin/ocamlc',
 b'/bin/ocamlc',
 b'/usr/local/games/ocamlc',
 b'/usr/games/ocamlc',
 b'/sbin/ocamlc',
 b'/usr/sbin/ocamlc',
 b'/usr/local/sbin/ocamlc')
fds_to_keep = {10}
hex_errno  = bytearray(b'2')
low_fds_to_close = []
orig_executable = 'ocamlc'
p2cread    = -1
p2cwrite   = -1
part       = b''
pass_fds   = ()
pid        = 8252
preexec_fn = None
restore_signals = True
self       = <subprocess.Popen object at 0x7f9a4e82b8d0>
shell      = False
start_new_session = False
startupinfo = None
sts        = 65280

/usr/lib/python3.7/subprocess.py:1522: FileNotFoundError
=========================== short test summary info ============================
ERROR tests/comparators/test_ocaml.py::test_identification
ERROR tests/comparators/test_ocaml.py::test_no_differences

--- End Message ---
--- Begin Message ---
Source: diffoscope
Source-Version: 124

We believe that the bug you reported is fixed in the latest version of
diffoscope, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 940...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Chris Lamb <la...@debian.org> (supplier of updated diffoscope package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Tue, 17 Sep 2019 12:19:07 +0200
Source: diffoscope
Architecture: source
Version: 124
Distribution: unstable
Urgency: medium
Maintainer: Reproducible builds folks 
<reproducible-bui...@lists.alioth.debian.org>
Changed-By: Chris Lamb <la...@debian.org>
Closes: 939387 940471
Changes:
 diffoscope (124) unstable; urgency=medium
 .
   [ Chris Lamb ]
   * Also conditionally skip the identification and "no differences" tests as we
     require the Ocaml compiler to be present when building the test files
     themselves. (Closes: #940471)
 .
   [ Mattia Rizzolo ]
   * Permit all sorts of version suffixes when checking the Debian package
     version matches setup.py, not just for backports. (Closes: #939387)
 .
   [ Vagrant Cascadian ]
   * Add external tools on GNU Guix for odt2txt, sng and pppdump
 .
   [ Marc Herbert ]
   * Remove StaticLibFile in the ELF comparator -- ArFile.compare_details() is
     superior. (Closes: reproducible-builds/diffoscope#64)
Checksums-Sha1:
 ae5b4dc9232dface50f1e5c5cfab39b3710b0bbc 4683 diffoscope_124.dsc
 f82b1af6d9a9df04a12c239bbd846d9350fbc6a3 1129436 diffoscope_124.tar.xz
 4898d6596be1d025eff020755cf088f0a2a1381d 26403 diffoscope_124_amd64.buildinfo
Checksums-Sha256:
 8758c84677e953c9d7fa6aff9253256dfe2e77e4ee8ad7c06060485bce239322 4683 
diffoscope_124.dsc
 99f3721f576137130438d9a83699ba1c6778f79f94db0007733ad2629390636a 1129436 
diffoscope_124.tar.xz
 6f4278ce874a92449d3bad3e6e15c5b89ce97e2604b58fe6bf38ea57d84544c2 26403 
diffoscope_124_amd64.buildinfo
Files:
 45cde69834f09d13a69e6e89c97bf9cb 4683 devel optional diffoscope_124.dsc
 dc02917c3173239f2b2a1bd323fd5318 1129436 devel optional diffoscope_124.tar.xz
 06434d89bc528797ed2f2e428856049f 26403 devel optional 
diffoscope_124_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEwv5L0nHBObhsUz5GHpU+J9QxHlgFAl2AtXMACgkQHpU+J9Qx
Hlj4vhAAt4InZz3wqw5Gc/xMDuLtofOuiMSO/qcfCGSHrkLpFIY7KxrU8bis+VpX
pO5dO40GqBc/wtQXCUxBq9WhvA7b1D58+VHoB+nTgBnPo3zF9k8YqzG6KYpacovQ
RVjMGZzNYYRjNY3IDIznAkpRC4YLOr81CA/BecP4cbx6y+H5HWt+UWRTWgB7FZSw
HsThGDA8BTYz5/Snv4B9uaC96h2ex+/pYVfpmiWfrrWHi9sZjCOJi1JzAokiD5Hs
kR5isBblIVwszrB62qwC161PMlK7xm3BiM0KPQTjHsoieNUGDdhy96aD/M3k+WLQ
mrBpZUuAiANPuZHV7ySHBLVAz9UzpMvxNVi/4jOxxFFKgtZxQlsh5s+tu2K9Aq1+
UjNQ2BPAzXMqbejNhUEG0rGzyhKt+TObtBBULKl+iIr1gbZMdPjzvQW2gFgaNEQZ
GBa1yxp92mEp7nchHdCGt18b7SZtovsEfoodTsvZhqa6zCCg1vhKtn/QBpYSFblH
S6RfqmiQpudnF43h0ICyLMw+yfgLNV0EqRdNQ7r+Yc/HuNGJhOIsRlpr5Mucj3UK
yXGcLvkpoaQ23HQichRImvsg+4u16mJJukWprhEkQMBlgBp32qujAuohpfjQLTbN
+BJ3ZwVojxntYpBP65syvMs36YRMGrv9ygxX4eWyB/XI22EUuss=
=NKWB
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to