Patchwork [STABLE,RESEND] churn: compute padding with unicode strings

login
register
mail settings
Submitter Isaac Jurado
Date April 20, 2014, 3:39 p.m.
Message ID <41da3f13cbfef7709dcc.1398008374@findus>
Download mbox | patch
Permalink /patch/4414/
State Accepted
Commit 9846b40d01e78fe9d95abe6adc73dd0af31bc375
Headers show

Comments

Isaac Jurado - April 20, 2014, 3:39 p.m.
# HG changeset patch
# User Isaac Jurado <diptongo@gmail.com>
# Date 1397913085 -7200
#      Sat Apr 19 15:11:25 2014 +0200
# Branch stable
# Node ID 41da3f13cbfef7709dcc6ca2320bacbb038a2dd9
# 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.
Matt Mackall - April 20, 2014, 4:49 p.m.
On Sun, 2014-04-20 at 17:39 +0200, Isaac Jurado wrote:
> # HG changeset patch
> # User Isaac Jurado <diptongo@gmail.com>
> # Date 1397913085 -7200
> #      Sat Apr 19 15:11:25 2014 +0200
> # Branch stable
> # Node ID 41da3f13cbfef7709dcc6ca2320bacbb038a2dd9
> # Parent  d924e387604f4a1b90469de773517841eba40c80
> churn: compute padding with unicode strings

Queued for stable, thanks.

Patch

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 + " " * (l - encoding.colwidth(s))
 
     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@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@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 ..