[PATCH] update: don't translate twice the Abort message

Javi Merino cibervicho at gmail.com
Wed Mar 7 17:21:39 CST 2012


# HG changeset patch
# User Javi Merino <cibervicho at gmail.com>
# Date 1331162471 0
# Node ID c478c70bc0c83d17c5a58c3a68e8466ef2202b53
# Parent  5cb2693e1a6007441cb902eb44b8f980fef1aea2
update: don't translate twice the Abort message

The string representation of util.Abort() is translated when
merge.update() raises the exception.  For languages with characters
out of the valid ascii range, if we feed them again to i18n.gettext()
mercurial dies with:

[...]
  File "/home/javi/src/mercurial/mercurial/hg-mpm/mercurial/commands.py", line 4287, in postincoming
    ui.warn(_("not updating: %s\n" % str(inst)))
  File "/home/javi/src/mercurial/mercurial/hg-mpm/mercurial/i18n.py", line 42, in gettext
    u = u'\n\n'.join([p and t.ugettext(p) or '' for p in paragraphs])
  File "/usr/lib/python2.7/gettext.py", line 404, in ugettext
    return unicode(message)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 14: ordinal not in range(128)

To reproduce this error, just try to pull a changeset that crosses
branches with LANG=ru_RU.UTF-8

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4284,7 +4284,7 @@ def postincoming(ui, repo, modheads, opt
         try:
             ret = hg.update(repo, checkout)
         except util.Abort, inst:
-            ui.warn(_("not updating: %s\n" % str(inst)))
+            ui.warn(_("not updating: %s\n") % str(inst))
             return 0
         if not ret and not checkout:
             if bookmarks.update(repo, [movemarkfrom], repo['.'].node()):


More information about the Mercurial-devel mailing list