# HG changeset patch # User Matt Mackall # Date 1302929219 18000 # Node ID 924f40b977ee72ef7a3c1dce38b6aaa8c24198cd # Parent ed22a26fc7c6d7ee436c8b4dc33ff1efc349a522# Parent b7b26e54e37a9c5e9673f5ef2d9448f426ef2307 merge with stable diff -r ed22a26fc7c6 -r 924f40b977ee mercurial/encoding.py --- a/mercurial/encoding.py Fri Apr 15 20:35:59 2011 -0500 +++ b/mercurial/encoding.py Fri Apr 15 23:46:59 2011 -0500 @@ -95,11 +95,15 @@ for e in ('UTF-8', fallbackencoding): try: u = s.decode(e) # attempt strict decoding - if e == 'UTF-8': - return localstr(s, u.encode(encoding, "replace")) + r = u.encode(encoding, "replace") + if u == r.decode(encoding): + # r is a safe, non-lossy encoding of s + return r + elif e == 'UTF-8': + return localstr(s, r) else: - return localstr(u.encode('UTF-8'), - u.encode(encoding, "replace")) + return localstr(u.encode('UTF-8'), r) + except LookupError, k: raise error.Abort("%s, please check your locale settings" % k) except UnicodeDecodeError: diff -r ed22a26fc7c6 -r 924f40b977ee tests/test-encoding.t --- a/tests/test-encoding.t Fri Apr 15 20:35:59 2011 -0500 +++ b/tests/test-encoding.t Fri Apr 15 23:46:59 2011 -0500 @@ -241,3 +241,9 @@ [255] $ cp latin-1-tag .hg/branch $ HGENCODING=latin-1 hg ci -m 'auto-promote legacy name' + +Test roundtrip encoding of lookup tables when not using UTF-8 (issue2763) + + $ HGENCODING=latin-1 hg up `cat latin-1-tag` + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved +