Commit bed95c43 authored by Jeremy Cline's avatar Jeremy Cline Committed by Linus Torvalds

scripts: add Python 3 compatibility to spdxcheck.py

"dict.has_key(key)" on dictionaries has been replaced with "key in
dict".  Additionally, when run under Python 3 some files don't decode
with the default encoding (tested with UTF-8).  To handle that, don't
open the file in text mode and decode text line-by-line, ignoring
encoding errors.

This remains compatible with Python 2 and should have no functional
change.

Link: http://lkml.kernel.org/r/20180717190635.29467-1-jcline@redhat.comSigned-off-by: default avatarJeremy Cline <jcline@redhat.com>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent fde5e903
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
from argparse import ArgumentParser from argparse import ArgumentParser
from ply import lex, yacc from ply import lex, yacc
import locale
import traceback import traceback
import sys import sys
import git import git
...@@ -102,7 +103,7 @@ class id_parser(object): ...@@ -102,7 +103,7 @@ class id_parser(object):
raise ParserException(tok, 'Invalid License ID') raise ParserException(tok, 'Invalid License ID')
self.lastid = id self.lastid = id
elif tok.type == 'EXC': elif tok.type == 'EXC':
if not self.spdx.exceptions.has_key(id): if id not in self.spdx.exceptions:
raise ParserException(tok, 'Invalid Exception ID') raise ParserException(tok, 'Invalid Exception ID')
if self.lastid not in self.spdx.exceptions[id]: if self.lastid not in self.spdx.exceptions[id]:
raise ParserException(tok, 'Exception not valid for license %s' %self.lastid) raise ParserException(tok, 'Exception not valid for license %s' %self.lastid)
...@@ -167,6 +168,7 @@ class id_parser(object): ...@@ -167,6 +168,7 @@ class id_parser(object):
self.curline = 0 self.curline = 0
try: try:
for line in fd: for line in fd:
line = line.decode(locale.getpreferredencoding(False), errors='ignore')
self.curline += 1 self.curline += 1
if self.curline > maxlines: if self.curline > maxlines:
break break
...@@ -201,7 +203,8 @@ def scan_git_tree(tree): ...@@ -201,7 +203,8 @@ def scan_git_tree(tree):
continue continue
if not os.path.isfile(el.path): if not os.path.isfile(el.path):
continue continue
parser.parse_lines(open(el.path), args.maxlines, el.path) with open(el.path, 'rb') as fd:
parser.parse_lines(fd, args.maxlines, el.path)
def scan_git_subtree(tree, path): def scan_git_subtree(tree, path):
for p in path.strip('/').split('/'): for p in path.strip('/').split('/'):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment