avoid TB on python3 due to encoding within subprocess pipeline

subprocess.getstatusoutput can fail with utf8 UnicodeDecodeError
http://bugs.python.org/issue9922

Resolves this TB on python3, which was
caused by outputting binary data to the 'tee' command...

Traceback (most recent call last):
  File "/home/sandbox/test/functional/multiproject_tests.py", line 133, in test_build_tgz
    artifacts = tito('build --tgz')
  File "/home/sandbox/test/functional/fixture.py", line 103, in tito
    return CLI().main(argstring.split(' '))
  File "/home/sandbox/src/tito/cli.py", line 222, in main
    return module.main(argv)
  File "/home/sandbox/src/tito/cli.py", line 390, in main
    return builder.run(self.options)
  File "/home/sandbox/src/tito/builder/main.py", line 130, in run
    self.tgz()
  File "/home/sandbox/src/tito/builder/main.py", line 401, in tgz
    self._setup_sources()
  File "/home/sandbox/src/tito/builder/main.py", line 436, in _setup_sources
    os.path.join(self.rpmbuild_sourcedir, self.tgz_filename))
  File "/home/sandbox/src/tito/common.py", line 518, in create_tgz
    run_command(archive_cmd)
  File "/home/sandbox/src/tito/common.py", line 221, in run_command
    (status, output) = getstatusoutput(command)
  File "/home/sandbox/src/tito/compat.py", line 45, in getstatusoutput
    raise(err)
  File "/home/sandbox/src/tito/compat.py", line 41, in getstatusoutput
    (status, output) = subprocess.getstatusoutput(cmd)
  File "/usr/lib64/python3.3/subprocess.py", line 683, in getstatusoutput
    text = pipe.read()
  File "/usr/lib64/python3.3/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
nose.proxy.UnicodeDecodeError: UnicodeDecodeError: ascii
This commit is contained in:
Paul Morgan 2014-03-09 22:42:24 +00:00
parent a398833e72
commit bcf29ea34b

View file

@ -541,7 +541,7 @@ def create_tgz(git_root, prefix, commit, relative_dir,
'%s > /dev/null' % git_archive_cmd) '%s > /dev/null' % git_archive_cmd)
# If we're still alive, the previous command worked # If we're still alive, the previous command worked
archive_cmd = ('%s | %s %s %s | gzip -n -c - | tee %s' % ( archive_cmd = ('%s | %s %s %s | gzip -n -c - > %s' % (
git_archive_cmd, timestamp_script, git_archive_cmd, timestamp_script,
timestamp, commit, dest_tgz)) timestamp, commit, dest_tgz))
debug(archive_cmd) debug(archive_cmd)