Mercurial > hg
view contrib/debugcmdserver.py @ 16230:d4d35fd0889d stable
update: don't translate the abort message twice
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
author | Javi Merino <cibervicho@gmail.com> |
---|---|
date | Wed, 07 Mar 2012 23:21:11 +0000 |
parents | 1d1f6dff9364 |
children | e34106fa0dc3 |
line wrap: on
line source
#!/usr/bin/env python # # Dumps output generated by Mercurial's command server in a formatted style to a # given file or stderr if '-' is specified. Output is also written in its raw # format to stdout. # # $ ./hg serve --cmds pipe | ./contrib/debugcmdserver.py - # o, 52 -> 'capabilities: getencoding runcommand\nencoding: UTF-8' import sys, struct if len(sys.argv) != 2: print 'usage: debugcmdserver.py FILE' sys.exit(1) outputfmt = '>cI' outputfmtsize = struct.calcsize(outputfmt) if sys.argv[1] == '-': log = sys.stderr else: log = open(sys.argv[1], 'a') def read(size): data = sys.stdin.read(size) if not data: raise EOFError() sys.stdout.write(data) sys.stdout.flush() return data try: while True: header = read(outputfmtsize) channel, length = struct.unpack(outputfmt, header) log.write('%s, %-4d' % (channel, length)) if channel in 'IL': log.write(' -> waiting for input\n') else: data = read(length) log.write(' -> %r\n' % data) log.flush() except EOFError: pass finally: if log != sys.stderr: log.close()