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

[PATCH v3 00/35] 20210215154427.32693-1-avarab@gmail.com

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Feb 24, 2021, 19:50 UTC
Message-ID
<20210224195129.4004-1-avarab@gmail.com>
In-Reply-To
<20210215154427.32693-1-avarab@gmail.com>

Addresses feedback on v2. Since Junio & Johannes expressed a desire to keep the existing test scheme in t4018/* it's still there, but it's also possible to add *.sh tests in that directory to use the more familiar test framework used elsewhere in the test suite.

The tests added here make use of it to e.g. supply custom -U<n> arguments, set config before the tests etc.

I also improved that existing test support so you can have N tests in one file with (mostly) the existing test syntax. See the "userdiff tests: add a test with multiple tests in a LANG file" patch.

Range-diff below.
Ævar Arnfjörð Bjarmason (35):
  userdiff: refactor away the parse_bool() function
  userdiff style: re-order drivers in alphabetical order
  userdiff style: declare patterns with consistent style
  userdiff style: normalize pascal regex declaration
  userdiff: add and use for_each_userdiff_driver()
  userdiff tests: explicitly test "default" pattern
  userdiff tests: list builtin drivers via test-tool
  userdiff: remove support for "broken" tests
  blame tests: don't rely on t/t4018/ directory
  blame tests: simplify userdiff driver test
  userdiff tests: match full hunk headers
  userdiff tests: change setup loop to individual test setup
  userdiff tests: factor out test_diff_funcname() logic
  userdiff tests: add alternative hunk header test infrastructure
  userdiff tests: add a test with multiple tests in a LANG file
  userdiff tests: do config teardown in test_diff_funcname()
  userdiff tests: move custom patterns into one test file
  userdiff tests: remove hack for "RIGHT" token
  userdiff tests: do not do compile tests on "custom" pattern
  userdiff tests: assert that new built-in drivers have tests
  userdiff tests + docs: document & test "diff.<driver>.x?funcname"
  gitattributes doc: reword discussion of built-in userdiff patterns
  userdiff tests: move perl tests to perl.sh
  userdiff tests: move away from "RIGHT" in perl.sh
  gitattributes doc: document multi-line userdiff patterns
  userdiff tests: switch to -U0 by default
  userdiff tests: remove "funcname" from custom3 test
  userdiff tests: assert empty hunk header context on -U<large>
  userdiff tests: test for a bug in 1dbf0c0ad6c
  userdiff golang: simplify and correct matching regex
  userdiff golang: don't over-match intented constructs
  userdiff golang: add a rule to match "package"
  userdiff golang: match multi-line "const" and "import"
  userdiff tests: add basic test for ada
  userdiff tests: add basic test for ruby
 Documentation/config/diff.txt              |  11 ++
 Documentation/gitattributes.txt            |  46 ++++-
 Makefile                                   |   1 +
 t/annotate-tests.sh                        |  34 ++--
 t/helper/test-tool.c                       |   1 +
 t/helper/test-tool.h                       |   1 +
 t/helper/test-userdiff.c                   |  31 ++++
 t/t4018-diff-funcname.sh                   | 180 +++++++++++++-------
 t/t4018/README                             |  69 ++++++--
 t/t4018/ada.sh                             |  37 ++++
 t/t4018/bash-arithmetic-function           |   1 +
 t/t4018/bash-bashism-style-compact         |   1 +
 t/t4018/bash-bashism-style-function        |   1 +
 t/t4018/bash-bashism-style-whitespace      |   1 +
 t/t4018/bash-conditional-function          |   1 +
 t/t4018/bash-missing-parentheses           |   1 +
 t/t4018/bash-mixed-style-compact           |   1 +
 t/t4018/bash-mixed-style-function          |   1 +
 t/t4018/bash-nested-functions              |   1 +
 t/t4018/bash-other-characters              |   1 +
 t/t4018/bash-posix-style-compact           |   1 +
 t/t4018/bash-posix-style-function          |   1 +
 t/t4018/bash-posix-style-whitespace        |   1 +
 t/t4018/bash-subshell-function             |   1 +
 t/t4018/bash-trailing-comment              |   1 +
 t/t4018/cpp-c++-function                   |   1 +
 t/t4018/cpp-class-constructor              |   1 +
 t/t4018/cpp-class-constructor-mem-init     |   1 +
 t/t4018/cpp-class-definition               |   1 +
 t/t4018/cpp-class-definition-derived       |   1 +
 t/t4018/cpp-class-destructor               |   1 +
 t/t4018/cpp-function-returning-global-type |   1 +
 t/t4018/cpp-function-returning-nested      |   1 +
 t/t4018/cpp-function-returning-pointer     |   1 +
 t/t4018/cpp-function-returning-reference   |   1 +
 t/t4018/cpp-gnu-style-function             |   1 +
 t/t4018/cpp-namespace-definition           |   1 +
 t/t4018/cpp-operator-definition            |   1 +
 t/t4018/cpp-skip-access-specifiers         |   1 +
 t/t4018/cpp-skip-comment-block             |   1 +
 t/t4018/cpp-skip-labels                    |   1 +
 t/t4018/cpp-struct-definition              |   1 +
 t/t4018/cpp-struct-single-line             |   1 +
 t/t4018/cpp-template-function-definition   |   1 +
 t/t4018/cpp-union-definition               |   1 +
 t/t4018/cpp-void-c-function                |   1 +
 t/t4018/css-attribute-value-selector       |   1 +
 t/t4018/css-block-level-@-statements       |   1 +
 t/t4018/css-brace-in-col-1                 |   1 +
 t/t4018/css-class-selector                 |   1 +
 t/t4018/css-colon-eol                      |   1 +
 t/t4018/css-colon-selector                 |   1 +
 t/t4018/css-common                         |   1 +
 t/t4018/css-id-selector                    |   1 +
 t/t4018/css-long-selector-list             |   1 +
 t/t4018/css-prop-sans-indent               |   1 +
 t/t4018/css-root-selector                  |   1 +
 t/t4018/css-short-selector-list            |   1 +
 t/t4018/css-trailing-space                 |   1 +
 t/t4018/custom.sh                          | 183 ++++++++++++++++++++
 t/t4018/custom1-pattern                    |  17 --
 t/t4018/custom2-match-to-end-of-line       |   8 -
 t/t4018/custom3-alternation-in-pattern     |  17 --
 t/t4018/dts-labels                         |   1 +
 t/t4018/dts-node-unitless                  |   1 +
 t/t4018/dts-nodes                          |   1 +
 t/t4018/dts-nodes-boolean-prop             |   1 +
 t/t4018/dts-nodes-comment1                 |   1 +
 t/t4018/dts-nodes-comment2                 |   1 +
 t/t4018/dts-nodes-multiline-prop           |   1 +
 t/t4018/dts-reference                      |   1 +
 t/t4018/dts-root                           |   1 +
 t/t4018/dts-root-comment                   |   1 +
 t/t4018/elixir-do-not-pick-end             |   1 +
 t/t4018/elixir-ex-unit-test                |   1 +
 t/t4018/elixir-function                    |   1 +
 t/t4018/elixir-macro                       |   1 +
 t/t4018/elixir-module                      |   1 +
 t/t4018/elixir-module-func                 |   1 +
 t/t4018/elixir-nested-module               |   1 +
 t/t4018/elixir-private-function            |   1 +
 t/t4018/elixir-protocol                    |   1 +
 t/t4018/elixir-protocol-implementation     |   1 +
 t/t4018/fortran-block-data                 |   1 +
 t/t4018/fortran-comment                    |   1 +
 t/t4018/fortran-comment-keyword            |   1 +
 t/t4018/fortran-comment-legacy             |   1 +
 t/t4018/fortran-comment-legacy-star        |   1 +
 t/t4018/fortran-external-function          |   1 +
 t/t4018/fortran-external-subroutine        |   1 +
 t/t4018/fortran-module                     |   1 +
 t/t4018/fortran-module-procedure           |   1 +
 t/t4018/fortran-program                    |   1 +
 t/t4018/fountain-scene                     |   1 +
 t/t4018/golang                             | 148 ++++++++++++++++
 t/t4018/golang-complex-function            |   8 -
 t/t4018/golang-func                        |   4 -
 t/t4018/golang-interface                   |   4 -
 t/t4018/golang-long-func                   |   5 -
 t/t4018/golang-struct                      |   4 -
 t/t4018/java-class-member-function         |   1 +
 t/t4018/markdown-heading-indented          |   1 +
 t/t4018/markdown-heading-non-headings      |   1 +
 t/t4018/matlab-class-definition            |   1 +
 t/t4018/matlab-function                    |   1 +
 t/t4018/matlab-octave-section-1            |   1 +
 t/t4018/matlab-octave-section-2            |   1 +
 t/t4018/matlab-section                     |   1 +
 t/t4018/perl-skip-end-of-heredoc           |   8 -
 t/t4018/perl-skip-forward-decl             |  10 --
 t/t4018/perl-skip-sub-in-pod               |  18 --
 t/t4018/perl-sub-definition                |   4 -
 t/t4018/perl-sub-definition-kr-brace       |   4 -
 t/t4018/perl.sh                            |  93 +++++++++++
 t/t4018/php-abstract-class                 |   1 +
 t/t4018/php-abstract-method                |   1 +
 t/t4018/php-class                          |   1 +
 t/t4018/php-final-class                    |   1 +
 t/t4018/php-final-method                   |   1 +
 t/t4018/php-function                       |   1 +
 t/t4018/php-interface                      |   1 +
 t/t4018/php-method                         |   1 +
 t/t4018/php-trait                          |   1 +
 t/t4018/python-async-def                   |   1 +
 t/t4018/python-class                       |   1 +
 t/t4018/python-def                         |   1 +
 t/t4018/python-indented-async-def          |   1 +
 t/t4018/python-indented-class              |   1 +
 t/t4018/python-indented-def                |   1 +
 t/t4018/ruby.sh                            |  58 +++++++
 t/t4018/rust-fn                            |   1 +
 t/t4018/rust-impl                          |   1 +
 t/t4018/rust-macro-rules                   |   1 +
 t/t4018/rust-struct                        |   1 +
 t/t4018/rust-trait                         |   1 +
 userdiff.c                                 | 186 +++++++++++++--------
 userdiff.h                                 |  15 ++
 137 files changed, 1036 insertions(+), 277 deletions(-)
 create mode 100644 t/helper/test-userdiff.c
 create mode 100755 t/t4018/ada.sh
 create mode 100755 t/t4018/custom.sh
 delete mode 100644 t/t4018/custom1-pattern
 delete mode 100644 t/t4018/custom2-match-to-end-of-line
 delete mode 100644 t/t4018/custom3-alternation-in-pattern
 create mode 100644 t/t4018/golang
 delete mode 100644 t/t4018/golang-complex-function
 delete mode 100644 t/t4018/golang-func
 delete mode 100644 t/t4018/golang-interface
 delete mode 100644 t/t4018/golang-long-func
 delete mode 100644 t/t4018/golang-struct
 delete mode 100644 t/t4018/perl-skip-end-of-heredoc
 delete mode 100644 t/t4018/perl-skip-forward-decl
 delete mode 100644 t/t4018/perl-skip-sub-in-pod
 delete mode 100644 t/t4018/perl-sub-definition
 delete mode 100644 t/t4018/perl-sub-definition-kr-brace
 create mode 100755 t/t4018/perl.sh
 create mode 100755 t/t4018/ruby.sh
Range-diff:
 1:  305fc646d0d =  1:  0be132b05e2 userdiff: refactor away the parse_bool() function
 2:  989438c46ae =  2:  d1e00a739ac userdiff style: re-order drivers in alphabetical order
 3:  4c48e5532ce =  3:  b99bd158d45 userdiff style: declare patterns with consistent style
 4:  f41fa5b316f =  4:  9ce6d47021c userdiff style: normalize pascal regex declaration
 5:  0875d5205c1 =  5:  369fbdcee83 userdiff: add and use for_each_userdiff_driver()
 6:  638247d04d5 =  6:  70d62a97211 userdiff tests: explicitly test "default" pattern
 7:  219043a4881 !  7:  792421a2f8b userdiff tests: list builtin drivers via test-tool
    @@ t/helper/test-userdiff.c (new)
     +static int driver_cb(struct userdiff_driver *driver,
     +		     enum userdiff_driver_type type, void *priv)
     +{
    -+	puts(driver->name);
    ++	if (driver->funcname.pattern)
    ++		puts(driver->name);
     +	return 0;
     +}
     +
    @@ t/t4018-diff-funcname.sh: test_description='Test custom diff function name patte
      . ./test-lib.sh
      
      test_expect_success 'setup' '
    -+	builtin_drivers=$(test-tool userdiff list-builtin-drivers) &&
    -+	test -n "$builtin_drivers" &&
    ++	# Make sure additions to builtin_drivers are sorted
    ++	test_when_finished "rm builtin-drivers.sorted" &&
    ++	test-tool userdiff list-builtin-drivers >builtin-drivers &&
    ++	test_file_not_empty builtin-drivers &&
    ++	sort <builtin-drivers >builtin-drivers.sorted &&
    ++	test_cmp builtin-drivers.sorted builtin-drivers &&
     +
      	# a non-trivial custom pattern
      	git config diff.custom1.funcname "!static
    @@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
     -	rust
     -	tex
     -	default
    -+	$builtin_drivers
    ++	$(cat builtin-drivers)
      	custom1
      	custom2
      	custom3
 8:  eb66160aac7 =  8:  9081e2a152e userdiff: remove support for "broken" tests
 9:  c6c54039e27 <  -:  ----------- userdiff tests: match full hunk headers
10:  1c6ddf96f61 !  9:  d3652f95d5e blame tests: don't rely on t/t4018/ directory
    @@ Commit message
         with userdiff driver, 2020-11-01) so that the blame tests don't rely
         on stealing the contents of "t/t4018/fortran-external-function".
     
    -    I'm about to refactor that directory to delete that file, just moving
    -    the relevant test file here inline is the easiest solution, and I
    -    think also the most readable.
    +    I'm about to change that file in a subsequent commit. Just moving the
    +    relevant test file here inline is the easiest solution, and I think
    +    also the most readable.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
11:  8a883d87990 ! 10:  35d12779ea1 blame tests: simplify userdiff driver test
    @@ Commit message
         added in 999cfc4f45 (test-lib functions: add --author support to
         test_commit, 2021-01-12).
     
    -    We also did not need the full fortran-external-function content, let's
    +    We also did not need the full fortran-external-function content. Let's
         cut it down to just the important parts, and further modify it to
         demonstrate that the fortran-specific userdiff function is in effect
    -    by adding "WRONG" lines surrounding the "RIGHT" one.
    +    by adding "DO NOT MATCH ..." and "AS THE ..." lines surrounding the
    +    "RIGHT" one. This is to check that we're using the userdiff "fortran"
    +    driver, as opposed to the default driver.
     
         The test also left behind a .gitattributes files, let's clean it up
         with "test_when_finished".
    @@ t/annotate-tests.sh: test_expect_success 'blame -L ^:RE (absolute: end-of-file)'
     -	cat >$fortran_file <<-\EOF &&
     +test_expect_success 'blame -L :funcname with userdiff driver' '
     +	cat >file.template <<-\EOF &&
    -+	def WRONG begin end
    ++	DO NOT MATCH THIS LINE
      	function RIGHT(a, b) result(c)
    -+	int WRONG(void) {}
    ++	AS THE DEFAULT DRIVER WOULD
      
      	integer, intent(in) :: ChangeMe
     -	integer, intent(in) :: b
    @@ t/annotate-tests.sh: test_expect_success 'blame -L ^:RE (absolute: end-of-file)'
     +	echo "$fortran_file diff=fortran" >.gitattributes &&
     +
     +	test_commit --author "A <A@test.git>" \
    -+		"add" $fortran_file \
    ++		"add" "$fortran_file" \
     +		"$(cat file.template)" &&
     +	test_commit --author "B <B@test.git>" \
    -+		"change" $fortran_file \
    ++		"change" "$fortran_file" \
     +		"$(cat file.template | sed -e s/ChangeMe/IWasChanged/)" &&
    -+	check_count -f $fortran_file -L:RIGHT A 3 B 1
    ++	check_count -f "$fortran_file" -L:RIGHT A 3 B 1
      '
      
      test_expect_success 'setup incremental' '
12:  e56a7a6b5f4 <  -:  ----------- userdiff tests: rewrite hunk header test infrastructure
 -:  ----------- > 11:  4bd8a0daa25 userdiff tests: match full hunk headers
 -:  ----------- > 12:  d2d74476f2a userdiff tests: change setup loop to individual test setup
21:  9a18506aff8 ! 13:  8db95a69924 userdiff tests: factor out test_diff_funcname() logic
    @@ Commit message
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## t/t4018-diff-funcname.sh ##
    -@@ t/t4018-diff-funcname.sh: test_expect_success 'last regexp must not be negated' '
    - 	test_i18ngrep ": Last expression must not be negated:" msg
    +@@ t/t4018-diff-funcname.sh: test_expect_success 'setup hunk header tests' '
    + 	git -C t4018 add .
      '
      
     +do_change_me () {
    @@ t/t4018-diff-funcname.sh: test_expect_success 'last regexp must not be negated'
     +	sed -n -e "s/^.*@@$//p" -e "s/^.*@@ //p" <$file
     +}
     +
    - test_diff_funcname () {
    - 	desc=$1
    - 	cat <&8 >arg.header &&
    -@@ t/t4018-diff-funcname.sh: test_diff_funcname () {
    - 		cp arg.test "$what" &&
    - 		cp arg.header expected &&
    - 		git add "$what" &&
    --		sed -e "s/ChangeMe/IWasChanged/" <"$what" >tmp &&
    --		mv tmp "$what"
    -+		do_change_me "$what"
    - 	' &&
    + # check each individual file
    + for i in $(git -C t4018 ls-files)
    + do
    +@@ t/t4018-diff-funcname.sh: do
      
    - 	test_expect_success "$desc" '
    - 		git diff -U1 "$what" >diff &&
    --		sed -n -e "s/^.*@@$//p" -e "s/^.*@@ //p" <diff >actual &&
    -+		last_diff_context_line diff >actual &&
    - 		test_cmp expected actual
    - 	' &&
    + 		# add test file to the index
    + 		git add \"$i\" &&
    +-		# place modified file in the worktree
    +-		sed -e 's/ChangeMe/IWasChanged/' <\"t4018/$i.content\" >\"$i\"
    ++		do_change_me \"$i\"
    + 	"
      
    + 	test_expect_success "hunk header: $i" "
    + 		git diff -U1 $i >diff &&
    +-		sed -n -e 's/^.*@@$//p' -e 's/^.*@@ //p' <diff >ctx &&
    ++		last_diff_context_line diff >ctx &&
    + 		test_cmp t4018/$i.header ctx
    + 	"
    + done
 -:  ----------- > 14:  e64a00d020e userdiff tests: add alternative hunk header test infrastructure
 -:  ----------- > 15:  3dab65bf394 userdiff tests: add a test with multiple tests in a LANG file
13:  84d20a7cd0c ! 16:  6eff13d01d3 userdiff tests: do config teardown in test_diff_funcname()
    @@ Commit message
      ## t/t4018-diff-funcname.sh ##
     @@ t/t4018-diff-funcname.sh: test_diff_funcname () {
      		git diff -U1 "$what" >diff &&
    - 		sed -n -e "s/^.*@@$//p" -e "s/^.*@@ //p" <diff >actual &&
    + 		last_diff_context_line diff >actual &&
      		test_cmp expected actual
     +	' &&
     +
14:  70fc9fa565b ! 17:  48f15aed4e4 userdiff tests: move custom patterns into one test file
    @@ Commit message
     
      ## t/t4018-diff-funcname.sh ##
     @@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
    - 	builtin_drivers=$(test-tool userdiff list-builtin-drivers) &&
    - 	test -n "$builtin_drivers" &&
    + 	sort <builtin-drivers >builtin-drivers.sorted &&
    + 	test_cmp builtin-drivers.sorted builtin-drivers &&
      
     -	# a non-trivial custom pattern
     -	git config diff.custom1.funcname "!static
    @@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
     @@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
      
      diffpatterns="
    - 	$builtin_drivers
    + 	$(cat builtin-drivers)
     -	custom1
     -	custom2
     -	custom3
15:  8539d6d464e = 18:  11556fe0967 userdiff tests: remove hack for "RIGHT" token
16:  121e5d6dfaf ! 19:  1b96e89843c userdiff tests: do not do compile tests on "custom" pattern
    @@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
      '
      
     -diffpatterns="
    --	$builtin_drivers
    +-	$(cat builtin-drivers)
     -	custom
     -"
     -
     -for p in $diffpatterns
    -+for p in $builtin_drivers
    ++for p in $(cat builtin-drivers)
      do
      	test_expect_success "builtin $p pattern compiles" '
      		echo "*.java diff=$p" >.gitattributes &&
    -@@ t/t4018-diff-funcname.sh: test_diff_funcname () {
    - 	'
    - }
    +@@ t/t4018-diff-funcname.sh: test_expect_success 'last regexp must not be negated' '
    + 	test_i18ngrep ": Last expression must not be negated:" msg
    + '
      
    --for what in $diffpatterns
    -+for what in $builtin_drivers custom
    - do
    - 	test="$TEST_DIRECTORY/t4018/$what.sh"
    - 	if ! test -e "$test"
    ++diffpatterns="
    ++	$(cat builtin-drivers)
    ++	custom
    ++"
    ++
    + test_expect_success 'setup hunk header tests' '
    + 	for i in $diffpatterns
    + 	do
 -:  ----------- > 20:  d3cbfc4354d userdiff tests: assert that new built-in drivers have tests
17:  451b7ae453d = 21:  fd6c51ac6db userdiff tests + docs: document & test "diff.<driver>.x?funcname"
18:  5a402bb9bf1 = 22:  43d818be785 gitattributes doc: reword discussion of built-in userdiff patterns
 -:  ----------- > 23:  37d54d77755 userdiff tests: move perl tests to perl.sh
 -:  ----------- > 24:  b6f4f613857 userdiff tests: move away from "RIGHT" in perl.sh
19:  a3badb1a3ee ! 25:  a39ba8e2545 gitattributes doc: document multi-line userdiff patterns
    @@ Documentation/gitattributes.txt: backslashes; the pattern above picks a line tha
     -There are built-in patterns shipped as part of git itself. A more
     -advanced version of the `tex` pattern discussed above is one of them.
     +Multiple patterns can be supplied by listing them one per line
    -+separated by `\n`. They will be matched one at a time from left to
    -+right. Do not supply a trailing "\n" for the last pattern. E.g.:
    ++separated by `\n`. They will be matched one line at a time, e.g.:
     +
     +------------------------
     +[diff "perl"]
     +	xfuncname = "!^=head\n^[^ ]+.*"
     +------------------------
     +
    -+Patterns in in a list of multiple that begin with "!" are negated. A
    -+matching negated pattern will cause the matched line to be
    ++Patterns in a list of multiple patterns that begin with "!" are
    ++negated. A matching negated pattern will cause the matched line to be
     +skipped. Use it to skip a later pattern that would otherwise match. It
     +is an error if one or more negated patterns aren't followed by a
     +non-negated pattern.
    @@ Documentation/gitattributes.txt: backslashes; the pattern above picks a line tha
     +construct that will match a literal "!" without "!" being the first
     +character on that line, such as "[!]".
     +
    ++If the last pattern in a list of multiple patterns ends with "\n" it
    ++will be interpreted as an empty pattern, and will match the first
    ++empty line. It's almost always a logic error to provide a list of
    ++multiple patterns ending with "\n", but it's permitted in case you
    ++genuinely want to match an empty line.
    ++
     +If the pattern contains a `$1` capture it will be used instead of the
     +entire matching line (`$0`) to display the hunk header. This can be
     +used e.g. to strip whitespace from the beginning of the line, or to
    @@ t/t4018/custom.sh: ChangeMe
     +foo
     +EOF_HUNK
     +sub foo;
    ++
     +=head1
    ++
    ++ChangeMe
    ++
    ++EOF_TEST
    ++
    ++test_expect_success 'custom: multiple patterns ending with \n' '
    ++	git config diff.custom.xfuncname "!^=head
    ++^sub ([^;]+)
    ++"
    ++'
    ++
    ++test_diff_funcname 'custom: multiple patterns ending with \n' \
    ++	8<<\EOF_HUNK 9<<\EOF_TEST
    ++
    ++EOF_HUNK
    ++sub foo;
    ++
    ++=head1
    ++
     +ChangeMe
     +
     +EOF_TEST
     
      ## t/t4018/perl.sh ##
    -@@ t/t4018/perl.sh: sub RIGHT
    +@@ t/t4018/perl.sh: sub asub
      	print "ChangeMe\n";
      }
      EOF_TEST
    @@ t/t4018/perl.sh: sub RIGHT
     +EOF_HUNK
     +sub foo;
     +=head1
    -+ChangeMe
     +
    ++ChangeMe
     +EOF_TEST
 -:  ----------- > 26:  27394c6c2a4 userdiff tests: switch to -U0 by default
20:  1b46726e85f = 27:  91ab863a298 userdiff tests: remove "funcname" from custom3 test
22:  24548fb680e <  -:  ----------- userdiff tests: test hunk headers on accumulated files
23:  48f00a59d5e <  -:  ----------- userdiff tests: test hunk header selection with -U0
24:  05a01990c9c ! 28:  b68133ce5f7 userdiff tests: assert empty hunk header context on -U<large>
    @@ Commit message
     
         Assert the existing behavior that under -U<large> we'll show no hunk
         header context, where <large> takes us past the potential hunk header
    -    we'd have extracted. I'm just picking a number over nine thousand as a
    -    really large number we're unlikely to exceed in these tests.
    +    we'd have extracted.
    +
    +    I'm just picking a number over nine thousand as a really large number
    +    we're unlikely to exceed in these tests.
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
    @@ t/t4018-diff-funcname.sh: test_diff_funcname () {
      		test_cmp expected actual
      	' &&
      
    -+	test_expect_success "$desc -U9001 (accumulated)" '
    -+		git diff -U9001 "$what".acc >diff &&
    -+		last_diff_context_line diff >actual.lines &&
    -+		tail -n 1 actual.lines >actual &&
    ++	test_expect_success "$desc -U9001" '
    ++		git diff -U9001 "$what" >diff &&
    ++		last_diff_context_line diff >actual &&
     +		echo >blank &&
     +		test_cmp blank actual
     +	' &&
25:  3d2f42d7041 <  -:  ----------- userdiff: match "package" in diff=golang
 -:  ----------- > 29:  9f3a7ca788b userdiff tests: test for a bug in 1dbf0c0ad6c
 -:  ----------- > 30:  43ee24e554b userdiff golang: simplify and correct matching regex
 -:  ----------- > 31:  70a2e7ca70b userdiff golang: don't over-match intented constructs
 -:  ----------- > 32:  6b942cd651b userdiff golang: add a rule to match "package"
 -:  ----------- > 33:  f45d35387d9 userdiff golang: match multi-line "const" and "import"
26:  b2e16ade06c ! 34:  c67c3e160f3 userdiff tests: add basic test for ada
    @@ Commit message
         1. https://rosettacode.org/wiki/99_bottles_of_beer#Ada
         2. https://en.wikibooks.org/wiki/Ada_Programming/Tasking
     
    + ## t/t4018-diff-funcname.sh ##
    +@@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
    + 	# Do not add anything to this list. New built-in drivers should have
    + 	# tests
    + 	cat >drivers-no-tests <<-\EOF &&
    +-	ada
    + 	bibtex
    + 	csharp
    + 	html
    +
      ## t/t4018/ada.sh (new) ##
     @@
     +#!/bin/sh
27:  826b6f4d6ae ! 35:  e2aedd738ef userdiff tests: add basic test for ruby
    @@ Commit message
     
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
    + ## t/t4018-diff-funcname.sh ##
    +@@ t/t4018-diff-funcname.sh: test_expect_success 'setup' '
    + 	html
    + 	objc
    + 	pascal
    +-	ruby
    + 	tex
    + 	EOF
    + 
    +
      ## t/t4018/ruby.sh (new) ##
     @@
     +#!/bin/sh
    @@ t/t4018/ruby.sh (new)
     +EOF_TEST
     +
     +test_diff_funcname 'ruby: picks first "class/module/def" before changed context' \
    -+	"class Two" \
    ++	'-U1' \
     +	8<<\EOF_HUNK 9<<\EOF_TEST
     +class One
     +EOF_HUNK
-- 
2.30.0.284.gd98b1dd5eaa7
Previous: Johannes SixtNext: Johannes Sixt
Message 26 of 192 in “userdiff: add support for Emacs Lisp”
  1. userdiff: add support for Emacs LispAdam Spiers, Feb 13, 2021
  2. Ævar Arnfjörð BjarmasonFeb 14, 2021
  3. Johannes SixtFeb 14, 2021
  4. Johannes SixtFeb 14, 2021
  5. Ævar Arnfjörð BjarmasonFeb 14, 2021
  6. 01/20 userdiff: refactor away the parse_bool() functionÆvar Arnfjörð Bjarmason, Feb 15, 2021
  7. 03/20 userdiff: add and use for_each_userdiff_driver()Ævar Arnfjörð Bjarmason, Feb 15, 2021
  8. 02/20 userdiff: re-order builtin drivers in alphabetical orderÆvar Arnfjörð Bjarmason, Feb 15, 2021
  9. 00/20 userdiff: refactor + test + doc + misc improvementsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  10. 02/27 userdiff style: re-order drivers in alphabetical orderÆvar Arnfjörð Bjarmason, Feb 15, 2021
  11. 01/27 userdiff: refactor away the parse_bool() functionÆvar Arnfjörð Bjarmason, Feb 15, 2021
  12. 00/27 userdiff: refactor + test + doc + misc improvementsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  13. 0/2 diff: do not display hunk context under -WÆvar Arnfjörð Bjarmason, Feb 15, 2021
  14. 2/2 diff: test and document -W interaction with -U<n>Ævar Arnfjörð Bjarmason, Feb 15, 2021
  15. Johannes SixtFeb 16, 2021
  16. 1/2 diff: do not display hunk context under -WÆvar Arnfjörð Bjarmason, Feb 15, 2021
  17. René Scharfe.Feb 15, 2021
  18. Ævar Arnfjörð BjarmasonFeb 15, 2021
  19. René Scharfe.Feb 15, 2021
  20. Junio C HamanoFeb 16, 2021
  21. Junio C HamanoFeb 16, 2021
  22. Johannes SixtFeb 16, 2021
  23. Junio C HamanoFeb 16, 2021
  24. Eric SunshineFeb 15, 2021
  25. Johannes SixtFeb 15, 2021
  26. 00/35 20210215154427.32693-1-avarab@gmail.comÆvar Arnfjörð Bjarmason, Feb 24, 2021
  27. Johannes SixtFeb 27, 2021
  28. Johannes SixtFeb 28, 2021
  29. Ævar Arnfjörð BjarmasonFeb 28, 2021
  30. Johannes SixtMar 1, 2021
  31. 00/10 userdiff: refactor + test improvementsÆvar Arnfjörð Bjarmason, Mar 24, 2021
  32. 01/10 userdiff: refactor away the parse_bool() functionÆvar Arnfjörð Bjarmason, Mar 24, 2021
  33. Jeff KingMar 24, 2021
  34. 02/10 userdiff style: re-order drivers in alphabetical orderÆvar Arnfjörð Bjarmason, Mar 24, 2021
  35. 06/10 userdiff tests: explicitly test "default" patternÆvar Arnfjörð Bjarmason, Mar 24, 2021
  36. 04/10 userdiff style: normalize pascal regex declarationÆvar Arnfjörð Bjarmason, Mar 24, 2021
  37. 08/10 userdiff: remove support for "broken" testsÆvar Arnfjörð Bjarmason, Mar 24, 2021
  38. 05/10 userdiff: add and use for_each_userdiff_driver()Ævar Arnfjörð Bjarmason, Mar 24, 2021
  39. Junio C HamanoMar 24, 2021
  40. Jeff KingMar 24, 2021
  41. Junio C HamanoMar 24, 2021
  42. Jeff KingMar 24, 2021
  43. Ævar Arnfjörð BjarmasonMar 24, 2021
  44. Jeff KingMar 25, 2021
  45. Ævar Arnfjörð BjarmasonMar 25, 2021
  46. Jeff KingMar 26, 2021
  47. Ævar Arnfjörð BjarmasonApr 9, 2021
  48. Jeff KingApr 9, 2021
  49. Junio C HamanoApr 9, 2021
  50. Ævar Arnfjörð BjarmasonApr 10, 2021
  51. 03/10 userdiff style: declare patterns with consistent styleÆvar Arnfjörð Bjarmason, Mar 24, 2021
  52. 09/10 blame tests: don't rely on t/t4018/ directoryÆvar Arnfjörð Bjarmason, Mar 24, 2021
  53. 07/10 userdiff tests: list builtin drivers via test-toolÆvar Arnfjörð Bjarmason, Mar 24, 2021
  54. 10/10 blame tests: simplify userdiff driver testÆvar Arnfjörð Bjarmason, Mar 24, 2021
  55. Johannes SixtMar 24, 2021
  56. Junio C HamanoMar 24, 2021
  57. Jeff KingMar 24, 2021
  58. 0/9 userdiff: refactor + test improvementsÆvar Arnfjörð Bjarmason, Apr 8, 2021
  59. 1/9 userdiff style: re-order drivers in alphabetical orderÆvar Arnfjörð Bjarmason, Apr 8, 2021
  60. 2/9 userdiff style: declare patterns with consistent styleÆvar Arnfjörð Bjarmason, Apr 8, 2021
  61. 3/9 userdiff style: normalize pascal regex declarationÆvar Arnfjörð Bjarmason, Apr 8, 2021
  62. 4/9 userdiff: add and use for_each_userdiff_driver()Ævar Arnfjörð Bjarmason, Apr 8, 2021
  63. Junio C HamanoApr 8, 2021
  64. 6/9 userdiff tests: list builtin drivers via test-toolÆvar Arnfjörð Bjarmason, Apr 8, 2021
  65. 5/9 userdiff tests: explicitly test "default" patternÆvar Arnfjörð Bjarmason, Apr 8, 2021
  66. 7/9 userdiff: remove support for "broken" testsÆvar Arnfjörð Bjarmason, Apr 8, 2021
  67. 9/9 blame tests: simplify userdiff driver testÆvar Arnfjörð Bjarmason, Apr 8, 2021
  68. 8/9 blame tests: don't rely on t/t4018/ directoryÆvar Arnfjörð Bjarmason, Apr 8, 2021
  69. 01/35 userdiff: refactor away the parse_bool() functionÆvar Arnfjörð Bjarmason, Feb 24, 2021
  70. 02/35 userdiff style: re-order drivers in alphabetical orderÆvar Arnfjörð Bjarmason, Feb 24, 2021
  71. 03/35 userdiff style: declare patterns with consistent styleÆvar Arnfjörð Bjarmason, Feb 24, 2021
  72. 04/35 userdiff style: normalize pascal regex declarationÆvar Arnfjörð Bjarmason, Feb 24, 2021
  73. 05/35 userdiff: add and use for_each_userdiff_driver()Ævar Arnfjörð Bjarmason, Feb 24, 2021
  74. 06/35 userdiff tests: explicitly test "default" patternÆvar Arnfjörð Bjarmason, Feb 24, 2021
  75. 07/35 userdiff tests: list builtin drivers via test-toolÆvar Arnfjörð Bjarmason, Feb 24, 2021
  76. 08/35 userdiff: remove support for "broken" testsÆvar Arnfjörð Bjarmason, Feb 24, 2021
  77. 09/35 blame tests: don't rely on t/t4018/ directoryÆvar Arnfjörð Bjarmason, Feb 24, 2021
  78. 10/35 blame tests: simplify userdiff driver testÆvar Arnfjörð Bjarmason, Feb 24, 2021
  79. 12/35 userdiff tests: change setup loop to individual test setupÆvar Arnfjörð Bjarmason, Feb 24, 2021
  80. Junio C HamanoFeb 25, 2021
  81. Johannes SixtFeb 25, 2021
  82. Junio C HamanoFeb 25, 2021
  83. 15/35 userdiff tests: add a test with multiple tests in a LANG fileÆvar Arnfjörð Bjarmason, Feb 24, 2021
  84. 11/35 userdiff tests: match full hunk headersÆvar Arnfjörð Bjarmason, Feb 24, 2021
  85. Junio C HamanoFeb 25, 2021
  86. 16/35 userdiff tests: do config teardown in test_diff_funcname()Ævar Arnfjörð Bjarmason, Feb 24, 2021
  87. 19/35 userdiff tests: do not do compile tests on "custom" patternÆvar Arnfjörð Bjarmason, Feb 24, 2021
  88. 21/35 userdiff tests + docs: document & test "diff.<driver>.x?funcname"Ævar Arnfjörð Bjarmason, Feb 24, 2021
  89. 25/35 gitattributes doc: document multi-line userdiff patternsÆvar Arnfjörð Bjarmason, Feb 24, 2021
  90. 23/35 userdiff tests: move perl tests to perl.shÆvar Arnfjörð Bjarmason, Feb 24, 2021
  91. 27/35 userdiff tests: remove "funcname" from custom3 testÆvar Arnfjörð Bjarmason, Feb 24, 2021
  92. 13/35 userdiff tests: factor out test_diff_funcname() logicÆvar Arnfjörð Bjarmason, Feb 24, 2021
  93. Junio C HamanoFeb 25, 2021
  94. 14/35 userdiff tests: add alternative hunk header test infrastructureÆvar Arnfjörð Bjarmason, Feb 24, 2021
  95. Johannes SixtFeb 28, 2021
  96. 29/35 userdiff tests: test for a bug in 1dbf0c0ad6cÆvar Arnfjörð Bjarmason, Feb 24, 2021
  97. 17/35 userdiff tests: move custom patterns into one test fileÆvar Arnfjörð Bjarmason, Feb 24, 2021
  98. 18/35 userdiff tests: remove hack for "RIGHT" tokenÆvar Arnfjörð Bjarmason, Feb 24, 2021
  99. 22/35 gitattributes doc: reword discussion of built-in userdiff patternsÆvar Arnfjörð Bjarmason, Feb 24, 2021
  100. 20/35 userdiff tests: assert that new built-in drivers have testsÆvar Arnfjörð Bjarmason, Feb 24, 2021
  101. Johannes SixtFeb 28, 2021
  102. Ævar Arnfjörð BjarmasonFeb 28, 2021
  103. 26/35 userdiff tests: switch to -U0 by defaultÆvar Arnfjörð Bjarmason, Feb 24, 2021
  104. 24/35 userdiff tests: move away from "RIGHT" in perl.shÆvar Arnfjörð Bjarmason, Feb 24, 2021
  105. 28/35 userdiff tests: assert empty hunk header context on -U<large>Ævar Arnfjörð Bjarmason, Feb 24, 2021
  106. 31/35 userdiff golang: don't over-match intented constructsÆvar Arnfjörð Bjarmason, Feb 24, 2021
  107. Johannes SixtFeb 26, 2021
  108. 33/35 userdiff golang: match multi-line "const" and "import"Ævar Arnfjörð Bjarmason, Feb 24, 2021
  109. 34/35 userdiff tests: add basic test for adaÆvar Arnfjörð Bjarmason, Feb 24, 2021
  110. Johannes SixtFeb 27, 2021
  111. 32/35 userdiff golang: add a rule to match "package"Ævar Arnfjörð Bjarmason, Feb 24, 2021
  112. Johannes SixtFeb 26, 2021
  113. 35/35 userdiff tests: add basic test for rubyÆvar Arnfjörð Bjarmason, Feb 24, 2021
  114. Johannes SixtFeb 27, 2021
  115. 30/35 userdiff golang: simplify and correct matching regexÆvar Arnfjörð Bjarmason, Feb 24, 2021
  116. 11/27 blame tests: simplify userdiff driver testÆvar Arnfjörð Bjarmason, Feb 15, 2021
  117. Johannes SixtFeb 15, 2021
  118. Ævar Arnfjörð BjarmasonFeb 17, 2021
  119. Junio C HamanoFeb 17, 2021
  120. Johannes SixtFeb 17, 2021
  121. 10/27 blame tests: don't rely on t/t4018/ directoryÆvar Arnfjörð Bjarmason, Feb 15, 2021
  122. Junio C HamanoFeb 16, 2021
  123. 07/27 userdiff tests: list builtin drivers via test-toolÆvar Arnfjörð Bjarmason, Feb 15, 2021
  124. 04/27 userdiff style: normalize pascal regex declarationÆvar Arnfjörð Bjarmason, Feb 15, 2021
  125. 05/27 userdiff: add and use for_each_userdiff_driver()Ævar Arnfjörð Bjarmason, Feb 15, 2021
  126. 03/27 userdiff style: declare patterns with consistent styleÆvar Arnfjörð Bjarmason, Feb 15, 2021
  127. 13/27 userdiff tests: do config teardown in test_diff_funcname()Ævar Arnfjörð Bjarmason, Feb 15, 2021
  128. 09/27 userdiff tests: match full hunk headersÆvar Arnfjörð Bjarmason, Feb 15, 2021
  129. Johannes SixtFeb 15, 2021
  130. Ævar Arnfjörð BjarmasonFeb 15, 2021
  131. Junio C HamanoFeb 16, 2021
  132. Junio C HamanoFeb 17, 2021
  133. Ævar Arnfjörð BjarmasonFeb 17, 2021
  134. Johannes SixtFeb 16, 2021
  135. Ævar Arnfjörð BjarmasonFeb 17, 2021
  136. Junio C HamanoFeb 17, 2021
  137. Ævar Arnfjörð BjarmasonFeb 23, 2021
  138. Johannes SixtFeb 23, 2021
  139. Ævar Arnfjörð BjarmasonFeb 24, 2021
  140. Johannes SixtFeb 24, 2021
  141. 08/27 userdiff: remove support for "broken" testsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  142. 06/27 userdiff tests: explicitly test "default" patternÆvar Arnfjörð Bjarmason, Feb 15, 2021
  143. 14/27 userdiff tests: move custom patterns into one test fileÆvar Arnfjörð Bjarmason, Feb 15, 2021
  144. 25/27 userdiff: match "package" in diff=golangÆvar Arnfjörð Bjarmason, Feb 15, 2021
  145. 24/27 userdiff tests: assert empty hunk header context on -U<large>Ævar Arnfjörð Bjarmason, Feb 15, 2021
  146. 23/27 userdiff tests: test hunk header selection with -U0Ævar Arnfjörð Bjarmason, Feb 15, 2021
  147. Johannes SixtFeb 15, 2021
  148. 26/27 userdiff tests: add basic test for adaÆvar Arnfjörð Bjarmason, Feb 15, 2021
  149. 27/27 userdiff tests: add basic test for rubyÆvar Arnfjörð Bjarmason, Feb 15, 2021
  150. 18/27 gitattributes doc: reword discussion of built-in userdiff patternsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  151. Junio C HamanoFeb 16, 2021
  152. 16/27 userdiff tests: do not do compile tests on "custom" patternÆvar Arnfjörð Bjarmason, Feb 15, 2021
  153. 20/27 userdiff tests: remove "funcname" from custom3 testÆvar Arnfjörð Bjarmason, Feb 15, 2021
  154. 12/27 userdiff tests: rewrite hunk header test infrastructureÆvar Arnfjörð Bjarmason, Feb 15, 2021
  155. Johannes SixtFeb 15, 2021
  156. Ævar Arnfjörð BjarmasonFeb 15, 2021
  157. Johannes SixtFeb 15, 2021
  158. Junio C HamanoFeb 16, 2021
  159. 19/27 gitattributes doc: document multi-line userdiff patternsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  160. Johannes SixtFeb 15, 2021
  161. Ævar Arnfjörð BjarmasonFeb 15, 2021
  162. Junio C HamanoFeb 17, 2021
  163. 15/27 userdiff tests: remove hack for "RIGHT" tokenÆvar Arnfjörð Bjarmason, Feb 15, 2021
  164. 17/27 userdiff tests + docs: document & test "diff.<driver>.x?funcname"Ævar Arnfjörð Bjarmason, Feb 15, 2021
  165. 21/27 userdiff tests: factor out test_diff_funcname() logicÆvar Arnfjörð Bjarmason, Feb 15, 2021
  166. 22/27 userdiff tests: test hunk headers on accumulated filesÆvar Arnfjörð Bjarmason, Feb 15, 2021
  167. Johannes SixtFeb 15, 2021
  168. 04/20 userdiff tests: explicitly test "default" patternÆvar Arnfjörð Bjarmason, Feb 15, 2021
  169. 05/20 userdiff tests: list builtin drivers via test-toolÆvar Arnfjörð Bjarmason, Feb 15, 2021
  170. Eric SunshineFeb 15, 2021
  171. 06/20 userdiff: remove support for "broken" testsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  172. 09/20 blame tests: don't rely on t/t4018/ directoryÆvar Arnfjörð Bjarmason, Feb 15, 2021
  173. 10/20 userdiff tests: move custom patterns into one test fileÆvar Arnfjörð Bjarmason, Feb 15, 2021
  174. 07/20 userdiff tests: match full hunk headersÆvar Arnfjörð Bjarmason, Feb 15, 2021
  175. Eric SunshineFeb 15, 2021
  176. 11/20 userdiff tests: remove hack for "RIGHT" tokenÆvar Arnfjörð Bjarmason, Feb 15, 2021
  177. 08/20 userdiff tests: rewrite hunk header test infrastructureÆvar Arnfjörð Bjarmason, Feb 15, 2021
  178. 12/20 userdiff: match "package" in diff=golangÆvar Arnfjörð Bjarmason, Feb 15, 2021
  179. 13/20 userdiff tests + docs: document & test "diff.<driver>.x?funcname"Ævar Arnfjörð Bjarmason, Feb 15, 2021
  180. Eric SunshineFeb 15, 2021
  181. 14/20 gitattributes doc: reword discussion of built-in userdiff patternsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  182. Eric SunshineFeb 15, 2021
  183. 17/20 userdiff tests: factor out test_diff_funcname() logicÆvar Arnfjörð Bjarmason, Feb 15, 2021
  184. 15/20 gitattributes doc: document multi-line userdiff patternsÆvar Arnfjörð Bjarmason, Feb 15, 2021
  185. Chris TorekFeb 15, 2021
  186. Eric SunshineFeb 15, 2021
  187. 19/20 userdiff tests: test hunk header selection with -U0Ævar Arnfjörð Bjarmason, Feb 15, 2021
  188. 16/20 userdiff tests: remove "funcname" from custom3 testÆvar Arnfjörð Bjarmason, Feb 15, 2021
  189. 18/20 userdiff tests: test hunk headers on accumulated filesÆvar Arnfjörð Bjarmason, Feb 15, 2021
  190. 20/20 userdiff tests: assert empty hunk header context on -U<large>Ævar Arnfjörð Bjarmason, Feb 15, 2021
  191. Protesilaos StavrouFeb 16, 2021
  192. Ævar Arnfjörð BjarmasonFeb 16, 2021

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.