[Reproducible-builds] Bug#784891: crashes comparing text files: TypeError: must be string, not list
Helmut Grohne
helmut at subdivi.de
Sun May 10 08:11:54 UTC 2015
Package: debbindiff
Version: 18
User: helmutg at debian.org
Usertags: rebootstrap
>From a recent jenkins build:
| https://jenkins.debian.net/job/rebootstrap_s390x_gcc49_nobiarch_debbindiff/18/console
| Get:1 http://ftp.de.debian.org/debian/ sid/main gzip s390x 1.6-4 [111 kB]
| Fetched 111 kB in 0s (1337 kB/s)
| Traceback (most recent call last):
| File "/usr/bin/debbindiff", line 120, in <module>
| sys.exit(main())
| File "/usr/bin/debbindiff", line 106, in main
| parsed_args.file1, parsed_args.file2)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
| return comparator(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
| inside_differences = original_function(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/deb.py", line 53, in compare_deb_files
| in_path1, in_path2, source=name))
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
| return comparator(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
| inside_differences = original_function(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/xz.py", line 50, in compare_xz_files
| source=[os.path.basename(new_path1), os.path.basename(new_path2)])
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
| return comparator(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
| inside_differences = original_function(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/tar.py", line 65, in compare_tar_files
| source=name.decode('utf-8')))
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
| return comparator(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
| inside_differences = original_function(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/gzip.py", line 64, in compare_gzip_files
| source=[os.path.basename(new_path1), os.path.basename(new_path2)]))
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
| return comparator(path1, path2, source)
| File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/text.py", line 29, in compare_text_files
| file1 = codecs.open(path1, 'r', encoding=encoding)
| File "/usr/lib/python2.7/codecs.py", line 887, in open
| info = lookup(encoding)
| TypeError: must be string, not list
| rebootstrap-error: debbindiff terminated with abnormal exit code 2
In comparators.text, compare_text_files is defined as:
| def compare_text_files(path1, path2, encoding, source=None):
It is called at comparators/__init__.py:129 as:
| return comparator(path1, path2, source)
So it seems that the source variable there becomes the encoding
parameter in compare_text_files, which seems strange at least.
Now compare_text_files did have this signature from the very beginning
and in a few places, it is called with that encoding explicitly. However
it also shows up in the COMPARATORS list in comparators/__init__.py. The
functions there are generally expected to be callable without the
encoding parameter.
Cc-ing Reiner Herrmann as he recently touched that code.
Hope this helps in dissecting.
Helmut
More information about the Reproducible-builds
mailing list