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

Re: [PATCH v5 06/18] tests: use "test_cmp", not "diff", when verifying the result

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 2, 2010, 04:39 UTC
Message-ID
<7vy6eyoxoj.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20100514093751.825924000@mlists.thewrittenword.com>
"Gary V. Vaughan" <git@mlists.thewrittenword.com> writes:
Show 5 quoted lines
> In tests, call test_cmp rather than raw diff where possible (i.e. if
> the output does not go to a pipe), to allow the use of, say, 'cmp'
> when the default 'diff -u' is not compatible with a vendor diff.
>
> When that is not possible, use $DIFF, as set in GIT-BUILD-OPTIONS.
Both are very worthy goal.
Show 10 quoted lines
> Index: b/t/t0000-basic.sh
> ===================================================================
> --- a/t/t0000-basic.sh
> +++ b/t/t0000-basic.sh
> @@ -280,7 +280,7 @@ $expectfilter >expected <<\EOF
>  EOF
>  test_expect_success \
>      'validate git diff-files output for a know cache/work tree state.' \
> -    'git diff-files >current && diff >/dev/null -b current expected'
> +    'git diff-files >current && test_cmp current expected >/dev/null'

... and I think we could lose >/dev/null redirection once we rewrite these using test_cmp, but that can be a separate patch.

Show 18 quoted lines
> Index: b/t/Makefile
> ===================================================================
> --- a/t/Makefile
> +++ b/t/Makefile
> @@ -6,10 +6,14 @@
>  -include ../config.mak
>  
>  #GIT_TEST_OPTS=--verbose --debug
> +GIT_TEST_CMP ?= $(DIFF)
>  SHELL_PATH ?= $(SHELL)
>  TAR ?= $(TAR)
>  RM ?= rm -f
>  
> +# Make sure test-lib.sh uses make's value of GIT_TEST_CMP
> +export GIT_TEST_CMP
> +
>  # Shell quote;
>  SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
But isn't this a regression?  When GIT_TEST_CMP is not defined, we used to
    GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
which in turn is used like this:
    test_cmp() {
            $GIT_TEST_CMP "$@"
    }

so people would get a more readable "diff -u" output when GIT_TEST_CMP is not defined and exported. With your patch we would lose -u everywhere, no?

Also even if your vendor diff lacks unified context format, I would presume that it would support good old copied context format with -c, and it would give us a better readability.

How about doing something like this on top of your patch?

Your 7/18 will instead be setting "GIT_TEST_CMP_USE_COPIED_CONTEXT = YesPlease" for (hopefully) most of the targets whose native "diff" knows copied context format, and others will set GIT_TEST_CMP to cmp, perhaps?

---
 Makefile      |    4 ++++
 t/Makefile    |    4 ----
 t/test-lib.sh |   11 ++++++++++-
 3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index 668dbc9..c8cc9e2 100644
--- a/Makefile
+++ b/Makefile
@@ -1374,6 +1374,10 @@ ifdef USE_NED_ALLOCATOR
        COMPAT_OBJS += compat/nedmalloc/nedmalloc.o
 endif
 
+ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
+	export GIT_TEST_CMP_USE_COPIED_CONTEXT
+endif
+
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK=NoThanks
 endif
diff --git a/t/Makefile b/t/Makefile
index 93a6475..25c559b 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -6,14 +6,10 @@
 -include ../config.mak
 
 #GIT_TEST_OPTS=--verbose --debug
-GIT_TEST_CMP ?= $(DIFF)
 SHELL_PATH ?= $(SHELL)
 TAR ?= $(TAR)
 RM ?= rm -f
 
-# Make sure test-lib.sh uses make's value of GIT_TEST_CMP
-export GIT_TEST_CMP
-
 # Shell quote;
 SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
 
diff --git a/t/test-lib.sh b/t/test-lib.sh
index c582964..a290011 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -63,7 +63,16 @@ export GIT_MERGE_VERBOSITY
 export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME
 export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
 export EDITOR
-GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
+
+if test -z "$GIT_TEST_CMP"
+then
+	if test -n "$GIT_TEST_CMP_USE_COPIED_CONTEXT"
+	then
+		GIT_TEST_CMP="$DIFF -c"
+	else
+		GIT_TEST_CMP="$DIFF -u"
+	fi
+fi
 
 # Protect ourselves from common misconfiguration to export
 # CDPATH into the environment
Previous: Gary V. VaughanNext: Gary V. Vaughan
Message 14 of 34 in “Portability patches for git-1.7.1”
  1. 00/18 Portability patches for git-1.7.1Gary V. Vaughan, May 14, 2010
  2. 01/18 Makefile: pass CPPFLAGS through to fllow customizationGary V. Vaughan, May 14, 2010
  3. Robin H. JohnsonMay 14, 2010
  4. Gary V. VaughanMay 14, 2010
  5. Robin H. JohnsonMay 14, 2010
  6. Gary V. VaughanMay 14, 2010
  7. 02/18 Rewrite dynamic structure initializations to runtime assignmentGary V. Vaughan, May 14, 2010
  8. Junio C HamanoJun 2, 2010
  9. 03/18 Makefile: -lpthread may still be necessary when libc has only pthread stubsGary V. Vaughan, May 14, 2010
  10. 04/18 enums: omit trailing comma for portabilityGary V. Vaughan, May 14, 2010
  11. 05/18 Do not use "diff" found on PATH while building and installingGary V. Vaughan, May 14, 2010
  12. Junio C HamanoJun 2, 2010
  13. 06/18 tests: use "test_cmp", not "diff", when verifying the resultGary V. Vaughan, May 14, 2010
  14. Junio C HamanoJun 2, 2010
  15. 07/18 test_cmp: do not use "diff -u" on platforms that lack oneGary V. Vaughan, May 14, 2010
  16. 08/18 git-compat-util.h: some platforms with mmap() lack MAP_FAILED definitionGary V. Vaughan, May 14, 2010
  17. 09/18 Makefile: some platforms do not have hstrerror anywhereGary V. Vaughan, May 14, 2010
  18. 10/18 Make NO_{INET_NTOP,INET_PTON} configured independentlyGary V. Vaughan, May 14, 2010
  19. 11/18 Some platforms lack socklen_t typeGary V. Vaughan, May 14, 2010
  20. 12/18 Allow disabling "inline"Gary V. Vaughan, May 14, 2010
  21. 13/18 inline declaration does not work on AIXGary V. Vaughan, May 14, 2010
  22. 14/18 Makefile: SunOS 5.6 portability fixGary V. Vaughan, May 14, 2010
  23. 15/18 git-compat-util.h: Irix 6.5 defines sgi but not __sgi.Gary V. Vaughan, May 14, 2010
  24. git-compat-util.h: use apparently more common __sgi macro to detect SGI IRIXBrandon Casey, Jun 2, 2010
  25. Gary V. VaughanJun 2, 2010
  26. Tor ArntsenJun 2, 2010
  27. 16/18 Makefile: HPUX11 portability fixes.Gary V. Vaughan, May 14, 2010
  28. 17/18 Makefile: HP-UX 10.20 portability fixes.Gary V. Vaughan, May 14, 2010
  29. 18/18 Makefile: Tru64 portability fixGary V. Vaughan, May 14, 2010
  30. Gary V. VaughanMay 26, 2010
  31. Gary V. VaughanJun 7, 2010
  32. Junio C HamanoJun 7, 2010
  33. Tor ArntsenJun 9, 2010
  34. Junio C HamanoJun 11, 2010

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.