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

[PATCH v4 0/9] Moved code detection: ignore space on uniform indentation

From
Stefan Beller <sbeller@google.com>
Date
Jun 29, 2018, 00:19 UTC
Message-ID
<20180629001958.85143-1-sbeller@google.com>
In-Reply-To
<20180622015725.219575-1-sbeller@google.com>
v4:
 * see range diff below
 * brought best practices to t4015 and have git not upstream of a pipe
   (new patch 3)
 * squashed in the SQUASH patches
 * fixed the translation as well.
v3:
 This is a complete rewrite of the actual patch, with slight modifications]
 on the refactoring how to decouple the white space treatment from the
 move detection. See range-diff below.
 https://public-inbox.org/git/20180622015725.219575-1-sbeller@google.com/
v2: https://public-inbox.org/git/20180424210330.87861-1-sbeller@google.com/
v1: https://public-inbox.org/git/20180402224854.86922-1-sbeller@google.com/
Stefan Beller (9):
  xdiff/xdiff.h: remove unused flags
  xdiff/xdiffi.c: remove unneeded function declarations
  t4015: avoid git as a pipe input
  diff.c: do not pass diff options as keydata to hashmap
  diff.c: adjust hash function signature to match hashmap expectation
  diff.c: add a blocks mode for moved code detection
  diff.c: decouple white space treatment from move detection algorithm
  diff.c: factor advance_or_nullify out of mark_color_as_moved
  diff.c: add white space mode to move detection that allows indent
    changes
 Documentation/diff-options.txt |  30 +++-
 diff.c                         | 253 +++++++++++++++++++++++++++++----
 diff.h                         |   9 +-
 t/t4015-diff-whitespace.sh     | 243 ++++++++++++++++++++++++++-----
 xdiff/xdiff.h                  |   8 --
 xdiff/xdiffi.c                 |  17 ---
 6 files changed, 472 insertions(+), 88 deletions(-)
-- 
2.18.0.399.gad0ab374a1-goog

1:  ace2dc2bc11 = 1:  ace2dc2bc11 xdiff/xdiff.h: remove unused flags
2:  53b3574564e = 2:  53b3574564e xdiff/xdiffi.c: remove unneeded function declarations
-:  ----------- > 3:  9b58621e0d8 t4015: avoid git as a pipe input
3:  34850b565df = 4:  be0ea0717e1 diff.c: do not pass diff options as keydata to hashmap
4:  8148e51178f = 5:  ff7e8721afa diff.c: adjust hash function signature to match hashmap expectation
5:  9d1de6a208e ! 6:  73c2801a5e3 diff.c: add a blocks mode for moved code detection
    @@ -19,7 +19,7 @@
      	moved line, but it is not very useful in a review to determine
      	if a block of code was moved without permutation.
     -zebra::
    -+blocks:
    ++blocks::
      	Blocks of moved text of at least 20 alphanumeric characters
      	are detected greedily. The detected blocks are
     -	painted using either the 'color.diff.{old,new}Moved' color or
    @@ -95,10 +95,8 @@
      	test_config color.diff.newMovedDimmed "normal cyan" &&
      	test_config color.diff.oldMovedAlternativeDimmed "normal blue" &&
      	test_config color.diff.newMovedAlternativeDimmed "normal yellow" &&
    -+
    -+	git diff HEAD --no-renames --color-moved=blocks --color |
    -+		grep -v "index" |
    -+		test_decode_color >actual &&
    ++	git diff HEAD --no-renames --color-moved=blocks --color >actual.raw &&
    ++	grep -v "index" actual.raw | test_decode_color >actual &&
     +	cat <<-\EOF >expected &&
     +	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
     +	<BOLD>--- a/lines.txt<RESET>
    @@ -141,6 +139,16 @@
     +	test_config color.diff.newMovedDimmed "normal cyan" &&
     +	test_config color.diff.oldMovedAlternativeDimmed "normal blue" &&
     +	test_config color.diff.newMovedAlternativeDimmed "normal yellow" &&
    - 	git diff HEAD --no-renames --color-moved=dimmed_zebra --color |
    - 		grep -v "index" |
    - 		test_decode_color >actual &&
    + 	git diff HEAD --no-renames --color-moved=dimmed_zebra --color >actual.raw &&
    + 	grep -v "index" actual.raw | test_decode_color >actual &&
    + 	cat <<-\EOF >expected &&
    +@@
    + 	7charsA
    + 	EOF
    + 
    +-	git diff HEAD --color-moved=zebra --color --no-renames | grep -v "index" | test_decode_color >actual &&
    ++	git diff HEAD --color-moved=zebra --color --no-renames >actual.raw &&
    ++	grep -v "index" actual.raw | test_decode_color >actual &&
    + 	cat >expected <<-\EOF &&
    + 	<BOLD>diff --git a/bar b/bar<RESET>
    + 	<BOLD>--- a/bar<RESET>
6:  e37bb7b1fc8 ! 7:  87a8919c260 diff.c: decouple white space treatment from move detection algorithm
    @@ -55,6 +55,7 @@
     +ignore-all-space::
     +	Ignore whitespace when comparing lines. This ignores differences
     +	even if one line has whitespace where the other line has none.
    ++--
     +
      --word-diff[=<mode>]::
      	Show a word diff, using the <mode> to delimit changed words.
    @@ -154,32 +155,32 @@
      	EOF
      	test_cmp expected actual &&
      
    --	git diff HEAD --no-renames -w --color-moved --color |
    +-	git diff HEAD --no-renames -w --color-moved --color >actual.raw &&
     +	git diff HEAD --no-renames --color-moved --color \
    -+		--color-moved-ws=ignore-all-space |
    - 		grep -v "index" |
    - 		test_decode_color >actual &&
    ++		--color-moved-ws=ignore-all-space >actual.raw &&
    + 	grep -v "index" actual.raw | test_decode_color >actual &&
      	cat <<-\EOF >expected &&
    + 	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
     @@
      	EOF
      	test_cmp expected actual &&
      
    --	git diff HEAD --no-renames -b --color-moved --color |
    +-	git diff HEAD --no-renames -b --color-moved --color >actual.raw &&
     +	git diff HEAD --no-renames --color-moved --color \
    -+		--color-moved-ws=ignore-space-change |
    - 		grep -v "index" |
    - 		test_decode_color >actual &&
    ++		--color-moved-ws=ignore-space-change >actual.raw &&
    + 	grep -v "index" actual.raw | test_decode_color >actual &&
      	cat <<-\EOF >expected &&
    + 	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
     @@
      	EOF
      	test_cmp expected actual &&
      
    --	git diff HEAD --no-renames --ignore-space-at-eol --color-moved --color |
    +-	git diff HEAD --no-renames --ignore-space-at-eol --color-moved --color >actual.raw &&
     +	git diff HEAD --no-renames --color-moved --color \
    -+		--color-moved-ws=ignore-space-at-eol |
    - 		grep -v "index" |
    - 		test_decode_color >actual &&
    ++		--color-moved-ws=ignore-space-at-eol >actual.raw &&
    + 	grep -v "index" actual.raw | test_decode_color >actual &&
      	cat <<-\EOF >expected &&
    + 	<BOLD>diff --git a/lines.txt b/lines.txt<RESET>
     @@
      
      	# nor did we mess with it another way
7:  a58e68b8880 = 8:  25279c42f25 diff.c: factor advance_or_nullify out of mark_color_as_moved
8:  f2d78d2c672 ! 9:  305f8b27589 diff.c: add white space mode to move detection that allows indent changes
    @@ -86,9 +86,9 @@
     +	group the moved code blocks only into a block if the change in
     +	whitespace is the same per line. This is incompatible with the
     +	other modes.
    + --
      
      --word-diff[=<mode>]::
    - 	Show a word diff, using the <mode> to delimit changed words.
     
     diff --git a/diff.c b/diff.c
     --- a/diff.c
    @@ -129,7 +129,7 @@
     + */
     +struct ws_delta {
     +	char *string;
    -+	int current_longer : 1;
    ++	unsigned int current_longer : 1;
      };
     +#define WS_DELTA_INIT { NULL, 0 }
     +
    @@ -339,6 +339,30 @@
     diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh
     --- a/t/t4015-diff-whitespace.sh
     +++ b/t/t4015-diff-whitespace.sh
    +@@
    + 	EOF
    + 
    + 	# Make sure we get a different diff using -w
    +-	git diff --color --color-moved -w |
    +-		grep -v "index" |
    +-		test_decode_color >actual &&
    ++	git diff --color --color-moved -w >actual.raw &&
    ++	grep -v "index" actual.raw | test_decode_color >actual &&
    + 	q_to_tab <<-\EOF >expected &&
    + 	<BOLD>diff --git a/text.txt b/text.txt<RESET>
    + 	<BOLD>--- a/text.txt<RESET>
    +@@
    + 
    + 	# And now ignoring white space only in the move detection
    + 	git diff --color --color-moved \
    +-		--color-moved-ws=ignore-all-space,ignore-space-change,ignore-space-at-eol |
    +-		grep -v "index" |
    +-		test_decode_color >actual &&
    ++		--color-moved-ws=ignore-all-space,ignore-space-change,ignore-space-at-eol >actual.raw &&
    ++	grep -v "index" actual.raw | test_decode_color >actual &&
    + 	q_to_tab <<-\EOF >expected &&
    + 	<BOLD>diff --git a/text.txt b/text.txt<RESET>
    + 	<BOLD>--- a/text.txt<RESET>
     @@
      	test_cmp expected actual
      '
    @@ -383,9 +407,8 @@
     +	QQYetQAnotherQoutlier
     +	EOF
     +
    -+	git diff --color --color-moved --color-moved-ws=allow-indentation-change |
    -+		grep -v "index" |
    -+		test_decode_color >actual &&
    ++	git diff --color --color-moved --color-moved-ws=allow-indentation-change >actual.raw &&
    ++	grep -v "index" actual.raw | test_decode_color >actual &&
     +
     +	q_to_tab <<-\EOF >expected &&
     +		<BOLD>diff --git a/text.txt b/text.txt<RESET>
    @@ -429,8 +452,7 @@
     +	test_must_fail git diff \
     +		--color-moved-ws=allow-indentation-change,ignore-all-space \
     +		2>err &&
    -+	grep allow-indentation-change err
    ++	test_i18ngrep allow-indentation-change err
     +'
    -+
     +
      test_done
9:  76db2b1328f < -:  ----------- SQUASH????? Documentation breakage emergency fix
10:  d484589fad1 < -:  ----------- SQUASH??? t/4015 GETTEXT_POISON emergency fix
11:  fceb91fc99d < -:  ----------- diff: fix a sparse 'dubious one-bit signed bitfield' error
Previous: Junio C HamanoNext: Stefan Beller
Message 12 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.