From acbcedd18601b56d0ed81653cff3041632ec9e83 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Thu, 17 Oct 2013 12:17:33 +0200 Subject: [PATCH] Fix #45: Convert strings to local encoding before printing --- git-hub | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/git-hub b/git-hub index 4e1e334..3a6c4c6 100755 --- a/git-hub +++ b/git-hub @@ -58,38 +58,43 @@ ERR = 0 # Output functions, all use the str.format() function for formatting ######################################################################## +def localeprintf(stream, fmt='', *args, **kwargs): + encoding = sys.getfilesystemencoding() + msg = fmt.decode(encoding, 'replace').format(*args, **kwargs) + '\n' + stream.write(msg.encode(encoding, 'replace')) + def debugf(fmt='', *args, **kwargs): if verbose < DEBUG: return - sys.stdout.write(fmt.format(*args, **kwargs) + '\n') + localeprintf(sys.stdout, fmt, *args, **kwargs) def infof(fmt='', *args, **kwargs): if verbose < INFO: return - sys.stdout.write(fmt.format(*args, **kwargs) + '\n') + localeprintf(sys.stdout, fmt, *args, **kwargs) def warnf(fmt='', *args, **kwargs): if verbose < WARN: return + msg = '' if sys.stderr.isatty(): - sys.stderr.write('\033[33m') - sys.stderr.write('Warning: ') - sys.stderr.write(fmt.format(*args, **kwargs)) + msg += '\033[33m' + msg += 'Warning: ' + fmt.format(*args, **kwargs) if sys.stderr.isatty(): - sys.stderr.write('\033[0m') - sys.stderr.write('\n') + msg += '\033[0m' + localeprintf(sys.stderr, '{}', msg) sys.stderr.flush() def errf(fmt='', *args, **kwargs): if verbose < ERR: return + msg = '' if sys.stderr.isatty(): - sys.stderr.write('\033[31m') - sys.stderr.write('Error: ') - sys.stderr.write(fmt.format(*args, **kwargs)) + msg += '\033[31m' + msg += 'Error: ' + fmt.format(*args, **kwargs) if sys.stderr.isatty(): - sys.stderr.write('\033[0m') - sys.stderr.write('\n') + msg += '\033[0m' + localeprintf(sys.stderr, '{}', msg) sys.stderr.flush() def die(fmt='', *args, **kwargs):