Mercurial > hg
changeset 16274:5d75eb8568d1
encoding: tune fast-path of tolocal a bit
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 22 Mar 2012 16:54:46 -0500 |
parents | 12e3f93b1cbc |
children | 531e69ff348f |
files | mercurial/commands.py mercurial/encoding.py |
diffstat | 2 files changed, 25 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Thu Mar 15 16:57:19 2012 +0100 +++ b/mercurial/commands.py Thu Mar 22 16:54:46 2012 -0500 @@ -3622,8 +3622,9 @@ try: try: wlock = repo.wlock() - lock = repo.lock() - tr = repo.transaction('import') + if not opts.get('no_commit'): + lock = repo.lock() + tr = repo.transaction('import') parents = repo.parents() for patchurl in patches: if patchurl == '-': @@ -3649,7 +3650,8 @@ if not haspatch: raise util.Abort(_('%s: no diffs found') % patchurl) - tr.close() + if tr: + tr.close() if msgs: repo.savecommitmessage('\n* * *\n'.join(msgs)) except:
--- a/mercurial/encoding.py Thu Mar 15 16:57:19 2012 +0100 +++ b/mercurial/encoding.py Thu Mar 22 16:54:46 2012 -0500 @@ -92,24 +92,32 @@ 'foo: \\xc3\\xa4' """ - for e in ('UTF-8', fallbackencoding): + try: try: - u = s.decode(e) # attempt strict decoding + # make sure string is actually stored in UTF-8 + u = s.decode('UTF-8') + if encoding == 'UTF-8': + # fast path + return s 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(s, r) + except UnicodeDecodeError: + # we should only get here if we're looking at an ancient changeset + try: + u = s.decode(fallbackencoding) + r = u.encode(encoding, "replace") + if u == r.decode(encoding): + # r is a safe, non-lossy encoding of s + return r return localstr(u.encode('UTF-8'), r) - - except LookupError, k: - raise error.Abort(k, hint="please check your locale settings") - except UnicodeDecodeError: - pass - u = s.decode("utf-8", "replace") # last ditch - return u.encode(encoding, "replace") # can't round-trip + except UnicodeDecodeError: + u = s.decode("utf-8", "replace") # last ditch + return u.encode(encoding, "replace") # can't round-trip + except LookupError, k: + raise error.Abort(k, hint="please check your locale settings") def fromlocal(s): """