Comment 0 for bug 1037108

Revision history for this message
Thomas Krause (krause) wrote :

When accessing a repository which have signed commits and where the name of the author contains non ASCII characters you will get an UnicodeEncodeError when trying to get the log if signature display is enabled.

E.g. you can try

bzr log --signatures lp:~pixeldrama/annis/restr_vis -r 973..975

or

bzr qlog lp:~pixeldrama/annis/restr_vis
(click on the revision 975 to get the error)

The problem is in bzrlib/log.py in the function "format_signature_validity" which mixes a constant non-unicode string with a unicode string which is given as argument for the format function.

if you change

-------------------------
if result[0] == gpg.SIGNATURE_VALID:
        return "valid signature from {0}".format(result[1])
    if result[0] == gpg.SIGNATURE_KEY_MISSING:
        return "unknown key {0}".format(result[1])
-------------------------

to

-------------------------
if result[0] == gpg.SIGNATURE_VALID:
        return u"valid signature from {0}".format(result[1])
    if result[0] == gpg.SIGNATURE_KEY_MISSING:
        return u"unknown key {0}".format(result[1])
-------------------------

everything works fine. This was tested with bazaar 2.5.1 in Ubuntu but the error also exists in lp:bzr

bzr version
=========
Bazaar (bzr) 2.5.1
  Python interpreter: /usr/bin/python 2.7.3
  Python standard library: /usr/lib/python2.7
  Platform: Linux-3.2.0-29-generic-x86_64-with-Ubuntu-12.04-precise
  bzrlib: /usr/lib/python2.7/dist-packages/bzrlib

Backtrace from bzr.log
===================

Mi 2012-08-15 14:35:26 +0200
0.055 bazaar version: 2.5.1
0.055 bzr arguments: [u'qlog']
0.057 looking for plugins in /home/thomas/.bazaar/plugins
0.063 looking for plugins in /usr/lib/python2.7/dist-packages/bzrlib/plugins
0.098 encoding stdout as sys.stdout encoding 'UTF-8'
0.315 opening working tree '/home/thomas/annis/restr_vis'
7.913 Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/bzrlib/plugins/qbzr/lib/util.py", line 908, in run_in_loading_queue
    f(*args, **kargs)
  File "/usr/lib/python2.7/dist-packages/bzrlib/plugins/qbzr/lib/uifactory.py", line 32, in decorate
    r = f(*args, **kargs)
  File "/usr/lib/python2.7/dist-packages/bzrlib/plugins/qbzr/lib/revisionmessagebrowser.py", line 365, in update_selection
    revids, self.log_list.log_model.graph_viz.get_repo_revids)
  File "/usr/lib/python2.7/dist-packages/bzrlib/plugins/qbzr/lib/revisionmessagebrowser.py", line 149, in set_display_revids
    pass_prev_loaded_rev=True)
  File "/usr/lib/python2.7/dist-packages/bzrlib/plugins/qbzr/lib/lazycachedrevloader.py", line 53, in load_revisions
    revisions_loaded(return_revisions, False)
  File "/usr/lib/python2.7/dist-packages/bzrlib/plugins/qbzr/lib/revisionmessagebrowser.py", line 204, in revisions_loaded
    cached_revisions[revid].repository)
  File "/usr/lib/python2.7/dist-packages/bzrlib/log.py", line 346, in format_signature_validity
    return "valid signature from {0}".format(result[1])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 12: ordinal not in range(128)