]> rtime.felk.cvut.cz Git - coffee/buildroot.git/commit
support/check-uniq-files: support weird locales and filenames
authorYann E. MORIN <yann.morin.1998@free.fr>
Sat, 31 Mar 2018 12:52:50 +0000 (14:52 +0200)
committerPeter Korsgaard <peter@korsgaard.com>
Fri, 6 Apr 2018 18:09:19 +0000 (20:09 +0200)
commit5b6c090749e31701bab7254d7ebb3cd121ef3d34
treefe1569264ea03d07208fdedeb7d20cd5bcb82cdc
parent0787fee6947bcf374464ab1d0d48feda3d0106ef
support/check-uniq-files: support weird locales and filenames

Currently, when a filename contains characters not representable in the
user's locale, we fail hard, especially when the host python is python3.

This is because python2 and python3 handle encoding/decoding strings
differently, with python3 presumable doing the right thing, but it
breaks on some systems, while python2 presumable does the wrong thing,
but it works everywhere. (Just joking, obviously...)

Part of the issue being that the csv reader in python2 is broken with
UTF8.

We fix the issue by ditching the csv reader, and simply read the file in
binary mode, manually partitioning the lines on the first comma.

Then, we use the binary-encoded (really, un-encoded) package names and
filenames as values and keys, respectively.

Finally, for each filename or package we need to print, we try to decode
them with the defaults for the user settings, but catch any decoding
exception and fall back to dumping the raw, binary values. Which codec
is used by default differs between Python version, but in all cases
something sane is printed at least.

Thanks a lot to Arnout for the live help doing this patch. :-)

Reported-by: Jaap Crezee <jaap@jcz.nl>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Arnout Vandecappelle <arnout@mind.be>
Cc: Jaap Crezee <jaap@jcz.nl>
[Arnout: commit log improvement]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
(cherry picked from commit 5563a1c6a48716debe2983869ddb757318094dce)
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
support/scripts/check-uniq-files