Mercurial > hg
changeset 21862:ba7f75e7f4e5
progress: use 'encoding.trim' to trim items in output line correctly
Before this patch, 'progress' extension trims items in output line by
directly slicing byte sequence, but it may split at intermediate
multi-byte sequence.
This patch uses 'encoding.trim' to trim items in output line
correctly, even if it contains multi-byte characters.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sun, 06 Jul 2014 02:56:41 +0900 |
parents | b515c3a63e96 |
children | f9c91c638378 |
files | hgext/progress.py tests/test-progress.t |
diffstat | 2 files changed, 44 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/progress.py Sun Jul 06 02:56:41 2014 +0900 +++ b/hgext/progress.py Sun Jul 06 02:56:41 2014 +0900 @@ -139,9 +139,9 @@ else: wid = 20 if slice == 'end': - add = item[-wid:] + add = encoding.trim(item, wid, leftside=True) else: - add = item[:wid] + add = encoding.trim(item, wid) add += (wid - len(add)) * ' ' elif indicator == 'bar': add = ''
--- a/tests/test-progress.t Sun Jul 06 02:56:41 2014 +0900 +++ b/tests/test-progress.t Sun Jul 06 02:56:41 2014 +0900 @@ -33,7 +33,7 @@ > loops = abs(loops) > > for i in range(loops): - > ui.progress(topiclabel, i, 'loop.%d' % i, 'loopnum', total) + > ui.progress(topiclabel, i, getloopitem(i), 'loopnum', total) > if opts.get('parallel'): > ui.progress('other', i, 'other.%d' % i, 'othernum', total) > if nested: @@ -48,6 +48,8 @@ > ui.progress(topiclabel, None, 'loop.done', 'loopnum', total) > > topiclabel = 'loop' + > def getloopitem(i): + > return 'loop.%d' % i > > EOF @@ -293,3 +295,42 @@ \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [==> ]\r (no-eol) (esc) \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88 [=====> ]\r (no-eol) (esc) \r (no-eol) (esc) + +test triming progress items, when they contain multi-byte characters, +of which length of byte sequence and columns in display are different +from each other. + + $ rm -f loop.pyc + $ cat >> loop.py <<EOF + > # use non-ascii characters as loop items of progress + > loopitems = [ + > u'\u3042\u3044\u3046'.encode('utf-8'), # 2 x 3 = 6 columns + > u'\u3042\u3044\u3046\u3048'.encode('utf-8'), # 2 x 4 = 8 columns + > ] + > def getloopitem(i): + > return loopitems[i % len(loopitems)] + > EOF + + $ cat >> $HGRCPATH <<EOF + > [progress] + > # trim at tail side + > format = item+6 + > EOF + + $ hg --encoding utf-8 -y loop --total 2 2 + \r (no-eol) (esc) + \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) + \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) + \r (no-eol) (esc) + + $ cat >> $HGRCPATH <<EOF + > [progress] + > # trim at left side + > format = item-6 + > EOF + + $ hg --encoding utf-8 -y loop --total 2 2 + \r (no-eol) (esc) + \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\r (no-eol) (esc) + \xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\r (no-eol) (esc) + \r (no-eol) (esc)