summaryrefslogtreecommitdiffstats
path: root/Tools/scripts
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-01-09 16:41:59 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-01-09 16:41:59 (GMT)
commit7282ff6d5b56825e74c0715aea86e927d2fd339f (patch)
tree5bdc07d3601764c5cecdb78c276151f4ba03eef6 /Tools/scripts
parent766e10c4a808727ecefca7dec59819121477d27f (diff)
parent768c16ce0273a74fa846cc388753280b17b02cfc (diff)
downloadcpython-7282ff6d5b56825e74c0715aea86e927d2fd339f.zip
cpython-7282ff6d5b56825e74c0715aea86e927d2fd339f.tar.gz
cpython-7282ff6d5b56825e74c0715aea86e927d2fd339f.tar.bz2
Issue #18960: Fix bugs with Python source code encoding in the second line.
* The first line of Python script could be executed twice when the source encoding (not equal to 'utf-8') was specified on the second line. * Now the source encoding declaration on the second line isn't effective if the first line contains anything except a comment. * As a consequence, 'python -x' works now again with files with the source encoding declarations specified on the second file, and can be used again to make Python batch files on Windows. * The tokenize module now ignore the source encoding declaration on the second line if the first line contains anything except a comment. * IDLE now ignores the source encoding declaration on the second line if the first line contains anything except a comment. * 2to3 and the findnocoding.py script now ignore the source encoding declaration on the second line if the first line contains anything except a comment.
Diffstat (limited to 'Tools/scripts')
-rwxr-xr-xTools/scripts/findnocoding.py4
1 files changed, 3 insertions, 1 deletions
diff --git a/Tools/scripts/findnocoding.py b/Tools/scripts/findnocoding.py
index c0997d6..5f3795e 100755
--- a/Tools/scripts/findnocoding.py
+++ b/Tools/scripts/findnocoding.py
@@ -33,6 +33,7 @@ except ImportError:
decl_re = re.compile(rb'^[ \t\f]*#.*coding[:=][ \t]*([-\w.]+)')
+blank_re = re.compile(rb'^[ \t\f]*(?:[#\r\n]|$)')
def get_declaration(line):
match = decl_re.match(line)
@@ -58,7 +59,8 @@ def needs_declaration(fullpath):
line1 = infile.readline()
line2 = infile.readline()
- if get_declaration(line1) or get_declaration(line2):
+ if (get_declaration(line1) or
+ blank_re.match(line1) and get_declaration(line2)):
# the file does have an encoding declaration, so trust it
return False