Commit a31ae812 authored by Jim Fulton's avatar Jim Fulton

Merge pull request #68 from reinout/reinout-distutils-encoding-fix

Reinout distutils script encoding fix for #65
parents 9e36ccbe b2ad694d
......@@ -46,6 +46,8 @@ default_index_url = os.environ.get(
logger = logging.getLogger('zc.buildout.easy_install')
url_match = re.compile('[a-z0-9+.-]+://').match
is_source_encoding_line = re.compile('coding[:=]\s*([-\w.]+)').search
# Source encoding regex from http://www.python.org/dev/peps/pep-0263/
is_win32 = sys.platform == 'win32'
is_jython = sys.platform.startswith('java')
......@@ -1046,12 +1048,18 @@ def _distutils_script(path, dest, script_content, initialization, rsetup):
if not ('#!' in lines[0]) and ('python' in lines[0]):
# The script doesn't follow distutil's rules. Ignore it.
return []
source_encoding_line = ''
original_content = ''.join(lines[1:])
if (len(lines) > 1) and is_source_encoding_line(lines[1]):
# The second line contains a source encoding line. Copy it verbatim.
source_encoding_line = lines[1].rstrip()
original_content = ''.join(lines[2:])
python = _safe_arg(sys.executable)
contents = distutils_script_template % dict(
python = python,
source_encoding_line = source_encoding_line,
path = path,
initialization = initialization,
relative_paths_setup = rsetup,
......@@ -1118,6 +1126,7 @@ if __name__ == '__main__':
distutils_script_template = script_header + '''\
%(source_encoding_line)s
%(relative_paths_setup)s
import sys
sys.path[0:0] = [
......
......@@ -939,10 +939,12 @@ It also works for zipped eggs:
Distutils copies the script files verbatim, apart from a line at the top that
looks like ``#!/usr/bin/python``, which gets replaced by the actual python
interpreter. Buildout does the same, but additionally also adds the sys.path
like for the console_scripts:
like for the console_scripts. Note that the second line in the scripts can
contain a source encoding hint; buildout retains it.
>>> cat(distbin, 'distutilsscript')
#!/usr/local/bin/python2.7
# -*- coding: utf-8 -*-
<BLANKLINE>
import sys
sys.path[0:0] = [
......
......@@ -2899,6 +2899,7 @@ def create_sample_eggs(test, executable=sys.executable):
write(
tmp, 'distutilsscript',
'#!/usr/bin/python\n'
'# -*- coding: utf-8 -*-\n'
'import sys; sys.stdout.write("distutils!\\n")\n'
)
write(
......
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