From: Martin v. Löwis Date: Sun, 21 Mar 2010 22:02:42 +0000 (+0000) Subject: Merged revisions 78991-78992,78994 via svnmerge from X-Git-Tag: v3.1.3rc1~1044 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e96ac3a33a154b454159c903cfcfcac5ed56215e;p=python Merged revisions 78991-78992,78994 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r78991 | martin.v.loewis | 2010-03-16 12:03:13 +0100 (Di, 16 Mär 2010) | 9 lines Merged revisions 78976 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78976 | martin.v.loewis | 2010-03-15 14:00:17 +0100 (Mo, 15 Mär 2010) | 1 line Issue #6716: Quote -x arguments of compileall in MSI installer. ........ ................ r78992 | martin.v.loewis | 2010-03-16 14:19:21 +0100 (Di, 16 Mär 2010) | 2 lines Issue #6716/2: Backslash-replace error output in compilall. ................ r78994 | martin.v.loewis | 2010-03-16 17:19:47 +0100 (Di, 16 Mär 2010) | 1 line Issue #6716/3: Exclude 2to3 tests from compileall. ................ --- diff --git a/Lib/compileall.py b/Lib/compileall.py index 9451a60aa9..2432842db5 100644 --- a/Lib/compileall.py +++ b/Lib/compileall.py @@ -77,7 +77,10 @@ def compile_dir(dir, maxlevels=10, ddir=None, print('*** Error compiling', fullname, '...') else: print('*** ', end='') - print(err.msg) + # escape non-printable characters in msg + msg = err.msg.encode(sys.stdout.encoding, 'backslashreplace') + msg = msg.decode(sys.stdout.encoding) + print(msg) success = 0 except (SyntaxError, UnicodeError, IOError) as e: if quiet: diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py index 49b644876c..fe1dcf7a72 100644 --- a/Lib/test/test_compileall.py +++ b/Lib/test/test_compileall.py @@ -1,3 +1,4 @@ +import sys import compileall import imp import os @@ -9,6 +10,7 @@ import tempfile import time from test import support import unittest +import io class CompileallTests(unittest.TestCase): @@ -55,8 +57,30 @@ class CompileallTests(unittest.TestCase): self.recreation_check(b'\0\0\0\0') +class EncodingTest(unittest.TestCase): + 'Issue 6716: compileall should escape source code when printing errors to stdout.' + + def setUp(self): + self.directory = tempfile.mkdtemp() + self.source_path = os.path.join(self.directory, '_test.py') + with open(self.source_path, 'w', encoding='utf-8') as file: + file.write('# -*- coding: utf-8 -*-\n') + file.write('print u"\u20ac"\n') + + def tearDown(self): + shutil.rmtree(self.directory) + + def test_error(self): + try: + orig_stdout = sys.stdout + sys.stdout = io.TextIOWrapper(io.BytesIO(),encoding='ascii') + compileall.compile_dir(self.directory) + finally: + sys.stdout = orig_stdout + def test_main(): - support.run_unittest(CompileallTests) + support.run_unittest(CompileallTests, + EncodingTest) if __name__ == "__main__": diff --git a/Misc/NEWS b/Misc/NEWS index 9d42ce6922..57d084d63a 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -9,9 +9,17 @@ What's New in Python 3.1.3? *Release date: 20XX-XX-XX* +Library +------- + +- Issue #6716/2: Backslash-replace error output in compilall. + Build ----- +- Issue #6716: Quote -x arguments of compileall in MSI installer. + Exclude 2to3 tests from compileall. + - Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py index cd67e996c0..027af07556 100644 --- a/Tools/msi/msi.py +++ b/Tools/msi/msi.py @@ -403,7 +403,7 @@ def add_ui(db): ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py2_ "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [