sbang: use utf-8 for encoding when patching (#13490)
This fixes a UnicodeDecodeError in the sbang patching function.
This commit is contained in:
parent
eb286bb80f
commit
2a9d6b9fbf
1 changed files with 13 additions and 4 deletions
|
@ -6,6 +6,7 @@
|
|||
import os
|
||||
import stat
|
||||
import re
|
||||
import sys
|
||||
|
||||
import llnl.util.tty as tty
|
||||
|
||||
|
@ -33,8 +34,12 @@ def shebang_too_long(path):
|
|||
|
||||
def filter_shebang(path):
|
||||
"""Adds a second shebang line, using sbang, at the beginning of a file."""
|
||||
with open(path, 'r') as original_file:
|
||||
with open(path, 'rb') as original_file:
|
||||
original = original_file.read()
|
||||
if sys.version_info >= (2, 7):
|
||||
original = original.decode(encoding='UTF-8')
|
||||
else:
|
||||
original = original.decode('UTF-8')
|
||||
|
||||
# This line will be prepended to file
|
||||
new_sbang_line = '#!/bin/bash %s/bin/sbang\n' % spack.paths.prefix
|
||||
|
@ -61,9 +66,13 @@ def filter_shebang(path):
|
|||
saved_mode = st.st_mode
|
||||
os.chmod(path, saved_mode | stat.S_IWRITE)
|
||||
|
||||
with open(path, 'w') as new_file:
|
||||
new_file.write(new_sbang_line)
|
||||
new_file.write(original)
|
||||
with open(path, 'wb') as new_file:
|
||||
if sys.version_info >= (2, 7):
|
||||
new_file.write(new_sbang_line.encode(encoding='UTF-8'))
|
||||
new_file.write(original.encode(encoding='UTF-8'))
|
||||
else:
|
||||
new_file.write(new_sbang_line.encode('UTF-8'))
|
||||
new_file.write(original.encode('UTF-8'))
|
||||
|
||||
# Restore original permissions.
|
||||
if saved_mode is not None:
|
||||
|
|
Loading…
Reference in a new issue