Merged revisions 75669-75671 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r75669 | tarek.ziade | 2009-10-24 17:10:37 +0200 (Sat, 24 Oct 2009) | 1 line

  Issue #7071: byte-compilation in Distutils now looks at sys.dont_write_bytecode
........
  r75670 | tarek.ziade | 2009-10-24 17:19:03 +0200 (Sat, 24 Oct 2009) | 1 line

  fixed finally state in distutils.test_util
........
  r75671 | tarek.ziade | 2009-10-24 17:51:30 +0200 (Sat, 24 Oct 2009) | 1 line

  fixed warning and error message
........
This commit is contained in:
Tarek Ziadé 2009-10-25 23:08:47 +00:00
parent 4824c25e75
commit 04fe7c01a8
8 changed files with 67 additions and 5 deletions

View File

@ -5,6 +5,7 @@ Implements the Distutils 'build_py' command."""
__revision__ = "$Id$" __revision__ = "$Id$"
import os import os
import sys
from glob import glob from glob import glob
from distutils.core import Command from distutils.core import Command
@ -369,6 +370,10 @@ class build_py(Command):
self.build_module(module, module_file, package) self.build_module(module, module_file, package)
def byte_compile(self, files): def byte_compile(self, files):
if sys.dont_write_bytecode:
self.warn('byte-compiling is disabled, skipping.')
return
from distutils.util import byte_compile from distutils.util import byte_compile
prefix = self.build_lib prefix = self.build_lib
if prefix[-1] != os.sep: if prefix[-1] != os.sep:

View File

@ -6,6 +6,8 @@ Implements the Distutils 'install_lib' command
__revision__ = "$Id$" __revision__ = "$Id$"
import os import os
import sys
from distutils.core import Command from distutils.core import Command
from distutils.errors import DistutilsOptionError from distutils.errors import DistutilsOptionError
@ -115,6 +117,10 @@ class install_lib(Command):
return outfiles return outfiles
def byte_compile(self, files): def byte_compile(self, files):
if sys.dont_write_bytecode:
self.warn('byte-compiling is disabled, skipping.')
return
from distutils.util import byte_compile from distutils.util import byte_compile
# Get the "--root" directory supplied to the "install" command, # Get the "--root" directory supplied to the "install" command,

View File

@ -74,6 +74,8 @@ class DistutilsInternalError (DistutilsError):
class DistutilsTemplateError (DistutilsError): class DistutilsTemplateError (DistutilsError):
"""Syntax error in a file list template.""" """Syntax error in a file list template."""
class DistutilsByteCompileError(DistutilsError):
"""Byte compile error."""
# Exception classes used by the CCompiler implementation classes # Exception classes used by the CCompiler implementation classes
class CCompilerError (Exception): class CCompilerError (Exception):

View File

@ -89,6 +89,22 @@ class BuildPyTestCase(support.TempdirManager,
os.chdir(cwd) os.chdir(cwd)
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
def test_dont_write_bytecode(self):
# makes sure byte_compile is not used
pkg_dir, dist = self.create_dist()
cmd = build_py(dist)
cmd.compile = 1
cmd.optimize = 1
old_dont_write_bytecode = sys.dont_write_bytecode
sys.dont_write_bytecode = True
try:
cmd.byte_compile([])
finally:
sys.dont_write_bytecode = old_dont_write_bytecode
self.assertTrue('byte-compiling is disabled' in self.logs[0][1])
def test_suite(): def test_suite():
return unittest.makeSuite(BuildPyTestCase) return unittest.makeSuite(BuildPyTestCase)

View File

@ -31,6 +31,8 @@ class InstallLibTestCase(support.TempdirManager,
cmd.finalize_options() cmd.finalize_options()
self.assertEquals(cmd.optimize, 2) self.assertEquals(cmd.optimize, 2)
@unittest.skipUnless(not sys.dont_write_bytecode,
'byte-compile not supported')
def test_byte_compile(self): def test_byte_compile(self):
pkg_dir, dist = self.create_dist() pkg_dir, dist = self.create_dist()
cmd = install_lib(dist) cmd = install_lib(dist)
@ -76,6 +78,21 @@ class InstallLibTestCase(support.TempdirManager,
# get_input should return 2 elements # get_input should return 2 elements
self.assertEquals(len(cmd.get_inputs()), 2) self.assertEquals(len(cmd.get_inputs()), 2)
def test_dont_write_bytecode(self):
# makes sure byte_compile is not used
pkg_dir, dist = self.create_dist()
cmd = install_lib(dist)
cmd.compile = 1
cmd.optimize = 1
old_dont_write_bytecode = sys.dont_write_bytecode
sys.dont_write_bytecode = True
try:
cmd.byte_compile([])
finally:
sys.dont_write_bytecode = old_dont_write_bytecode
self.assertTrue('byte-compiling is disabled' in self.logs[0][1])
def test_suite(): def test_suite():
return unittest.makeSuite(InstallLibTestCase) return unittest.makeSuite(InstallLibTestCase)

View File

@ -1,7 +1,4 @@
"""Tests for distutils.util.""" """Tests for distutils.util."""
# not covered yet:
# - byte_compile
#
import os import os
import sys import sys
import unittest import unittest
@ -9,11 +6,12 @@ from copy import copy
from io import BytesIO from io import BytesIO
import subprocess import subprocess
from distutils.errors import DistutilsPlatformError from distutils.errors import DistutilsPlatformError, DistutilsByteCompileError
from distutils.util import (get_platform, convert_path, change_root, from distutils.util import (get_platform, convert_path, change_root,
check_environ, split_quoted, strtobool, check_environ, split_quoted, strtobool,
rfc822_escape, get_compiler_versions, rfc822_escape, get_compiler_versions,
_find_exe_version, _MAC_OS_X_LD_VERSION) _find_exe_version, _MAC_OS_X_LD_VERSION,
byte_compile)
from distutils import util from distutils import util
from distutils.sysconfig import get_config_vars from distutils.sysconfig import get_config_vars
from distutils import sysconfig from distutils import sysconfig
@ -349,6 +347,16 @@ class UtilTestCase(support.EnvironGuard, unittest.TestCase):
res = get_compiler_versions() res = get_compiler_versions()
self.assertEquals(res[2], None) self.assertEquals(res[2], None)
def test_dont_write_bytecode(self):
# makes sure byte_compile raise a DistutilsError
# if sys.dont_write_bytecode is True
old_dont_write_bytecode = sys.dont_write_bytecode
sys.dont_write_bytecode = True
try:
self.assertRaises(DistutilsByteCompileError, byte_compile, [])
finally:
sys.dont_write_bytecode = old_dont_write_bytecode
def test_suite(): def test_suite():
return unittest.makeSuite(UtilTestCase) return unittest.makeSuite(UtilTestCase)

View File

@ -13,6 +13,7 @@ from distutils.dep_util import newer
from distutils.spawn import spawn, find_executable from distutils.spawn import spawn, find_executable
from distutils import log from distutils import log
from distutils.version import LooseVersion from distutils.version import LooseVersion
from distutils.errors import DistutilsByteCompileError
def get_platform(): def get_platform():
"""Return a string that identifies the current platform. """Return a string that identifies the current platform.
@ -444,6 +445,10 @@ def byte_compile(py_files, optimize=0, force=0, prefix=None, base_dir=None,
generated in indirect mode; unless you know what you're doing, leave generated in indirect mode; unless you know what you're doing, leave
it set to None. it set to None.
""" """
# nothing is done if sys.dont_write_bytecode is True
if sys.dont_write_bytecode:
raise DistutilsByteCompileError('byte-compiling is disabled.')
# First, if the caller didn't force us into direct or indirect mode, # First, if the caller didn't force us into direct or indirect mode,
# figure out which mode we should be in. We take a conservative # figure out which mode we should be in. We take a conservative
# approach: choose direct mode *only* if the current interpreter is # approach: choose direct mode *only* if the current interpreter is

View File

@ -1152,6 +1152,9 @@ Core and Builtins
Library Library
------- -------
- Issue #7071: byte-compilation in Distutils is now done with respect to
sys.dont_write_bytecode.
- Issue #7066: archive_util.make_archive now restores the cwd if an error is - Issue #7066: archive_util.make_archive now restores the cwd if an error is
raised. Initial patch by Ezio Melotti. raised. Initial patch by Ezio Melotti.