histedit: use 'util.ellipsis' to trim description of each changesets

Before this patch, trimming description of each changesets in histedit
may split at intermediate multi-byte sequence.

This patch uses 'util.ellipsis' to trim description of each changesets
instead of directly slicing byte sequence.

Even though 'util.ellipsis' adds '...' as ellipsis when specified
string is trimmed (= this changes result of trimming), this patch uses
it, because:

  - it can be used without any additional 'import', and
  - ellipsis seems to be better than just trimming, for usability
This commit is contained in:
FUJIWARA Katsunori 2014-07-06 02:56:41 +09:00
parent 5206a6fd25
commit 9aa5fab4ec
2 changed files with 34 additions and 1 deletions

View File

@ -760,7 +760,8 @@ def makedesc(c):
if c.description():
summary = c.description().splitlines()[0]
line = 'pick %s %d %s' % (c, c.rev(), summary)
return line[:80] # trim to 80 chars so it's not stupidly wide in my editor
# trim to 80 columns so it's not stupidly wide in my editor
return util.ellipsis(line, 80)
def verifyrules(rules, repo, ctxs):
"""Verify that there exists exactly one edit rule per given changeset.

View File

@ -227,3 +227,35 @@ short hash. This tests issue3893.
$ hg histedit -r 'heads(all())'
abort: The specified revisions must have exactly one common root
[255]
Test that trimming description using multi-byte characters
--------------------------------------------------------------------
$ python <<EOF
> fp = open('logfile', 'w')
> fp.write('12345678901234567890123456789012345678901234567890' +
> '12345') # there are 5 more columns for 80 columns
>
> # 2 x 4 = 8 columns, but 3 x 4 = 12 bytes
> fp.write(u'\u3042\u3044\u3046\u3048'.encode('utf-8'))
>
> fp.close()
> EOF
$ echo xx >> x
$ hg --encoding utf-8 commit --logfile logfile
$ HGEDITOR=cat hg --encoding utf-8 histedit tip
pick 3d3ea1f3a10b 5 1234567890123456789012345678901234567890123456789012345\xe3\x81\x82... (esc)
# Edit history between 3d3ea1f3a10b and 3d3ea1f3a10b
#
# Commits are listed from least to most recent
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
0 files updated, 0 files merged, 0 files removed, 0 files unresolved