changeset 14380:10546bb7d201

merge with stable
author Martin Geisler <mg@aragost.com>
date Thu, 19 May 2011 18:10:03 +0200
parents 1dab7afff11f (current diff) bd23d5f28bbb (diff)
children d4192500586a
files mercurial/changelog.py
diffstat 3 files changed, 22 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/changelog.py	Thu May 19 16:57:14 2011 +0200
+++ b/mercurial/changelog.py	Thu May 19 18:10:03 2011 +0200
@@ -205,6 +205,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
@@ -218,8 +223,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:
--- a/tests/test-context.py	Thu May 19 16:57:14 2011 +0200
+++ b/tests/test-context.py	Thu May 19 18:10:03 2011 +0200
@@ -1,5 +1,5 @@
 import os
-from mercurial import hg, ui
+from mercurial import hg, ui, context, encoding
 
 u = ui.ui()
 
@@ -17,3 +17,16 @@
 repo.commit(text='commit1', date="0 0")
 
 print "workingfilectx.date =", repo[None]['foo'].date()
+
+# test memctx with non-ASCII commit message
+
+def filectxfn(repo, memctx, path):
+    return context.memfilectx("foo", "")
+
+ctx = context.memctx(repo, ['tip', None],
+                     encoding.tolocal("Gr\xc3\xbcezi!"),
+                     ["foo"], filectxfn)
+ctx.commit()
+for enc in "ASCII", "Latin-1", "UTF-8":
+    encoding.encoding = enc
+    print "%-8s: %s" % (enc, repo["tip"].description())
--- a/tests/test-context.py.out	Thu May 19 16:57:14 2011 +0200
+++ b/tests/test-context.py.out	Thu May 19 18:10:03 2011 +0200
@@ -1,1 +1,4 @@
 workingfilectx.date = (1000, 0)
+ASCII   : Gr?ezi!
+Latin-1 : Grüezi!
+UTF-8   : Grüezi!