[PATCH STABLE] churn: compute padding with unicode strings

Isaac Jurado diptongo at gmail.com
Sat Apr 19 18:03:25 CDT 2014


# HG changeset patch
# User Isaac Jurado <diptongo at gmail.com>
# Date 1397913085 -7200
#      Sat Apr 19 15:11:25 2014 +0200
# Branch stable
# Node ID 66336e9c96377ca6e48f54d33390c1bcd24b209d
# Parent  d924e387604f4a1b90469de773517841eba40c80
churn: compute padding with unicode strings

Most UTF-8 aware terminals convert multibyte sequences into a single displayed
characters.  Because the first column is padded by counting bytes, the second
column is not perfectly aligned in the presence of non ASCII characters.

diff --git a/hgext/churn.py b/hgext/churn.py
--- a/hgext/churn.py
+++ b/hgext/churn.py
@@ -10,6 +10,7 @@
 
 from mercurial.i18n import _
 from mercurial import patch, cmdutil, scmutil, util, templater, commands
+from mercurial import encoding
 import os
 import time, datetime
 
@@ -124,7 +125,7 @@
     Aliases will be split from the rightmost "=".
     '''
     def pad(s, l):
-        return (s + " " * l)[:l]
+        return (s.decode("UTF-8") + u" " * l)[:l].encode(encoding.encoding)
 
     amap = {}
     aliases = opts.get('aliases')
diff --git a/tests/test-churn.t b/tests/test-churn.t
--- a/tests/test-churn.t
+++ b/tests/test-churn.t
@@ -159,4 +159,16 @@
   user4 at x.com      2 *****************************
   with space       1 **************
 
+Test multibyte sequences in names
+
+  $ echo bar >> bar
+  $ hg --encoding utf-8 ci -m'changed bar' -u 'El Niño <nino at x.com>'
+  $ hg --encoding utf-8 churn -ct '{author|person}'
+  user1           4 **********************************************************
+  user3           3 ********************************************
+  user2           2 *****************************
+  user4           2 *****************************
+  El Ni\xc3\xb1o         1 *************** (esc)
+  with space      1 ***************
+
   $ cd ..


More information about the Mercurial-devel mailing list