git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 8/8] diff.c: add white space mode to move detection that allows indent changes

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
Jun 23, 2018, 16:52 UTC
Message-ID
<20180623165233.23653-1-szeder.dev@gmail.com>
In-Reply-To
<20180622015725.219575-9-sbeller@google.com>
Show 19 quoted lines
> diff --git a/diff.c b/diff.c
> index 040b46545e5..9e357111864 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -302,12 +302,18 @@ static int parse_color_moved_ws(const char *arg)
>  			ret |= XDF_IGNORE_WHITESPACE_AT_EOL;
>  		else if (!strcmp(sb.buf, "ignore-all-space"))
>  			ret |= XDF_IGNORE_WHITESPACE;
> +		else if (!strcmp(sb.buf, "allow-indentation-change"))
> +			ret |= COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE;
>  		else
>  			error(_("ignoring unknown color-moved-ws mode '%s'"), sb.buf);
>  
>  		strbuf_release(&sb);
>  	}
>  
> +	if ((ret & COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) &&
> +	    (ret & XDF_WHITESPACE_FLAGS))
> +		die(_("color-moved-ws: allow-indentation-change cannot be combined with other white space modes"));
Note that this is a translated error message.
Show 51 quoted lines
> diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh
> index aad0870c8a1..13b20be591e 100755
> --- a/t/t4015-diff-whitespace.sh
> +++ b/t/t4015-diff-whitespace.sh
> @@ -1827,4 +1827,94 @@ test_expect_success 'only move detection ignores white spaces' '
>  	test_cmp expected actual
>  '
>  
> +test_expect_success 'compare whitespace delta across moved blocks' '
> +
> +	git reset --hard &&
> +	q_to_tab <<-\EOF >text.txt &&
> +	QIndented
> +	QText across
> +	Qsome lines
> +	QBut! <- this stands out
> +	QAdjusting with
> +	QQdifferent starting
> +	Qwhite spaces
> +	QAnother outlier
> +	QQQIndented
> +	QQQText across
> +	QQQfive lines
> +	QQQthat has similar lines
> +	QQQto previous blocks, but with different indent
> +	QQQYetQAnotherQoutlierQ
> +	EOF
> +
> +	git add text.txt &&
> +	git commit -m "add text.txt" &&
> +
> +	q_to_tab <<-\EOF >text.txt &&
> +	QQIndented
> +	QQText across
> +	QQsome lines
> +	QQQBut! <- this stands out
> +	Adjusting with
> +	Qdifferent starting
> +	white spaces
> +	AnotherQoutlier
> +	QQIndented
> +	QQText across
> +	QQfive lines
> +	QQthat has similar lines
> +	QQto previous blocks, but with different indent
> +	QQYetQAnotherQoutlier
> +	EOF
> +
> +	git diff --color --color-moved --color-moved-ws=allow-indentation-change |
> +		grep -v "index" |
> +		test_decode_color >actual &&

Please use an intermediate file for the output of 'git diff', because running it upstream of a pipe hides its exit code.

Show 44 quoted lines
> +
> +	q_to_tab <<-\EOF >expected &&
> +		<BOLD>diff --git a/text.txt b/text.txt<RESET>
> +		<BOLD>--- a/text.txt<RESET>
> +		<BOLD>+++ b/text.txt<RESET>
> +		<CYAN>@@ -1,14 +1,14 @@<RESET>
> +		<BOLD;MAGENTA>-QIndented<RESET>
> +		<BOLD;MAGENTA>-QText across<RESET>
> +		<BOLD;MAGENTA>-Qsome lines<RESET>
> +		<RED>-QBut! <- this stands out<RESET>
> +		<BOLD;MAGENTA>-QAdjusting with<RESET>
> +		<BOLD;MAGENTA>-QQdifferent starting<RESET>
> +		<BOLD;MAGENTA>-Qwhite spaces<RESET>
> +		<RED>-QAnother outlier<RESET>
> +		<BOLD;MAGENTA>-QQQIndented<RESET>
> +		<BOLD;MAGENTA>-QQQText across<RESET>
> +		<BOLD;MAGENTA>-QQQfive lines<RESET>
> +		<BOLD;MAGENTA>-QQQthat has similar lines<RESET>
> +		<BOLD;MAGENTA>-QQQto previous blocks, but with different indent<RESET>
> +		<RED>-QQQYetQAnotherQoutlierQ<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Indented<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Text across<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>some lines<RESET>
> +		<GREEN>+<RESET>QQQ<GREEN>But! <- this stands out<RESET>
> +		<BOLD;CYAN>+<RESET><BOLD;CYAN>Adjusting with<RESET>
> +		<BOLD;CYAN>+<RESET>Q<BOLD;CYAN>different starting<RESET>
> +		<BOLD;CYAN>+<RESET><BOLD;CYAN>white spaces<RESET>
> +		<GREEN>+<RESET><GREEN>AnotherQoutlier<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Indented<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>Text across<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>five lines<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>that has similar lines<RESET>
> +		<BOLD;CYAN>+<RESET>QQ<BOLD;CYAN>to previous blocks, but with different indent<RESET>
> +		<GREEN>+<RESET>QQ<GREEN>YetQAnotherQoutlier<RESET>
> +	EOF
> +
> +	test_cmp expected actual
> +'
> +
> +test_expect_success 'compare whitespace delta incompatible with other space options' '
> +	test_must_fail git diff \
> +		--color-moved-ws=allow-indentation-change,ignore-all-space \
> +		2>err &&
> +	grep allow-indentation-change err
A translated error message should be checked with 'test_i18ngrep'.
Previous: Stefan BellerNext: Junio C Hamano
Message 10 of 25 in “Moved code detection: ignore space on uniform indentation”
  1. 0/8 Moved code detection: ignore space on uniform indentationStefan Beller, Jun 22, 2018
  2. 1/8 xdiff/xdiff.h: remove unused flagsStefan Beller, Jun 22, 2018
  3. 2/8 xdiff/xdiffi.c: remove unneeded function declarationsStefan Beller, Jun 22, 2018
  4. 4/8 diff.c: adjust hash function signature to match hashmap expectationStefan Beller, Jun 22, 2018
  5. 5/8 diff.c: add a blocks mode for moved code detectionStefan Beller, Jun 22, 2018
  6. 3/8 diff.c: do not pass diff options as keydata to hashmapStefan Beller, Jun 22, 2018
  7. 6/8 diff.c: decouple white space treatment from move detection algorithmStefan Beller, Jun 22, 2018
  8. 7/8 diff.c: factor advance_or_nullify out of mark_color_as_movedStefan Beller, Jun 22, 2018
  9. 8/8 diff.c: add white space mode to move detection that allows indent changesStefan Beller, Jun 22, 2018
  10. SZEDER GáborJun 23, 2018
  11. Junio C HamanoJun 22, 2018
  12. 0/9 Moved code detection: ignore space on uniform indentationStefan Beller, Jun 29, 2018
  13. 1/9 xdiff/xdiff.h: remove unused flagsStefan Beller, Jun 29, 2018
  14. 2/9 xdiff/xdiffi.c: remove unneeded function declarationsStefan Beller, Jun 29, 2018
  15. 4/9 diff.c: do not pass diff options as keydata to hashmapStefan Beller, Jun 29, 2018
  16. 5/9 diff.c: adjust hash function signature to match hashmap expectationStefan Beller, Jun 29, 2018
  17. 6/9 diff.c: add a blocks mode for moved code detectionStefan Beller, Jun 29, 2018
  18. Brandon WilliamsJul 2, 2018
  19. 7/9 diff.c: decouple white space treatment from move detection algorithmStefan Beller, Jun 29, 2018
  20. Brandon WilliamsJul 2, 2018
  21. 3/9 t4015: avoid git as a pipe inputStefan Beller, Jun 29, 2018
  22. 8/9 diff.c: factor advance_or_nullify out of mark_color_as_movedStefan Beller, Jun 29, 2018
  23. 9/9 diff.c: add white space mode to move detection that allows indent changesStefan Beller, Jun 29, 2018
  24. Brandon WilliamsJul 2, 2018
  25. Stefan BellerJul 2, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.