Source: diffoscope Version: 226 Severity: serious User: [email protected] 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 = Noneother = <<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 = Noneother = <<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 rangedifferences = <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
OpenPGP_signature
Description: OpenPGP digital signature

