Mercurial > hg
changeset 3843:abaa2cd00d2b
make transcoding more robust
default to ASCII
abort if unknown encoding
wrap abort strings with _
add test
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 09 Dec 2006 12:46:01 -0600 |
parents | 47c634bf1e92 |
children | 3ba82c3f4bc3 |
files | mercurial/util.py tests/test-encoding tests/test-encoding.out |
diffstat | 3 files changed, 11 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/util.py Sat Dec 09 18:49:24 2006 +0100 +++ b/mercurial/util.py Sat Dec 09 12:46:01 2006 -0600 @@ -17,7 +17,8 @@ demandload(globals(), "cStringIO errno getpass popen2 re shutil sys tempfile") demandload(globals(), "os threading time calendar ConfigParser locale") -_encoding = os.environ.get("HGENCODING") or locale.getpreferredencoding() +_encoding = os.environ.get("HGENCODING") or locale.getpreferredencoding() \ + or "ascii" _encodingmode = os.environ.get("HGENCODINGMODE", "strict") _fallbackencoding = 'ISO-8859-1' @@ -35,6 +36,8 @@ try: u = s.decode(e) # attempt strict decoding return u.encode(_encoding, "replace") + except LookupError, k: + raise Abort(_("%s, please check your locale settings") % k) except UnicodeDecodeError: pass u = s.decode("utf-8", "replace") # last ditch @@ -54,7 +57,9 @@ return s.decode(_encoding, _encodingmode).encode("utf-8") except UnicodeDecodeError, inst: sub = s[max(0, inst.start-10):inst.start+10] - raise Abort("decoding near '%s': %s!\n" % (sub, inst)) + raise Abort("decoding near '%s': %s!" % (sub, inst)) + except LookupError, k: + raise Abort(_("%s, please check your locale settings") % k) def locallen(s): """Find the length in characters of a local string""" @@ -70,7 +75,7 @@ return u.encode(_encoding, _encodingmode) except UnicodeDecodeError, inst: sub = s[max(0, inst.start-10), inst.start+10] - raise Abort("decoding near '%s': %s!\n" % (sub, inst)) + raise Abort(_("decoding near '%s': %s!\n") % (sub, inst)) # used by parsedate defaultdateformats = (
--- a/tests/test-encoding Sat Dec 09 18:49:24 2006 +0100 +++ b/tests/test-encoding Sat Dec 09 12:46:01 2006 -0600 @@ -52,3 +52,5 @@ echo 'fallbackencoding = koi8-r' >> .hg/hgrc echo % utf-8 HGENCODING=utf-8 hg log + +HGENCODING=dolphin hg log \ No newline at end of file
--- a/tests/test-encoding.out Sat Dec 09 18:49:24 2006 +0100 +++ b/tests/test-encoding.out Sat Dec 09 12:46:01 2006 -0600 @@ -10,7 +10,6 @@ ? latin-1-tag ? utf-8 abort: decoding near ' encoded: é': 'ascii' codec can't decode byte 0xe9 in position 20: ordinal not in range(128)! - transaction abort! rollback completed % these should work @@ -165,3 +164,4 @@ date: Mon Jan 12 13:46:40 1970 +0000 summary: latin-1 e': И = u'\xe9' +abort: unknown encoding: dolphin, please check your locale settings