Source: diffoscope
Version: 226
Severity: serious
User: debian...@lists.debian.org
Usertags: regression

Dear maintainer(s),

With a recent upload of diffoscope the autopkgtest of diffoscope fails in testing when that autopkgtest is run with the binary packages of diffoscope from unstable. It passes when run with only packages from testing. In tabular form:

                       pass            fail
diffoscope             from testing    226
versioned deps [0]     from testing    from unstable
all others             from testing    from testing

I copied some of the output at the bottom of this report.

Currently this regression is blocking the migration to testing [1]. Can you please investigate the situation and fix it?

More information about this bug and the reason for filing it can be found on
https://wiki.debian.org/ContinuousIntegration/RegressionEmailInformation

Paul

[0] You can see what packages were added from the second line of the log file quoted below. The migration software adds source package from unstable to the list if they are needed to install packages from diffoscope/226. I.e. due to versioned dependencies or breaks/conflicts.
[1] https://qa.debian.org/excuses.php?package=diffoscope

https://ci.debian.net/data/autopkgtest/testing/amd64/d/diffoscope/28319467/log.gz

=================================== FAILURES =================================== _____________________________ test_no_differences ______________________________

self = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html> other = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html>
source = None

    def compare(self, other, source=None):
        difference = super().compare(other, source)
            # Show text-only differences as a sub-diff.
        try:
          text = Difference.from_operation(Htmltotext, self.path, other.path)

__class__  = <class 'diffoscope.comparators.html.HtmlFile'>
difference = None
other = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html> self = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html>
source     = None

/usr/lib/python3/dist-packages/diffoscope/comparators/html.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
klass = <class 'diffoscope.comparators.html.Htmltotext'>
path1 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html' path2 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html'
args = (), kwargs = {}

    @staticmethod
    def from_operation(klass, path1, path2, *args, **kwargs):
      return Difference.from_operation_exc(
            klass, path1, path2, *args, **kwargs
        )[0]

args       = ()
klass      = <class 'diffoscope.comparators.html.Htmltotext'>
kwargs     = {}
path1 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html' path2 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html'

/usr/lib/python3/dist-packages/diffoscope/difference.py:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
klass = <class 'diffoscope.comparators.html.Htmltotext'>
path1 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html' path2 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html'
args = (), kwargs = {}, ignore_returncodes = ()
operation_and_feeder = <function Difference.from_operation_exc.<locals>.operation_and_feeder at 0x7f3447054a60>

    @staticmethod
    def from_operation_exc(klass, path1, path2, *args, **kwargs):
        operation_args = kwargs.pop("operation_args", [])
        ignore_returncodes = kwargs.pop("ignore_returncodes", ())
            def operation_and_feeder(path):
            operation = None
            if path == "/dev/null":
                feeder = feeders.empty()
            else:
                operation = klass(path, *operation_args)
                feeder = feeders.from_operation(operation)
                if operation_excluded(operation.full_name()):
                    return None, None, True
                operation.start()
            return feeder, operation, False
    >       feeder1, operation1, excluded1 = operation_and_feeder(path1)

args       = ()
ignore_returncodes = ()
klass      = <class 'diffoscope.comparators.html.Htmltotext'>
kwargs     = {}
operation_and_feeder = <function Difference.from_operation_exc.<locals>.operation_and_feeder at 0x7f3447054a60>
operation_args = []
path1 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html' path2 = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html'

/usr/lib/python3/dist-packages/diffoscope/difference.py:288: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ path = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html'

    def operation_and_feeder(path):
        operation = None
        if path == "/dev/null":
            feeder = feeders.empty()
        else:
            operation = klass(path, *operation_args)
            feeder = feeders.from_operation(operation)
          if operation_excluded(operation.full_name()):

feeder     = <function from_operation.<locals>.feeder at 0x7f3447056e60>
klass      = <class 'diffoscope.comparators.html.Htmltotext'>
operation = <diffoscope.comparators.html.Htmltotext object at 0x7f344d280a00>
operation_args = []
path = '/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html'

/usr/lib/python3/dist-packages/diffoscope/difference.py:283: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <diffoscope.comparators.html.Htmltotext object at 0x7f344d280a00>
args = ()
kwargs = {'replace': ('/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html',)}

    def full_name(self, *args, **kwargs):
        kwargs.setdefault("replace", (self.path,))
      return format_cmdline(self.cmdline(), *args, **kwargs)

args       = ()
kwargs = {'replace': ('/tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html',)} self = <diffoscope.comparators.html.Htmltotext object at 0x7f344d280a00>

/usr/lib/python3/dist-packages/diffoscope/comparators/utils/command.py:71: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
args = (<diffoscope.comparators.html.Htmltotext object at 0x7f344d280a00>,)
kwargs = {}

    @functools.wraps(fn)
    def tool_check(*args, **kwargs):
        """
        Due to the way decorators are executed at import-time we defer the
        execution of `find_executable` until we actually run the decorated
        function (instead of prematurely returning a different version of
        `tool_check`).
            This ensures that any os.environ['PATH'] modifications are
        performed prior to the `find_executable` tests.
        """
        if not tool_check_installed(command):
          raise RequiredToolNotFound(command)
E           diffoscope.exc.RequiredToolNotFound

RequiredToolNotFound = <class 'diffoscope.exc.RequiredToolNotFound'>
args = (<diffoscope.comparators.html.Htmltotext object at 0x7f344d280a00>,)
command    = 'html2text'
fn         = <function Htmltotext.cmdline at 0x7f344d4629e0>
kwargs     = {}

/usr/lib/python3/dist-packages/diffoscope/tools.py:137: RequiredToolNotFound

During handling of the above exception, another exception occurred:

html1 = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html>

    def test_no_differences(html1):
      assert html1.compare(html1) is None

html1 = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html>

tests/comparators/test_html.py:36: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html> other = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html>
source = None

    def compare(self, other, source=None):
        difference = super().compare(other, source)
            # Show text-only differences as a sub-diff.
        try:
text = Difference.from_operation(Htmltotext, self.path, other.path)
            if text is not None:
                difference.add_details([text])
        except RequiredToolNotFound as exc:  # noqa
          difference.add_comment(exc.get_comment())
E           AttributeError: 'NoneType' object has no attribute 'add_comment'

__class__  = <class 'diffoscope.comparators.html.HtmlFile'>
difference = None
other = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html> self = <<class 'abc.HtmlFile'> /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html>
source     = None

/usr/lib/python3/dist-packages/diffoscope/comparators/html.py:48: AttributeError __________________________________ test_diff ___________________________________

differences = <Difference /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html -- /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test2.html []>

    def test_diff(differences):
        assert_diff(differences, "html_expected_diff")
      assert_diff(differences.details[0], "html_text_expected_diff")
E       IndexError: list index out of range

differences = <Difference /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test1.html -- /tmp/autopkgtest-lxc.0soup5pu/downtmp/autopkgtest_tmp/tests/data/test2.html []>

tests/comparators/test_html.py:46: IndexError

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to