All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Eric Sunshine <sunshine@sunshineco.com>
Subject: Re: [PATCH v5 4/4] pretty: test --expand-tabs
Date: Mon, 04 Apr 2016 23:32:21 -0700	[thread overview]
Message-ID: <xmqqbn5o4lca.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20160405015234.GB29953@sigill.intra.peff.net> (Jeff King's message of "Mon, 4 Apr 2016 21:52:34 -0400")

Jeff King <peff@peff.net> writes:

> On Mon, Apr 04, 2016 at 05:58:37PM -0700, Junio C Hamano wrote:
>
>> +count_expand ()
>> +{
>
> This function takes a lot of unnamed arguments that we process with
> "shift". It might be nice to give a brief comment describing them.
> ...
>> +test_expand --pretty=fuller
>> +test_expand --pretty=fuller
> ...
> Duplicated fuller?

Thanks.  Here is a replacement.

-- >8 --
The test prepares a simple commit with HT on its log message lines,
and makes sure that

 - formats that should or should not expand tabs by default do or do
   not expand tabs respectively,

 - with explicit --expand-tabs=<N> and short-hands --expand-tabs
   (equivalent to --expand-tabs=8) and --no-expand-tabs (equivalent
   to --expand-tabs=0) before or after the explicit --pretty=$fmt,
   the tabs are expanded (or not expanded) accordingly.

The tests use the second line of the log message for formats other
than --pretty=short, primarily because the first line of the email
format is handled specially to add the [PATCH] prefix, etc. in a
separate codepath (--pretty=short uses the first line because there
is no other line to test).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 t/t4213-log-tabexpand.sh | 105 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 105 insertions(+)
 create mode 100755 t/t4213-log-tabexpand.sh

diff --git a/t/t4213-log-tabexpand.sh b/t/t4213-log-tabexpand.sh
new file mode 100755
index 0000000..e01a8f6
--- /dev/null
+++ b/t/t4213-log-tabexpand.sh
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+test_description='log/show --expand-tabs'
+
+. ./test-lib.sh
+
+HT="	"
+title='tab indent at the beginning of the title line'
+body='tab indent on a line in the body'
+
+# usage: count_expand $indent $numSP $numHT @format_args
+count_expand ()
+{
+	expect=
+	count=$(( $1 + $2 )) ;# expected spaces
+	while test $count -gt 0
+	do
+		expect="$expect "
+		count=$(( $count - 1 ))
+	done
+	shift 2
+	count=$1 ;# expected tabs
+	while test $count -gt 0
+	do
+		expect="$expect$HT"
+		count=$(( $count - 1 ))
+	done
+	shift
+
+	# The remainder of the command line is "git show -s" options
+	case " $* " in
+	*' --pretty=short '*)
+		line=$title ;;
+	*)
+		line=$body ;;
+	esac
+
+	# Prefix the output with the command line arguments, and
+	# replace SP with a dot both in the expecte and actual output
+	# so that test_cmp would show the differene together with the
+	# breakage in a way easier to consume by the debugging user.
+	{
+		echo "git show -s $*"
+		echo "$expect$line"
+	} | sed -e 's/ /./g' >expect
+
+	{
+		echo "git show -s $*"
+		git show -s "$@" |
+		sed -n -e "/$line\$/p"
+	} | sed -e 's/ /./g' >actual
+
+	test_cmp expect actual
+}
+
+test_expand ()
+{
+	fmt=$1
+	case "$fmt" in
+	*=raw | *=short | *=email)
+		default="0 1" ;;
+	*)
+		default="8 0" ;;
+	esac
+	case "$fmt" in
+	*=email)
+		in=0 ;;
+	*)
+		in=4 ;;
+	esac
+	test_expect_success "expand/no-expand${fmt:+ for $fmt}" '
+		count_expand $in $default $fmt &&
+		count_expand $in 8 0 $fmt --expand-tabs &&
+		count_expand $in 8 0 --expand-tabs $fmt &&
+		count_expand $in 8 0 $fmt --expand-tabs=8 &&
+		count_expand $in 8 0 --expand-tabs=8 $fmt &&
+		count_expand $in 0 1 $fmt --no-expand-tabs &&
+		count_expand $in 0 1 --no-expand-tabs $fmt &&
+		count_expand $in 0 1 $fmt --expand-tabs=0 &&
+		count_expand $in 0 1 --expand-tabs=0 $fmt &&
+		count_expand $in 4 0 $fmt --expand-tabs=4 &&
+		count_expand $in 4 0 --expand-tabs=4 $fmt
+	'
+}
+
+test_expect_success 'setup' '
+	test_tick &&
+	sed -e "s/Q/$HT/g" <<-EOF >msg &&
+	Q$title
+
+	Q$body
+	EOF
+	git commit --allow-empty -F msg
+'
+
+test_expand ""
+test_expand --pretty
+test_expand --pretty=short
+test_expand --pretty=medium
+test_expand --pretty=full
+test_expand --pretty=fuller
+test_expand --pretty=raw
+test_expand --pretty=email
+
+test_done
-- 
2.8.1-253-gd0f4798

  reply	other threads:[~2016-04-05  6:32 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-16 16:29 [PATCH] pretty-print: de-tabify indented logs to make things line up properly Linus Torvalds
2016-03-16 16:52 ` Linus Torvalds
2016-03-16 18:01 ` Junio C Hamano
2016-03-16 18:21   ` Linus Torvalds
2016-03-16 19:32     ` Junio C Hamano
2016-03-16 19:47       ` Junio C Hamano
2016-03-16 19:59         ` Linus Torvalds
2016-03-16 21:37           ` Junio C Hamano
2016-03-16 22:04             ` Linus Torvalds
2016-03-17 23:13               ` [PATCH v2 1/4] " Junio C Hamano
2016-03-17 23:15                 ` [PATCH v2 2/4] pretty-print: simplify the interaction between pp_handle_indent() and its caller Junio C Hamano
2016-03-17 23:15                 ` [PATCH v2 3/4] pretty-print: further abstract out pp_handle_indent() Junio C Hamano
2016-03-17 23:16                 ` [PATCH 4/4] pretty-print: add --pretty=noexpand Junio C Hamano
2016-03-17 23:23                   ` Linus Torvalds
2016-03-17 23:40                     ` Junio C Hamano
2016-03-18  5:08                   ` Jeff King
2016-03-18  5:36                     ` Linus Torvalds
2016-03-18  5:55                       ` Jeff King
2016-03-18  5:44                     ` Junio C Hamano
2016-03-23 23:23                       ` [PATCH v3 0/5] Expanding tabs in "git log" output Junio C Hamano
2016-03-23 23:23                         ` [PATCH v3 1/5] pretty-print: de-tabify indented logs to make things line up properly Junio C Hamano
2016-03-23 23:23                         ` [PATCH v3 2/5] pretty-print: simplify the interaction between pp_handle_indent() and its caller Junio C Hamano
2016-03-23 23:23                         ` [PATCH v3 3/5] pretty-print: further abstract out pp_handle_indent() Junio C Hamano
2016-03-23 23:23                         ` [PATCH v3 4/5] pretty-print: limit expand-tabs to selected --pretty formats Junio C Hamano
2016-03-23 23:23                         ` [PATCH v3 5/5] pretty-print: teach "--no-expand-tabs" option to "git log" Junio C Hamano
2016-03-23 23:47                         ` [PATCH v3 0/5] Expanding tabs in "git log" output Linus Torvalds
2016-03-24  0:58                         ` Jeff King
2016-03-24  5:17                           ` Junio C Hamano
2016-03-24  7:05                         ` Torsten Bögershausen
2016-03-24 15:37                           ` Junio C Hamano
2016-03-24 18:22                           ` Junio C Hamano
2016-03-25  9:34                             ` Torsten Bögershausen
2016-03-25 14:13                               ` Torsten Bögershausen
2016-03-25 16:41                                 ` Junio C Hamano
2016-03-25 16:25                               ` Junio C Hamano
2016-03-29 23:15                         ` [PATCH v4 0/3] " Junio C Hamano
2016-03-29 23:15                           ` [PATCH v4 1/3] pretty: expand tabs in indented logs to make things line up properly Junio C Hamano
2016-03-30  0:17                             ` Eric Sunshine
2016-03-30 18:20                               ` Junio C Hamano
2016-03-29 23:15                           ` [PATCH v4 2/3] pretty: enable --expand-tabs by default for selected pretty formats Junio C Hamano
2016-03-30  1:38                             ` Jeff King
2016-03-30 19:18                               ` Junio C Hamano
2016-03-29 23:15                           ` [PATCH v4 3/3] pretty: allow tweaking tabwidth in --expand-tabs Junio C Hamano
2016-04-05  0:58                           ` [PATCH v5 0/4] Expanding tabs in "git log" output Junio C Hamano
2016-04-05  0:58                             ` [PATCH v5 1/4] pretty: expand tabs in indented logs to make things line up properly Junio C Hamano
2016-04-05  0:58                             ` [PATCH v5 2/4] pretty: enable --expand-tabs by default for selected pretty formats Junio C Hamano
2016-04-05  0:58                             ` [PATCH v5 3/4] pretty: allow tweaking tabwidth in --expand-tabs Junio C Hamano
2016-04-05  0:58                             ` [PATCH v5 4/4] pretty: test --expand-tabs Junio C Hamano
2016-04-05  1:10                               ` Eric Sunshine
2016-04-05  1:47                                 ` Jeff King
2016-04-05  6:25                                   ` Junio C Hamano
2016-04-05  1:52                               ` Jeff King
2016-04-05  6:32                                 ` Junio C Hamano [this message]
2016-04-05  7:13                                 ` Perry Hutchison
2016-04-05  1:53                             ` [PATCH v5 0/4] Expanding tabs in "git log" output Jeff King
2016-03-16 19:50       ` [PATCH] pretty-print: de-tabify indented logs to make things line up properly Linus Torvalds
2016-03-16 21:55         ` Junio C Hamano

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=xmqqbn5o4lca.fsf@gitster.mtv.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=peff@peff.net \
    --cc=sunshine@sunshineco.com \
    --cc=torvalds@linux-foundation.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.