diff mercurial/changelog.py @ 14379:bd23d5f28bbb stable

changelog: convert user and desc from local encoding early Failing to do so makes it impossible to use the memctx API to create a changeset with a commit message or username outside of the current encoding.encoding setting.
author Martin Geisler <mg@aragost.com>
date Thu, 19 May 2011 18:09:25 +0200
parents 41d0ed2c79df
children 10546bb7d201
line wrap: on
line diff
--- a/mercurial/changelog.py	Wed May 18 15:13:26 2011 +0200
+++ b/mercurial/changelog.py	Thu May 19 18:09:25 2011 +0200
@@ -199,6 +199,11 @@
 
     def add(self, manifest, files, desc, transaction, p1, p2,
                   user, date=None, extra=None):
+        # Convert to UTF-8 encoded bytestrings as the very first
+        # thing: calling any method on a localstr object will turn it
+        # into a str object and the cached UTF-8 string is thus lost.
+        user, desc = encoding.fromlocal(user), encoding.fromlocal(desc)
+
         user = user.strip()
         # An empty username or a username with a "\n" will make the
         # revision text contain two "\n\n" sequences -> corrupt
@@ -212,8 +217,6 @@
         # strip trailing whitespace and leading and trailing empty lines
         desc = '\n'.join([l.rstrip() for l in desc.splitlines()]).strip('\n')
 
-        user, desc = encoding.fromlocal(user), encoding.fromlocal(desc)
-
         if date:
             parseddate = "%d %d" % util.parsedate(date)
         else: