From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS3215 2.6.0.0/16 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by dcvr.yhbt.net (Postfix) with ESMTP id CE0E71F910 for ; Tue, 1 Nov 2022 22:57:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230254AbiKAW5n (ORCPT ); Tue, 1 Nov 2022 18:57:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229695AbiKAW5k (ORCPT ); Tue, 1 Nov 2022 18:57:40 -0400 Received: from smtp-out-4.talktalk.net (smtp-out-4.talktalk.net [62.24.135.68]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8607A18342 for ; Tue, 1 Nov 2022 15:57:36 -0700 (PDT) Received: from localhost.localdomain ([88.110.102.84]) by smtp.talktalk.net with SMTP id q0CLor5HjjvYDq0CMoNy5e; Tue, 01 Nov 2022 22:57:34 +0000 X-Originating-IP: [88.110.102.84] X-Spam: 0 X-OAuthority: v=2.3 cv=N89X6F1B c=1 sm=1 tr=0 a=f4UhoLCnUTRb1HgAgoWw0g==:117 a=f4UhoLCnUTRb1HgAgoWw0g==:17 a=MKtGQD3n3ToA:10 a=1oJP67jkp3AA:10 a=ldyaYNNxDcoA:10 a=HHGDD-5mAAAA:8 a=0PmGTyiJKKa2ONj5aaYA:9 From: Philip Oakley To: GitList Cc: Self , Junio C Hamano , Taylor Blau , NSENGIYUMVA WILBERFORCE Subject: [PATCH v2 1/1] pretty-formats: add hard truncation, without ellipsis, options Date: Tue, 1 Nov 2022 22:57:24 +0000 Message-Id: <20221101225724.2165-2-philipoakley@iee.email> X-Mailer: git-send-email 2.38.1.windows.1 In-Reply-To: <20221101225724.2165-1-philipoakley@iee.email> References: <20221030185614.3842-1-philipoakley@iee.email> <20221101225724.2165-1-philipoakley@iee.email> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CMAE-Envelope: MS4wfKKM5Gls9FiTa5ZTXrD2tQtXPyjwD7IBRJCMOVGTbaE56jV7VA50S2bZhdC8NRAk99HCWyopyicY8tg0WBlRENk0P8G/qNE9J7s2FvwH2xbLZy0s9JYw xq69O7PFnuUXDopiunKgBKC4nPP3lGuDGfCwBLPPO9AoU6QnT6Dd2694+WeIDgIYrqMjqiU/RPzQ/KBEoZQlgFTEVGOvOx81q98sYDmQmagmEWZ+2dRHlinR 4TM7p1kYP5+l/yq8pYUjx3UmKS5++rpd0JOl/UnlggjxVeSdCffqKlCY1L7BJ1LzOf1RWFzralxHuZ0hd9/Suw== Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Instead of replacing with "..", replace with the empty string "", having adjusted the padding length calculation. Needswork: There are no tests for these pretty formats, before or after this change. Signed-off-by: Philip Oakley --- 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([[,[,]]])':: switch line wrapping, like the -w option of linkgit:git-shortlog[1]. -'%<([,trunc|ltrunc|mtrunc])':: make the next placeholder take at +'%<([,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. '%<|()':: make the next placeholder take at least until Nth columns, padding spaces on the right if necessary '%>()', '%>|()':: similar to '%<()', '%<|()' 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 " && + 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 <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 <