~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: John Arbash Meinel
  • Date: 2006-06-11 02:46:51 UTC
  • mto: (1711.7.2 win32)
  • mto: This revision was merged to the branch mainline in revision 1796.
  • Revision ID: john@arbash-meinel.com-20060611024651-720ff62ba21f9690
Pull out sys.stdout.encoding handling into a separate function so it can be tested, and used elsewhere.

Show diffs side-by-side

added added

removed removed

Lines of Context:
285
285
        return shutil.rmtree(path, ignore_errors, onerror)
286
286
 
287
287
 
 
288
def get_terminal_encoding():
 
289
    """Find the best encoding for printing to the screen.
 
290
 
 
291
    This attempts to check both sys.stdout and sys.stdin to see
 
292
    what encoding they are in, and if that fails it falls back to
 
293
    bzrlib.user_encoding.
 
294
    The problem is that on Windows, locale.getpreferredencoding()
 
295
    is not the same encoding as that used by the console:
 
296
    http://mail.python.org/pipermail/python-list/2003-May/162357.html
 
297
 
 
298
    On my standard US Windows XP, the preferred encoding is
 
299
    cp1252, but the console is cp437
 
300
    """
 
301
    output_encoding = getattr(sys.stdout, 'encoding', None)
 
302
    if not output_encoding:
 
303
        input_encoding = getattr(sys.stdin, 'encoding', None)
 
304
        if not input_encoding:
 
305
            output_encoding = bzrlib.user_encoding
 
306
            mutter('encoding stdout as bzrlib.user_encoding %r', output_encoding)
 
307
        else:
 
308
            output_encoding = input_encoding
 
309
            mutter('encoding stdout as sys.stdin encoding %r', output_encoding)
 
310
    else:
 
311
        mutter('encoding stdout as sys.stdout encoding %r', output_encoding)
 
312
    return output_encoding
 
313
 
 
314
 
288
315
def normalizepath(f):
289
316
    if hasattr(os.path, 'realpath'):
290
317
        F = realpath