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 v4] pretty-formats: add hard truncation, without ellipsis, options
Date: Sat, 12 Nov 2022 14:36:16 +0000 [thread overview]
Message-ID: <20221112143616.1429-1-philipoakley@iee.email> (raw)
In-Reply-To: <20221102120853.2013-1-philipoakley@iee.email>
Instead of replacing with "..", 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>
---
Removed left over comments from locations that had needed QZ 'space'
conversion in the here-docs.
To: GitList <git@vger.kernel.org>
Cc: Taylor Blau <me@ttaylorr.com>
Cc: Junio C Hamano <gitster@pobox.com>
Cc: NSENGIYUMVA WILBERFORCE <nsengiyumvawilberforce@gmail.com>
In-reply-to: <20221102120853.2013-1-philipoakley@iee.email>
This should complete the patch (cf. [1] <Y2rPAGp96IwrLS1T@nand.local>)
Note: latest What's Cooking <Y2riRSL+NprJt278@nand.local> hadn't been updated. Tests are included.
A final review would be welcomed.
Range-diff against v3:
1: 498439f0375 ! 1: d26dabc5271 pretty-formats: add hard truncation, without ellipsis, options
@@ t/t6006-rev-list-format.sh: 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
@@ t/t6006-rev-list-format.sh: 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
@@ t/t6006-rev-list-format.sh: 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
Documentation/pretty-formats.txt | 11 +++---
pretty.c | 18 ++++++++-
t/t4205-log-pretty-formats.sh | 67 ++++++++++++++++++++++++++++++++
t/t6006-rev-list-format.sh | 42 ++++++++++++++++++++
4 files changed, 132 insertions(+), 6 deletions(-)
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 0b4c1c8d98a..0bd339db333 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 6cb363ae1c9..1e873d3f41a 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 e448ef2928a..55dca307983 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 41d0ca00b1c..c44935b0ab4 100755
--- a/t/t6006-rev-list-format.sh
+++ b/t/t6006-rev-list-format.sh
@@ -218,6 +218,13 @@ commit $head1
added (hinzugef${added_utf8_part}gt..
EOF
+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 +407,15 @@ commit $head1
added (hinzugef${added_utf8_part_iso88591}gt..
EOF
+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 +434,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 +479,15 @@ commit $head1
added (hinzugef${added_utf8_part}gt..
EOF
+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 +506,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.windows.1
next prev parent reply other threads:[~2022-11-12 14:36 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 ` [PATCH v3] " Philip Oakley
2022-11-12 14:36 ` Philip Oakley [this message]
2022-11-21 0:34 ` [PATCH v4] " 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=20221112143616.1429-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).