changeset 13941:924f40b977ee

merge with stable
author Matt Mackall <mpm@selenic.com>
date Fri, 15 Apr 2011 23:46:59 -0500
parents ed22a26fc7c6 (current diff) b7b26e54e37a (diff)
children 88f0e41d8802
files
diffstat 2 files changed, 14 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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:
--- 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
+