From: Philip Oakley <philipoakley@iee.email>
To: GitList <git@vger.kernel.org>
Cc: Self <philipoakley@iee.email>, Junio C Hamano <gitster@pobox.com>,
Taylor Blau <me@ttaylorr.com>,
NSENGIYUMVA WILBERFORCE <nsengiyumvawilberforce@gmail.com>
Subject: [PATCH v3] pretty-formats: add hard truncation, without ellipsis, options
Date: Wed, 2 Nov 2022 12:08:53 +0000 [thread overview]
Message-ID: <20221102120853.2013-1-philipoakley@iee.email> (raw)
In-Reply-To: <Y2G9pc/apyekUfcM@nand.local>
Instead of truncating with "..", add options to replace with the
empty string, implied by passing NULL, and adjust the padding length calculation.
Extend the existing tests for these pretty formats to include
`Trunc` and Ltrunc` options matching the `trunc` and `ltrunc`
tests.
Signed-off-by: Philip Oakley <philipoakley@iee.email>
---
With updated commit message. No other changes.
---
Documentation/pretty-formats.txt | 11 +++---
pretty.c | 18 ++++++++-
t/t4205-log-pretty-formats.sh | 67 ++++++++++++++++++++++++++++++++
t/t6006-rev-list-format.sh | 45 +++++++++++++++++++++
4 files changed, 135 insertions(+), 6 deletions(-)
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 0b4c1c8d98..0bd339db33 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -146,14 +146,15 @@ The placeholders are:
'%m':: left (`<`), right (`>`) or boundary (`-`) mark
'%w([<w>[,<i1>[,<i2>]]])':: switch line wrapping, like the -w option of
linkgit:git-shortlog[1].
-'%<(<N>[,trunc|ltrunc|mtrunc])':: make the next placeholder take at
+'%<(<N>[,trunc|ltrunc|mtrunc|Trunc|Ltrunc])':: make the next placeholder take at
least N columns, padding spaces on
the right if necessary. Optionally
- truncate at the beginning (ltrunc),
- the middle (mtrunc) or the end
- (trunc) if the output is longer than
- N columns. Note that truncating
+ truncate (with ellipsis '..') at the beginning (ltrunc) `..ft`,
+ the middle (mtrunc) `mi..le` or the end
+ (trunc) `rig..` if the output is longer than
+ N columns. Note that truncating with ellipsis
only works correctly with N >= 2.
+ Use (Trunc|Ltrunc) for hard truncation without ellipsis.
'%<|(<N>)':: make the next placeholder take at least until Nth
columns, padding spaces on the right if necessary
'%>(<N>)', '%>|(<N>)':: similar to '%<(<N>)', '%<|(<N>)' respectively,
diff --git a/pretty.c b/pretty.c
index 6cb363ae1c..1e873d3f41 100644
--- a/pretty.c
+++ b/pretty.c
@@ -857,7 +857,9 @@ enum trunc_type {
trunc_none,
trunc_left,
trunc_middle,
- trunc_right
+ trunc_right,
+ trunc_left_hard,
+ trunc_right_hard
};
struct format_commit_context {
@@ -1145,6 +1147,10 @@ static size_t parse_padding_placeholder(const char *placeholder,
c->truncate = trunc_left;
else if (starts_with(start, "mtrunc)"))
c->truncate = trunc_middle;
+ else if (starts_with(start, "Ltrunc)"))
+ c->truncate = trunc_left_hard;
+ else if (starts_with(start, "Trunc)"))
+ c->truncate = trunc_right_hard;
else
return 0;
} else
@@ -1743,6 +1749,16 @@ static size_t format_and_pad_commit(struct strbuf *sb, /* in UTF-8 */
padding - 2, len - (padding - 2),
"..");
break;
+ case trunc_left_hard:
+ strbuf_utf8_replace(&local_sb,
+ 0, len - padding,
+ NULL);
+ break;
+ case trunc_right_hard:
+ strbuf_utf8_replace(&local_sb,
+ padding, len - padding,
+ NULL);
+ break;
case trunc_none:
break;
}
diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh
index e448ef2928..55dca30798 100755
--- a/t/t4205-log-pretty-formats.sh
+++ b/t/t4205-log-pretty-formats.sh
@@ -261,6 +261,17 @@ test_expect_success 'left alignment formatting with trunc' '
test_cmp expected actual
'
+test_expect_success 'left alignment formatting with Trunc' '
+ git log --pretty="tformat:%<(10,Trunc)%s" >actual &&
+ qz_to_tab_space <<-\EOF >expected &&
+ message tw
+ message on
+ add bar Z
+ initial. a
+ EOF
+ test_cmp expected actual
+'
+
test_expect_success 'left alignment formatting with trunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s" >actual &&
qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
@@ -272,6 +283,17 @@ test_expect_success 'left alignment formatting with trunc. i18n.logOutputEncodin
test_cmp expected actual
'
+test_expect_success 'left alignment formatting with Trunc. i18n.logOutputEncoding' '
+ git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,Trunc)%s" >actual &&
+ qz_to_tab_space <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
+ message tw
+ message on
+ add bar Z
+ initial. a
+ EOF
+ test_cmp expected actual
+'
+
test_expect_success 'left alignment formatting with ltrunc' '
git log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<-EOF >expected &&
@@ -283,6 +305,18 @@ test_expect_success 'left alignment formatting with ltrunc' '
test_cmp expected actual
'
+test_expect_success 'left alignment formatting with Ltrunc' '
+ git log --pretty="tformat:%<(10,Ltrunc)%s" >actual &&
+ qz_to_tab_space <<-EOF >expected &&
+ essage two
+ essage one
+ add bar Z
+ an${sample_utf8_part}lich
+ EOF
+ test_cmp expected actual
+'
+
+
test_expect_success 'left alignment formatting with ltrunc. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,ltrunc)%s" >actual &&
qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
@@ -294,6 +328,16 @@ test_expect_success 'left alignment formatting with ltrunc. i18n.logOutputEncodi
test_cmp expected actual
'
+test_expect_success 'left alignment formatting with Ltrunc. i18n.logOutputEncoding' '
+ git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,Ltrunc)%s" >actual &&
+ qz_to_tab_space <<-EOF | iconv -f utf-8 -t $test_encoding >expected &&
+ essage two
+ essage one
+ add bar Z
+ an${sample_utf8_part}lich
+ EOF
+ test_cmp expected actual
+'
test_expect_success 'left alignment formatting with mtrunc' '
git log --pretty="tformat:%<(10,mtrunc)%s" >actual &&
qz_to_tab_space <<-\EOF >expected &&
@@ -507,6 +551,19 @@ test_expect_success 'left/right alignment formatting with stealing' '
EOF
test_cmp expected actual
'
+
+test_expect_success 'left/right hard alignment formatting with stealing' '
+ git commit --amend -m short --author "long long long <long@me.com>" &&
+ git log --pretty="tformat:%<(10,Trunc)%s%>>(10,Ltrunc)% an" >actual &&
+ cat <<-\EOF >expected &&
+ short long long long
+ message on A U Thor
+ add bar A U Thor
+ initial. a A U Thor
+ EOF
+ test_cmp expected actual
+'
+
test_expect_success 'left/right alignment formatting with stealing. i18n.logOutputEncoding' '
git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)% an" >actual &&
cat <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
@@ -517,6 +574,16 @@ test_expect_success 'left/right alignment formatting with stealing. i18n.logOutp
EOF
test_cmp expected actual
'
+test_expect_success 'left/right alignment formatting with stealing. i18n.logOutputEncoding' '
+ git -c i18n.logOutputEncoding=$test_encoding log --pretty="tformat:%<(10,Trunc)%s%>>(10,Ltrunc)% an" >actual &&
+ cat <<-\EOF | iconv -f utf-8 -t $test_encoding >expected &&
+ short long long long
+ message on A U Thor
+ add bar A U Thor
+ initial. a A U Thor
+ EOF
+ test_cmp expected actual
+'
test_expect_success 'strbuf_utf8_replace() not producing NUL' '
git log --color --pretty="tformat:%<(10,trunc)%s%>>(10,ltrunc)%C(auto)%d" |
diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh
index 41d0ca00b1..8dcc8000d1 100755
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -218,6 +218,14 @@ commit $head1
added (hinzugef${added_utf8_part}gt..
EOF
+# ZZZ for a space?
+test_format subject-truncated "%<($truncate_count,Trunc)%s" qz_to_tab_space <<EOF
+commit $head2
+changed (ge${changed_utf8_part}ndert) f
+commit $head1
+added (hinzugef${added_utf8_part}gt)Z
+EOF
+
test_format body %b <<EOF
commit $head2
commit $head1
@@ -400,6 +408,16 @@ commit $head1
added (hinzugef${added_utf8_part_iso88591}gt..
EOF
+# need qz qz_to_tab_space
+test_format complex-subject-Trunc "%<($truncate_count,Trunc)%s" qz_to_tab_space <<EOF
+commit $head3
+Test printing of com
+commit $head2
+changed (ge${changed_utf8_part_iso88591}ndert) f
+commit $head1
+added (hinzugef${added_utf8_part_iso88591}gt)Z
+EOF
+
test_format complex-subject-mtrunc "%<($truncate_count,mtrunc)%s" <<EOF
commit $head3
Test prin..ex bodies
@@ -418,6 +436,14 @@ commit $head1
.. (hinzugef${added_utf8_part_iso88591}gt) foo
EOF
+test_format complex-subject-Ltrunc "%<($truncate_count,Ltrunc)%s" <<EOF
+commit $head3
+ng of complex bodies
+commit $head2
+anged (ge${changed_utf8_part_iso88591}ndert) foo
+commit $head1
+ed (hinzugef${added_utf8_part_iso88591}gt) foo
+EOF
test_expect_success 'setup expected messages (for test %b)' '
cat <<-EOF >expected.utf-8 &&
commit $head3
@@ -455,6 +481,16 @@ commit $head1
added (hinzugef${added_utf8_part}gt..
EOF
+# need qz_to_tab_space
+test_format complex-subject-commitencoding-unset-Trunc "%<($truncate_count,Trunc)%s" qz_to_tab_space <<EOF
+commit $head3
+Test printing of com
+commit $head2
+changed (ge${changed_utf8_part}ndert) f
+commit $head1
+added (hinzugef${added_utf8_part}gt)Z
+EOF
+
test_format complex-subject-commitencoding-unset-mtrunc "%<($truncate_count,mtrunc)%s" <<EOF
commit $head3
Test prin..ex bodies
@@ -473,6 +509,15 @@ commit $head1
.. (hinzugef${added_utf8_part}gt) foo
EOF
+test_format complex-subject-commitencoding-unset-Ltrunc "%<($truncate_count,Ltrunc)%s" <<EOF
+commit $head3
+ng of complex bodies
+commit $head2
+anged (ge${changed_utf8_part}ndert) foo
+commit $head1
+ed (hinzugef${added_utf8_part}gt) foo
+EOF
+
test_format complex-body-commitencoding-unset %b <expected.utf-8
test_expect_success '%x00 shows NUL' '
--
2.38.1.281.g83ef3ded8d
next prev parent reply other threads:[~2022-11-02 12:09 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-30 18:56 [PATCH 0/1] extend the truncating pretty formats Philip Oakley
2022-10-30 18:56 ` [PATCH 1/1] pretty-formats: add hard truncation, without ellipsis, options Philip Oakley
2022-10-30 19:23 ` Taylor Blau
2022-10-30 22:01 ` Philip Oakley
2022-10-30 23:42 ` Taylor Blau
2022-10-30 21:41 ` [PATCH 0/1] extend the truncating pretty formats Philip Oakley
2022-11-01 22:57 ` [PATCH v2 " Philip Oakley
2022-11-01 22:57 ` [PATCH v2 1/1] pretty-formats: add hard truncation, without ellipsis, options Philip Oakley
2022-11-01 23:05 ` Philip Oakley
2022-11-02 0:45 ` Taylor Blau
2022-11-02 12:08 ` Philip Oakley [this message]
2022-11-12 14:36 ` [PATCH v4] " Philip Oakley
2022-11-21 0:34 ` Junio C Hamano
2022-11-21 18:10 ` Philip Oakley
2022-11-22 0:57 ` Junio C Hamano
2022-11-23 14:26 ` Philip Oakley
2022-11-25 7:11 ` Junio C Hamano
2022-11-26 14:32 ` Philip Oakley
2022-11-26 22:44 ` Philip Oakley
2022-11-26 23:19 ` Junio C Hamano
2022-11-28 13:39 ` Philip Oakley
2022-11-29 0:18 ` Junio C Hamano
2022-12-07 0:24 ` Philip Oakley
2022-12-07 0:54 ` Junio C Hamano
2023-01-19 18:18 ` [PATCH v5 0/5] Pretty formats: Clarify column alignment Philip Oakley
2023-01-19 18:18 ` [PATCH v5 1/5] doc: pretty-formats: separate parameters from placeholders Philip Oakley
2023-01-19 18:18 ` [PATCH v5 2/5] doc: pretty-formats: delineate `%<|(` parameter values Philip Oakley
2023-01-19 18:18 ` [PATCH v5 3/5] doc: pretty-formats document negative column alignments Philip Oakley
2023-01-19 18:18 ` [PATCH v5 4/5] doc: pretty-formats describe use of ellipsis in truncation Philip Oakley
2023-01-19 18:18 ` [PATCH v5 5/5] doc: pretty-formats note wide char limitations, and add tests Philip Oakley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221102120853.2013-1-philipoakley@iee.email \
--to=philipoakley@iee.email \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=me@ttaylorr.com \
--cc=nsengiyumvawilberforce@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).