git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
To: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>,
	GIT Mailing-list <git@vger.kernel.org>
Subject: [PATCH] column: Fix an incorrect parse of the 'nodense' option token
Date: Sat, 11 Feb 2012 18:41:17 +0000	[thread overview]
Message-ID: <4F36B64D.4030000@ramsay1.demon.co.uk> (raw)


The parse_option() function always saw the 'nodense' token as
'dense', since it stripped the 'no' off the input argument string
earlier when checking for the presence of the 'color' token.

In order to fix the parse, we use local variables (within the loop)
initialised to the function input arguments instead, which allows
each token check to be independent.

Also, add some 'nodense' tests to t/t9002-column.sh.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---

Hi Nguyen,

While writing the earlier "column: Fix some compiler and sparse warnings"
patch a few days ago, I had a feeling that a bug lurked in the parse_option()
code, but I just could not put my finger on the problem; so I just sent
what I had.

This morning I suddenly realised what was bothering me ... As a first
step, I duplicated the 'dense' tests in t9002-column.sh and changed the
'dense' token to 'nodense' and the tests still passed!

Note that the code supports the 'nocolor' token, but it is not documented
in config.txt.

If I understand correctly (and it's quite possible that I don't!), the
'nodense' token has the same meaning as the absence of the 'dense' token
(and I assume a similar comment applies to the '[no]color' tokens). If that
is the case, then maybe a better solution would be to simply remove the
'nodense' and 'nocolor' tokens. I will leave it to you to decide which
solution is more appropriate.

ATB,
Ramsay Jones

 column.c          |   13 +++++++------
 t/t9002-column.sh |   26 ++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/column.c b/column.c
index 98328cf..6df7640 100644
--- a/column.c
+++ b/column.c
@@ -313,19 +313,20 @@ static int parse_option(const char *arg, int len,
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(opts); i++) {
-		int set = 1, name_len;
+		int set = 1, arg_len = len, name_len;
+		const char *arg_str = arg;
 
 		if (opts[i].type == OPTION) {
-			if (len > 2 && !strncmp(arg, "no", 2)) {
-				arg += 2;
-				len -= 2;
+			if (arg_len > 2 && !strncmp(arg_str, "no", 2)) {
+				arg_str += 2;
+				arg_len -= 2;
 				set = 0;
 			}
 		}
 
 		name_len = strlen(opts[i].name);
-		if (len != name_len ||
-		    strncmp(arg, opts[i].name, name_len))
+		if (arg_len != name_len ||
+		    strncmp(arg_str, opts[i].name, name_len))
 			continue;
 
 		switch (opts[i].type) {
diff --git a/t/t9002-column.sh b/t/t9002-column.sh
index 23d340e..fe7a30e 100755
--- a/t/t9002-column.sh
+++ b/t/t9002-column.sh
@@ -71,6 +71,19 @@ EOF
 	test_cmp expected actual
 '
 
+test_expect_success '20 columns, nodense' '
+	cat >expected <<\EOF &&
+one    seven
+two    eight
+three  nine
+four   ten
+five   eleven
+six
+EOF
+	git column --mode=column,nodense < lista > actual &&
+	test_cmp expected actual
+'
+
 test_expect_success '20 columns, dense' '
 	cat >expected <<\EOF &&
 one   five  nine
@@ -121,6 +134,19 @@ EOF
 	test_cmp expected actual
 '
 
+test_expect_success '20 columns, row first, nodense' '
+	cat >expected <<\EOF &&
+one    two
+three  four
+five   six
+seven  eight
+nine   ten
+eleven
+EOF
+	git column --mode=row,nodense <lista >actual &&
+	test_cmp expected actual
+'
+
 test_expect_success '20 columns, row first, dense' '
 	cat >expected <<\EOF &&
 one   two    three
-- 
1.7.9

             reply	other threads:[~2012-02-11 18:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-11 18:41 Ramsay Jones [this message]
2012-02-12  3:37 ` [PATCH] column: Fix an incorrect parse of the 'nodense' option token Nguyen Thai Ngoc Duy
2012-02-14 18:28   ` Ramsay Jones

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=4F36B64D.4030000@ramsay1.demon.co.uk \
    --to=ramsay@ramsay1.demon.co.uk \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=pclouds@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).