import lit.ShUtil as ShUtil
import lit.Test as Test
import lit.util
-from lit.util import to_bytes, to_string
+from lit.util import to_bytes, to_string, to_unicode
from lit.BooleanExpression import BooleanExpression
class InternalShellError(Exception):
stderr = StringIO()
exitCode = 0
for dir in args:
+ cwd = cmd_shenv.cwd
+ dir = to_unicode(dir) if kIsWindows else to_bytes(dir)
+ cwd = to_unicode(cwd) if kIsWindows else to_bytes(cwd)
if not os.path.isabs(dir):
- dir = os.path.realpath(os.path.join(cmd_shenv.cwd, dir))
+ dir = os.path.realpath(os.path.join(cwd, dir))
if parent:
lit.util.mkdir_p(dir)
else:
stderr = StringIO()
exitCode = 0
for path in args:
+ cwd = cmd_shenv.cwd
+ path = to_unicode(path) if kIsWindows else to_bytes(path)
+ cwd = to_unicode(cwd) if kIsWindows else to_bytes(cwd)
if not os.path.isabs(path):
- path = os.path.realpath(os.path.join(cmd_shenv.cwd, path))
+ path = os.path.realpath(os.path.join(cwd, path))
if force and not os.path.exists(path):
continue
try:
else:
# Make sure relative paths are relative to the cwd.
redir_filename = os.path.join(cmd_shenv.cwd, name)
+ redir_filename = to_unicode(redir_filename) \
+ if kIsWindows else to_bytes(redir_filename)
fd = open(redir_filename, mode)
# Workaround a Win32 and/or subprocess bug when appending.
#
for i, ln in enumerate(commands):
commands[i] = re.sub(kPdbgRegex, ": '\\1'; ", ln)
if test.config.pipefail:
- f.write('set -o pipefail;')
+ f.write(b'set -o pipefail;' if mode == 'wb' else 'set -o pipefail;')
if litConfig.echo_all_commands:
- f.write('set -x;')
- f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
- f.write('\n')
+ f.write(b'set -x;' if mode == 'wb' else 'set -x;')
+ if sys.version_info > (3,0) and mode == 'wb':
+ f.write(bytes('{ ' + '; } &&\n{ '.join(commands) + '; }', 'utf-8'))
+ else:
+ f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
+ f.write(b'\n' if mode == 'wb' else '\n')
f.close()
if isWin32CMDEXE:
raise TypeError('not sure how to convert %s to %s' % (type(b), str))
+def to_unicode(s):
+ """Return the parameter as type which supports unicode, possibly decoding
+ it.
+
+ In Python2, this is the unicode type. In Python3 it's the str type.
+
+ """
+ if isinstance(s, bytes):
+ # In Python2, this branch is taken for both 'str' and 'bytes'.
+ # In Python3, this branch is taken only for 'bytes'.
+ return s.decode('utf-8')
+ return s
+
+
def detectCPUs():
"""Detects the number of CPUs on a system.