diff options
author | W. Trevor King <wking@tremily.us> | 2014-02-10 10:40:24 -0800 |
---|---|---|
committer | David Bremner <david@tethera.net> | 2014-02-10 21:04:55 -0400 |
commit | fd29d3f4fba4c5c88244b13de443c016d23da17b (patch) | |
tree | a8261f99195453084a3b793274ef8a86b9eeb763 /devel | |
parent | ee6b5c372f724d2352d155736b81d2d46130c929 (diff) |
nmbug-status: Decode Popen output using the user's locale
Avoid:
$ ./nmbug-status --list-views
Traceback (most recent call last):
File "./nmbug-status", line 47, in <module>
'cat-file', 'blob', sha1+':status-config.json'],
TypeError: can't concat bytes to str
by explicitly converting the byte-stream read from Popen into a
Unicode string. On Python 2, this conversion is str -> unicode; on
Python 3 it is bytes -> str.
_ENCODING is derived from the user's locale (or system default) in an
attempt to match Git's output encoding. It may be more robust to skip
the encoding/decoding by using a Python wrapper like pygit2 [1] for
Git access. That's a fairly heavy dependency though, and using the
locale will probably work.
[1]: http://www.pygit2.org/
Diffstat (limited to 'devel')
-rwxr-xr-x | devel/nmbug/nmbug-status | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/devel/nmbug/nmbug-status b/devel/nmbug/nmbug-status index 65251764..a7a391da 100755 --- a/devel/nmbug/nmbug-status +++ b/devel/nmbug/nmbug-status @@ -8,8 +8,10 @@ from __future__ import print_function +import codecs import datetime import email.utils +import locale import urllib import json import argparse @@ -17,6 +19,10 @@ import os import sys import subprocess + +_ENCODING = locale.getpreferredencoding() or sys.getdefaultencoding() + + # parse command line arguments parser = argparse.ArgumentParser() @@ -37,15 +43,16 @@ else: nmbhome = os.getenv('NMBGIT', os.path.expanduser('~/.nmbug')) # read only the first line from the pipe - sha1 = subprocess.Popen(['git', '--git-dir', nmbhome, - 'show-ref', '-s', 'config'], - stdout=subprocess.PIPE).stdout.readline() - - sha1 = sha1.rstrip() - - fp = subprocess.Popen(['git', '--git-dir', nmbhome, - 'cat-file', 'blob', sha1+':status-config.json'], - stdout=subprocess.PIPE).stdout + sha1_bytes = subprocess.Popen( + ['git', '--git-dir', nmbhome, 'show-ref', '-s', 'config'], + stdout=subprocess.PIPE).stdout.readline() + sha1 = sha1_bytes.decode(_ENCODING).rstrip() + + fp_byte_stream = subprocess.Popen( + ['git', '--git-dir', nmbhome, 'cat-file', 'blob', + sha1+':status-config.json'], + stdout=subprocess.PIPE).stdout + fp = codecs.getreader(encoding=_ENCODING)(stream=fp_byte_stream) config = json.load(fp) |