mercurial/encoding.py
changeset 43503 313e3a279828
parent 43496 2ade00f3b03b
child 43506 9f70512ae2cf
equal deleted inserted replaced
43502:c093cc6e6c99 43503:313e3a279828
   180             # make sure string is actually stored in UTF-8
   180             # make sure string is actually stored in UTF-8
   181             u = s.decode('UTF-8')
   181             u = s.decode('UTF-8')
   182             if encoding == b'UTF-8':
   182             if encoding == b'UTF-8':
   183                 # fast path
   183                 # fast path
   184                 return s
   184                 return s
   185             r = u.encode(_sysstr(encoding), r"replace")
   185             r = u.encode(_sysstr(encoding), "replace")
   186             if u == r.decode(_sysstr(encoding)):
   186             if u == r.decode(_sysstr(encoding)):
   187                 # r is a safe, non-lossy encoding of s
   187                 # r is a safe, non-lossy encoding of s
   188                 return safelocalstr(r)
   188                 return safelocalstr(r)
   189             return localstr(s, r)
   189             return localstr(s, r)
   190         except UnicodeDecodeError:
   190         except UnicodeDecodeError:
   191             # we should only get here if we're looking at an ancient changeset
   191             # we should only get here if we're looking at an ancient changeset
   192             try:
   192             try:
   193                 u = s.decode(_sysstr(fallbackencoding))
   193                 u = s.decode(_sysstr(fallbackencoding))
   194                 r = u.encode(_sysstr(encoding), r"replace")
   194                 r = u.encode(_sysstr(encoding), "replace")
   195                 if u == r.decode(_sysstr(encoding)):
   195                 if u == r.decode(_sysstr(encoding)):
   196                     # r is a safe, non-lossy encoding of s
   196                     # r is a safe, non-lossy encoding of s
   197                     return safelocalstr(r)
   197                     return safelocalstr(r)
   198                 return localstr(u.encode('UTF-8'), r)
   198                 return localstr(u.encode('UTF-8'), r)
   199             except UnicodeDecodeError:
   199             except UnicodeDecodeError:
   200                 u = s.decode("utf-8", "replace")  # last ditch
   200                 u = s.decode("utf-8", "replace")  # last ditch
   201                 # can't round-trip
   201                 # can't round-trip
   202                 return u.encode(_sysstr(encoding), r"replace")
   202                 return u.encode(_sysstr(encoding), "replace")
   203     except LookupError as k:
   203     except LookupError as k:
   204         raise error.Abort(k, hint=b"please check your locale settings")
   204         raise error.Abort(k, hint=b"please check your locale settings")
   205 
   205 
   206 
   206 
   207 def fromlocal(s):
   207 def fromlocal(s):