Merge branch 'jk/portable'
authorJunio C Hamano <gitster@pobox.com>
Sat, 15 Mar 2008 08:10:53 +0000 (01:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 15 Mar 2008 08:10:53 +0000 (01:10 -0700)
* jk/portable:
t6000lib: re-fix tr portability
t7505: use SHELL_PATH in hook
t9112: add missing #!/bin/sh header
filter-branch: use $SHELL_PATH instead of 'sh'
filter-branch: don't use xargs -0
add NO_EXTERNAL_GREP build option
t6000lib: tr portability fix
t4020: don't use grep -a
add test_cmp function for test scripts
remove use of "tail -n 1" and "tail -1"
grep portability fix: don't use "-e" or "-q"
more tr portability test script fixes
t0050: perl portability fix
tr portability fixes

70 files changed:
Makefile
builtin-grep.c
git-am.sh
git-bisect.sh
git-filter-branch.sh
git-rebase--interactive.sh
git-submodule.sh
t/diff-lib.sh
t/t0003-attributes.sh
t/t0020-crlf.sh
t/t0022-crlf-rename.sh
t/t0030-stripspace.sh
t/t0050-filesystem.sh
t/t1005-read-tree-reset.sh
t/t1300-repo-config.sh
t/t2200-add-update.sh
t/t3001-ls-files-others-exclude.sh
t/t3050-subprojects-fetch.sh
t/t3060-ls-files-with-tree.sh
t/t3201-branch-contains.sh
t/t3300-funny-names.sh
t/t3404-rebase-interactive.sh
t/t3405-rebase-malformed.sh
t/t3406-rebase-message.sh
t/t3701-add-interactive.sh
t/t3800-mktag.sh
t/t3902-quoted.sh
t/t3903-stash.sh
t/t4020-diff-external.sh
t/t4020/diff.NUL [new file with mode: 0644]
t/t4022-diff-rewrite.sh
t/t4023-diff-rename-typechange.sh
t/t4024-diff-optimize-common.sh
t/t4025-hunk-header.sh
t/t4027-diff-submodule.sh
t/t4103-apply-binary.sh
t/t4105-apply-fuzz.sh
t/t4116-apply-reverse.sh
t/t4125-apply-ws-fuzz.sh
t/t4150-am-subdir.sh
t/t4200-rerere.sh
t/t4201-shortlog.sh
t/t5300-pack-object.sh
t/t5302-pack-index.sh
t/t5400-send-pack.sh
t/t5505-remote.sh
t/t5510-fetch.sh
t/t5512-ls-remote.sh
t/t6000lib.sh
t/t6004-rev-list-path-optim.sh
t/t6009-rev-list-parent.sh
t/t6027-merge-binary.sh
t/t6029-merge-subtree.sh
t/t6030-bisect-porcelain.sh
t/t7003-filter-branch.sh
t/t7010-setup.sh
t/t7201-co.sh
t/t7501-commit.sh
t/t7502-commit.sh
t/t7502-status.sh
t/t7505-prepare-commit-msg-hook.sh
t/t7600-merge.sh
t/t8003-blame.sh
t/t9001-send-email.sh
t/t9112-git-svn-md5less-file.sh
t/t9116-git-svn-log.sh
t/t9200-git-cvsexportcommit.sh
t/t9400-git-cvsserver-server.sh
t/test-lib.sh
test-sha1.sh
index e3eaa6a543e7c3eed8a72c00f8b5541524fc9508..87739e7e3cae3a7892f6b9063e1c8a7b4b5505e0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -148,6 +148,9 @@ all::
 # is a simplified version of the merge sort used in glibc. This is
 # recommended if Git triggers O(n^2) behavior in your platform's qsort().
 #
+# Define NO_EXTERNAL_GREP if you don't want "git grep" to ever call
+# your external grep (e.g., if your system lacks grep, if its grep is
+# broken, or spawning external process is slower than built-in grep git has).
 
 GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
        @$(SHELL_PATH) ./GIT-VERSION-GEN
@@ -760,6 +763,9 @@ endif
 ifdef DIR_HAS_BSD_GROUP_SEMANTICS
        COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS
 endif
+ifdef NO_EXTERNAL_GREP
+       BASIC_CFLAGS += -DNO_EXTERNAL_GREP
+endif
 
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK=NoThanks
@@ -867,6 +873,7 @@ common-cmds.h: $(wildcard Documentation/git-*.txt)
 $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
        $(QUIET_GEN)$(RM) $@ $@+ && \
        sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
+           -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
            -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
            -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
            -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
index f4f4ecb11b587c74a009c94cb7b230e7c93590e4..ef299108f529fa5fa931d765828f04535c3a6351 100644 (file)
 #include "builtin.h"
 #include "grep.h"
 
+#ifndef NO_EXTERNAL_GREP
+#ifdef __unix__
+#define NO_EXTERNAL_GREP 0
+#else
+#define NO_EXTERNAL_GREP 1
+#endif
+#endif
+
 /*
  * git grep pathspecs are somewhat different from diff-tree pathspecs;
  * pathname wildcards are allowed.
@@ -153,7 +161,7 @@ static int grep_file(struct grep_opt *opt, const char *filename)
        return i;
 }
 
-#ifdef __unix__
+#if !NO_EXTERNAL_GREP
 static int exec_grep(int argc, const char **argv)
 {
        pid_t pid;
@@ -372,7 +380,7 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
        int nr;
        read_cache();
 
-#ifdef __unix__
+#if !NO_EXTERNAL_GREP
        /*
         * Use the external "grep" command for the case where
         * we grep through the checked-out files. It tends to
index 1f6b5e02c5e7da45a8e7966b600946cff9c24832..ac5c388060789e559f80d61d6eae1db926b66ad4 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -357,7 +357,7 @@ do
                LAST_SIGNED_OFF_BY=`
                    sed -ne '/^Signed-off-by: /p' \
                    "$dotest/msg-clean" |
-                   tail -n 1
+                   sed -ne '$p'
                `
                ADD_SIGNOFF=`
                    test "$LAST_SIGNED_OFF_BY" = "$SIGNOFF" || {
index 2c32d0b9ebcdb9bf43124721e109cfac72149990..48fb92d612f065166072e09f49ee4c1e58b34a3a 100755 (executable)
@@ -293,14 +293,14 @@ bisect_next() {
        bisect_next_check good
 
        skip=$(git for-each-ref --format='%(objectname)' \
-               "refs/bisect/skip-*" | tr '[\012]' ' ') || exit
+               "refs/bisect/skip-*" | tr '\012' ' ') || exit
 
        BISECT_OPT=''
        test -n "$skip" && BISECT_OPT='--bisect-all'
 
        bad=$(git rev-parse --verify refs/bisect/bad) &&
        good=$(git for-each-ref --format='^%(objectname)' \
-               "refs/bisect/good-*" | tr '[\012]' ' ') &&
+               "refs/bisect/good-*" | tr '\012' ' ') &&
        eval="git rev-list --bisect-vars $BISECT_OPT $good $bad --" &&
        eval="$eval $(cat "$GIT_DIR/BISECT_NAMES")" &&
        eval=$(filter_skipped "$eval" "$skip") &&
index 010353ad82881886b9739cc5f8de595acc9273ef..22b6ed4a784192bb865dff83731255b1979a1e39 100755 (executable)
@@ -58,8 +58,8 @@ eval "$functions"
 # "author" or "committer
 
 set_ident () {
-       lid="$(echo "$1" | tr "A-Z" "a-z")"
-       uid="$(echo "$1" | tr "a-z" "A-Z")"
+       lid="$(echo "$1" | tr "[A-Z]" "[a-z]")"
+       uid="$(echo "$1" | tr "[a-z]" "[A-Z]")"
        pick_id_script='
                /^'$lid' /{
                        s/'\''/'\''\\'\'\''/g
@@ -281,7 +281,7 @@ while read commit parents; do
                        die "Could not checkout the index"
                # files that $commit removed are now still in the working tree;
                # remove them, else they would be added again
-               git ls-files -z --others | xargs -0 rm -f
+               git clean -q -f -x
                eval "$filter_tree" < /dev/null ||
                        die "tree filter failed: $filter_tree"
 
@@ -309,7 +309,7 @@ while read commit parents; do
        sed -e '1,/^$/d' <../commit | \
                eval "$filter_msg" > ../message ||
                        die "msg filter failed: $filter_msg"
-       sh -c "$filter_commit" "git commit-tree" \
+       @SHELL_PATH@ -c "$filter_commit" "git commit-tree" \
                $(git write-tree) $parentstr < ../message > ../map/$commit
 done <../revs
 
index c2bedd622c7238359ab88592857bb50eeaa568f8..8aa73712ca11f4527f4b8d42bf3a14de2a16c39c 100755 (executable)
@@ -78,8 +78,8 @@ mark_action_done () {
        sed -e 1q < "$TODO" >> "$DONE"
        sed -e 1d < "$TODO" >> "$TODO".new
        mv -f "$TODO".new "$TODO"
-       count=$(($(grep -ve '^$' -e '^#' < "$DONE" | wc -l)))
-       total=$(($count+$(grep -ve '^$' -e '^#' < "$TODO" | wc -l)))
+       count=$(grep -c '^[^#]' < "$DONE")
+       total=$(($count+$(grep -c '^[^#]' < "$TODO")))
        if test "$last_count" != "$count"
        then
                last_count=$count
@@ -110,7 +110,7 @@ die_abort () {
 }
 
 has_action () {
-       grep -vqe '^$' -e '^#' "$1"
+       grep '^[^#]' "$1" >/dev/null
 }
 
 pick_one () {
@@ -218,7 +218,7 @@ nth_string () {
 make_squash_message () {
        if test -f "$SQUASH_MSG"; then
                COUNT=$(($(sed -n "s/^# This is [^0-9]*\([1-9][0-9]*\).*/\1/p" \
-                       < "$SQUASH_MSG" | tail -n 1)+1))
+                       < "$SQUASH_MSG" | sed -ne '$p')+1))
                echo "# This is a combination of $COUNT commits."
                sed -e 1d -e '2,/^./{
                        /^$/d
index 5f1d5ef06e2a60e7777d5d5532d3f738ab610440..56ec3536e0c40190329b9867b46e36753f30efb2 100755 (executable)
@@ -232,7 +232,7 @@ cmd_init()
                shift
        done
 
-       git ls-files --stage -- "$@" | grep -e '^160000 ' |
+       git ls-files --stage -- "$@" | grep '^160000 ' |
        while read mode sha1 stage path
        do
                # Skip already registered paths
@@ -286,7 +286,7 @@ cmd_update()
                shift
        done
 
-       git ls-files --stage -- "$@" | grep -e '^160000 ' |
+       git ls-files --stage -- "$@" | grep '^160000 ' |
        while read mode sha1 stage path
        do
                name=$(module_name "$path") || exit
@@ -537,7 +537,7 @@ cmd_status()
                shift
        done
 
-       git ls-files --stage -- "$@" | grep -e '^160000 ' |
+       git ls-files --stage -- "$@" | grep '^160000 ' |
        while read mode sha1 stage path
        do
                name=$(module_name "$path") || exit
index 7dc6d7eb1e13a1831b61c70269ce593457badf0c..28b941c493ca96b726c6cde27660e987fc31bedc 100644 (file)
@@ -21,8 +21,8 @@ compare_diff_raw_z () {
     # Also we do not check SHA1 hash generation in this test, which
     # is a job for t0000-basic.sh
 
-    tr '\000' '\012' <"$1" | sed -e "$sanitize_diff_raw_z" >.tmp-1
-    tr '\000' '\012' <"$2" | sed -e "$sanitize_diff_raw_z" >.tmp-2
+    perl -pe 'y/\000/\012/' <"$1" | sed -e "$sanitize_diff_raw_z" >.tmp-1
+    perl -pe 'y/\000/\012/' <"$2" | sed -e "$sanitize_diff_raw_z" >.tmp-2
     git diff .tmp-1 .tmp-2 && rm -f .tmp-1 .tmp-2
 }
 
index 47f08a46c260a612eff2bcf88bef84ee231897c1..3faf135e38ccbe71241679da464d7cf709ae73d7 100755 (executable)
@@ -11,7 +11,7 @@ attr_check () {
 
        git check-attr test -- "$path" >actual &&
        echo "$path: test: $2" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 }
 
index 90ea081db666d707246e37affc5676e6c3502741..2bfeac986eadeca0064b1aee808d08b2f86082c4 100755 (executable)
@@ -5,7 +5,7 @@ test_description='CRLF conversion'
 . ./test-lib.sh
 
 q_to_nul () {
-       tr Q '\000'
+       perl -pe 'y/Q/\000/'
 }
 
 q_to_cr () {
index 430a1d1d385b756c921652b2fc3580a727c57917..7d1ce2d0563b3734d754c171d21580075264bbb2 100755 (executable)
@@ -26,7 +26,7 @@ test_expect_success 'diff -M' '
        git diff-tree -M -r --name-status HEAD^ HEAD |
        sed -e "s/R[0-9]*/RNUM/" >actual &&
        echo "RNUM      sample  elpmas" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 818c8621f239dd7f61a2d79e9c65779dbbf9f6ef..3ecdd6626aa58f7e2bbe0addb292b57dd2168a14 100755 (executable)
@@ -245,12 +245,12 @@ test_expect_success \
 
 test_expect_success \
     'text plus spaces without newline at end should not show spaces' '
-    ! (printf "$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (printf "$ttt$sss$sss$sss" | git stripspace | grep -q "  ")
+    ! (printf "$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (printf "$ttt$sss$sss$sss" | git stripspace | grep "  " >/dev/null)
 '
 
 test_expect_success \
@@ -282,12 +282,12 @@ test_expect_success \
 
 test_expect_success \
     'text plus spaces at end should not show spaces' '
-    ! (echo "$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep -q "  ") &&
-    ! (echo "$ttt$sss$sss$sss" | git stripspace | grep -q "  ")
+    ! (echo "$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
+    ! (echo "$ttt$sss$sss$sss" | git stripspace | grep "  " >/dev/null)
 '
 
 test_expect_success \
@@ -341,11 +341,11 @@ test_expect_success \
 
 test_expect_success \
     'spaces without newline at end should not show spaces' '
-    ! (printf "" | git stripspace | grep -q " ") &&
-    ! (printf "$sss" | git stripspace | grep -q " ") &&
-    ! (printf "$sss$sss" | git stripspace | grep -q " ") &&
-    ! (printf "$sss$sss$sss" | git stripspace | grep -q " ") &&
-    ! (printf "$sss$sss$sss$sss" | git stripspace | grep -q " ")
+    ! (printf "" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss$sss" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss$sss$sss" | git stripspace | grep " " >/dev/null) &&
+    ! (printf "$sss$sss$sss$sss" | git stripspace | grep " " >/dev/null)
 '
 
 test_expect_success \
index cd088b37f06f6f5cd92f0fd2ee1d989e31ef216a..3fbad77811e3782523e83dfdd58fe5308f237771 100755 (executable)
@@ -4,8 +4,8 @@ test_description='Various filesystem issues'
 
 . ./test-lib.sh
 
-auml=`perl -CO -e 'print pack("U",0x00E4)'`
-aumlcdiar=`perl -CO -e 'print pack("U",0x0061).pack("U",0x0308)'`
+auml=`printf '\xc3\xa4'`
+aumlcdiar=`printf '\x61\xcc\x88'`
 
 test_expect_success 'see if we expect ' '
 
index 8c4556408ecc81985acd7b8237921330c326e787..b0d31f5a9bb8b3474665147327d94ad5067fa206 100755 (executable)
@@ -24,7 +24,7 @@ test_expect_success 'setup' '
 test_expect_success 'reset should work' '
   git read-tree -u --reset HEAD^ &&
   git ls-files >actual &&
-  diff -u expect actual
+  test_cmp expect actual
 '
 
 test_done
index 4928a571144b3fb9ec38312d917e9f95e40ceb99..b36a9012ecb3a34761027de77635741e1cd80aab 100755 (executable)
@@ -657,12 +657,12 @@ Qsection.sub=section.val4
 Qsection.sub=section.val5Q
 EOF
 
-git config --null --list | tr '\000' 'Q' > result
+git config --null --list | perl -pe 'y/\000/Q/' > result
 echo >>result
 
 test_expect_success '--null --list' 'cmp result expect'
 
-git config --null --get-regexp 'val[0-9]' | tr '\000' 'Q' > result
+git config --null --get-regexp 'val[0-9]' | perl -pe 'y/\000/Q/' > result
 echo >>result
 
 test_expect_success '--null --get-regexp' 'cmp result expect'
index 24f892f79386478fd5f1162654cb9b72d940bbe4..b664341926071a3286ba949dc09b5e62b280e79a 100755 (executable)
@@ -62,7 +62,7 @@ test_expect_success 'cache tree has not been corrupted' '
        sed -e "s/ 0    /       /" >expect &&
        git ls-tree -r $(git write-tree) |
        sed -e "s/ blob / /" >current &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
index b4297bacf2bd3d6da0f7fd01fba65741cf568003..55f057cebeb37a8ba8cd9c1e6aa5101c66988bcb 100755 (executable)
@@ -97,7 +97,7 @@ cat > expect << EOF
 EOF
 
 test_expect_success 'git-status honours core.excludesfile' \
-       'diff -u expect output'
+       'test_cmp expect output'
 
 test_expect_success 'trailing slash in exclude allows directory match(1)' '
 
index 34f26a8d9ed809f07d1ae5eec847c2f0ac1d2b5e..2b21b1070d6b8f864aee0049d5cb2dccef0daa46 100755 (executable)
@@ -26,7 +26,7 @@ test_expect_success clone '
                cd cloned &&
                (git rev-parse HEAD; git ls-files -s) >../actual
        ) &&
-       diff -u expected actual
+       test_cmp expected actual
 '
 
 test_expect_success advance '
@@ -46,7 +46,7 @@ test_expect_success fetch '
                git pull &&
                (git rev-parse HEAD; git ls-files -s) >../actual
        ) &&
-       diff -u expected actual
+       test_cmp expected actual
 '
 
 test_done
index 68eb266d73532b308754ef350ec2ff05a50b3c50..3ce501bb9794900b99fbbf2f2ccfbb330f7947a7 100755 (executable)
@@ -66,6 +66,6 @@ test_expect_success 'git -ls-files --with-tree should succeed from subdir' '
 cd ..
 test_expect_success \
     'git -ls-files --with-tree should add entries from named tree.' \
-    'diff -u expected output'
+    'test_cmp expected output'
 
 test_done
index 9ef593f0e11d85a62c5bbfe89febf0fce2c20fd7..b4cf628d225d380d6c0bf73dee4c3e9df0cadb41 100755 (executable)
@@ -31,7 +31,7 @@ test_expect_success 'branch --contains=master' '
        {
                echo "  master" && echo "* side"
        } >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -41,7 +41,7 @@ test_expect_success 'branch --contains master' '
        {
                echo "  master" && echo "* side"
        } >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -51,7 +51,7 @@ test_expect_success 'branch --contains=side' '
        {
                echo "* side"
        } >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 98c133db50a35a62ade6d06c8fc7e1bbdf1714f2..24a00a9df13b0781700f24e6a8e75505696a11dd 100755 (executable)
@@ -54,7 +54,7 @@ echo 'just space
 no-funny
 tabs   ," (dq) and spaces' >expected
 test_expect_success 'git ls-files -z with-funny' \
-       'git ls-files -z | tr \\000 \\012 >current &&
+       'git ls-files -z | perl -pe y/\\000/\\012/ >current &&
        git diff expected current'
 
 t1=`git write-tree`
@@ -83,11 +83,11 @@ test_expect_success 'git diff-tree with-funny' \
 echo 'A
 tabs   ," (dq) and spaces' >expected
 test_expect_success 'git diff-index -z with-funny' \
-       'git diff-index -z --name-status $t0 | tr \\000 \\012 >current &&
+       'git diff-index -z --name-status $t0 | perl -pe y/\\000/\\012/ >current &&
        git diff expected current'
 
 test_expect_success 'git diff-tree -z with-funny' \
-       'git diff-tree -z --name-status $t0 $t1 | tr \\000 \\012 >current &&
+       'git diff-tree -z --name-status $t0 $t1 | perl -pe y/\\000/\\012/ >current &&
        git diff expected current'
 
 cat > expected <<\EOF
index 049aa375381b5929d1f35b7316c3fe6a647e4f93..9cf873f7ebfa8f8a4fd215cbbb468f955d6a47e3 100755 (executable)
@@ -122,8 +122,8 @@ test_expect_success 'reflog for the branch shows state before rebase' '
 
 test_expect_success 'exchange two commits' '
        FAKE_LINES="2 1" git rebase -i HEAD~2 &&
-       test H = $(git cat-file commit HEAD^ | tail -n 1) &&
-       test G = $(git cat-file commit HEAD | tail -n 1)
+       test H = $(git cat-file commit HEAD^ | sed -ne \$p) &&
+       test G = $(git cat-file commit HEAD | sed -ne \$p)
 '
 
 cat > expect << EOF
@@ -146,11 +146,10 @@ EOF
 test_expect_success 'stop on conflicting pick' '
        git tag new-branch1 &&
        ! git rebase -i master &&
-       diff -u expect .git/.dotest-merge/patch &&
-       diff -u expect2 file1 &&
+       test_cmp expect .git/.dotest-merge/patch &&
+       test_cmp expect2 file1 &&
        test 4 = $(grep -v "^#" < .git/.dotest-merge/done | wc -l) &&
-       test 0 = $(grep -ve "^#" -e "^$" < .git/.dotest-merge/git-rebase-todo |
-               wc -l)
+       test 0 = $(grep -c "^[^#]" < .git/.dotest-merge/git-rebase-todo)
 '
 
 test_expect_success 'abort' '
index e4e2e649ed03394f623eb0d135815c3d570a3186..e5ad67c643ffee9b79fce813673732faa950714f 100755 (executable)
@@ -41,8 +41,8 @@ test_expect_success rebase '
        git rebase master side &&
        git cat-file commit HEAD | sed -e "1,/^\$/d" >F1 &&
 
-       diff -u F0 F1 &&
-       diff -u F F0
+       test_cmp F0 F1 &&
+       test_cmp F F0
 '
 
 test_done
index 332b2b2feb6441e4fe34fe234c3c873ffbd0c81a..539108094345e3e0ba4cf03fc20a5ca6486fa230 100755 (executable)
@@ -37,7 +37,7 @@ test_expect_success 'rebase -m' '
        git rebase -m master >report &&
        sed -n -e "/^Already applied: /p" \
                -e "/^Committed: /p" report >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index c8dc1ac24111f2d77d79d4e7bfdad360e5307481..77c90f6fa002ce00c3ffb30d0b79adaff46b3caa 100755 (executable)
@@ -24,7 +24,7 @@ EOF
 test_expect_success 'diff works (initial)' '
        (echo d; echo 1) | git add -i >output &&
        sed -ne "/new file/,/content/p" <output >diff &&
-       diff -u expected diff
+       test_cmp expected diff
 '
 test_expect_success 'revert works (initial)' '
        git add file &&
@@ -57,7 +57,7 @@ EOF
 test_expect_success 'diff works (commit)' '
        (echo d; echo 1) | git add -i >output &&
        sed -ne "/^index/,/content/p" <output >diff &&
-       diff -u expected diff
+       test_cmp expected diff
 '
 test_expect_success 'revert works (commit)' '
        git add file &&
index f2803206f1b170adef4e05d3aa46b01084adf470..278075823bbf4656ec08e844e79e6b25f0f2f292 100755 (executable)
@@ -15,7 +15,7 @@ check_verify_failure () {
        expect="$2"
        test_expect_success "$1" '
                ( ! git-mktag <tag.sig 2>message ) &&
-               grep -q "$expect" message
+               grep "$expect" message
        '
 }
 
index 73da45f18c2c5a58828c56c561e27012aa901a9a..fe4fb5116ac4c482c357f0af3f0a34da27cee237 100755 (executable)
@@ -78,28 +78,28 @@ EOF
 
 test_expect_success 'check fully quoted output from ls-files' '
 
-       git ls-files >current && diff -u expect.quoted current
+       git ls-files >current && test_cmp expect.quoted current
 
 '
 
 test_expect_success 'check fully quoted output from diff-files' '
 
        git diff --name-only >current &&
-       diff -u expect.quoted current
+       test_cmp expect.quoted current
 
 '
 
 test_expect_success 'check fully quoted output from diff-index' '
 
        git diff --name-only HEAD >current &&
-       diff -u expect.quoted current
+       test_cmp expect.quoted current
 
 '
 
 test_expect_success 'check fully quoted output from diff-tree' '
 
        git diff --name-only HEAD^ HEAD >current &&
-       diff -u expect.quoted current
+       test_cmp expect.quoted current
 
 '
 
@@ -111,28 +111,28 @@ test_expect_success 'setting core.quotepath' '
 
 test_expect_success 'check fully quoted output from ls-files' '
 
-       git ls-files >current && diff -u expect.raw current
+       git ls-files >current && test_cmp expect.raw current
 
 '
 
 test_expect_success 'check fully quoted output from diff-files' '
 
        git diff --name-only >current &&
-       diff -u expect.raw current
+       test_cmp expect.raw current
 
 '
 
 test_expect_success 'check fully quoted output from diff-index' '
 
        git diff --name-only HEAD >current &&
-       diff -u expect.raw current
+       test_cmp expect.raw current
 
 '
 
 test_expect_success 'check fully quoted output from diff-tree' '
 
        git diff --name-only HEAD^ HEAD >current &&
-       diff -u expect.raw current
+       test_cmp expect.raw current
 
 '
 
index aa282e1bc1e17f08dd12fc1980187c786f1de99b..2d3ee3b78c66e4e964fffccaa1ae8252929c1732 100755 (executable)
@@ -34,7 +34,7 @@ EOF
 test_expect_success 'parents of stash' '
        test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
        git diff stash^2..stash > output &&
-       diff -u output expect
+       test_cmp output expect
 '
 
 test_expect_success 'apply needs clean working directory' '
index 888293361d4ec39e389b321493dac8ed08886d7c..637b4e19d52e81cf1472a4ed9dcfb0c9ff00da2b 100755 (executable)
@@ -99,11 +99,12 @@ test_expect_success 'no diff with -diff' '
        git diff | grep Binary
 '
 
-echo NULZbetweenZwords | tr Z '\000' > file
+echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
 
 test_expect_success 'force diff with "diff"' '
        echo >.gitattributes "file diff" &&
-       git diff | grep -a second
+       git diff >actual &&
+       test_cmp ../t4020/diff.NUL actual
 '
 
 test_done
diff --git a/t/t4020/diff.NUL b/t/t4020/diff.NUL
new file mode 100644 (file)
index 0000000..db2f890
Binary files /dev/null and b/t/t4020/diff.NUL differ
index 6de4acbd44589fbcf6a3f9c4ca2043c9f4e99ebe..bf996fc414d3b5ea16488a8b274973a8347b29cb 100755 (executable)
@@ -8,7 +8,10 @@ test_expect_success setup '
 
        cat ../../COPYING >test &&
        git add test &&
-       tr 'a-zA-Z' 'n-za-mN-ZA-M' <../../COPYING >test
+       tr \
+         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
+         "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" \
+         <../../COPYING >test
 
 '
 
index 255604effd5ad6d0549e818d489fa91b3af8f2d7..4dbfc6e8b751a6c93b1f9dfee8ce649235c98c93 100755 (executable)
@@ -57,7 +57,7 @@ test_expect_success 'cross renames to be detected for regular files' '
                echo "R100      foo     bar"
                echo "R100      bar     foo"
        } | sort >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -68,7 +68,7 @@ test_expect_success 'cross renames to be detected for typechange' '
                echo "R100      foo     bar"
                echo "R100      bar     foo"
        } | sort >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -79,7 +79,7 @@ test_expect_success 'moves and renames' '
                echo "R100      foo     bar"
                echo "T100      foo"
        } | sort >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 3c66102f7ade654bb2ee0e0d732f86a301d1cb1e..c4d733f5db6a4d390762505b770954cdbf6cc82f 100755 (executable)
@@ -150,7 +150,7 @@ test_expect_success 'diff -U0' '
        do
                git diff -U0 file-?$n
        done | zc >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 9ba06b74ce1a68c49ca76be66743a0c8ebd56cb3..7a3dbc1ea22fd19a54da8949abc368c112377b19 100755 (executable)
@@ -37,7 +37,7 @@ test_expect_success 'hunk header truncation with an overly long line' '
                echo " A $N$N$N$N$N$N$N$N$N2"
                echo " L  $N$N$N$N$N$N$N$N$N1"
        ) >expected &&
-       diff -u actual expected
+       test_cmp actual expected
 
 '
 
index 3d2d0816a3656a0df347fbd29571f5c38513c27f..1fd3fb74d763026d4e20a38fe9d2ed48dda74fed 100755 (executable)
@@ -37,17 +37,17 @@ test_expect_success setup '
 
 test_expect_success 'git diff --raw HEAD' '
        git diff --raw --abbrev=40 HEAD >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'git diff-index --raw HEAD' '
        git diff-index --raw HEAD >actual.index &&
-       diff -u expect actual.index
+       test_cmp expect actual.index
 '
 
 test_expect_success 'git diff-files --raw' '
        git diff-files --raw >actual.files &&
-       diff -u expect actual.files
+       test_cmp expect actual.files
 '
 
 test_done
index 7c25634fc2962fc7b71d7d34ea6ac8d6c8061559..1b58233da6cfa09092e6953f7d9c6bc38d7bae56 100755 (executable)
@@ -24,10 +24,10 @@ git update-index --add --remove file1 file2 file4
 git-commit -m 'Initial Version' 2>/dev/null
 
 git-checkout -b binary
-tr 'x' '\000' <file1 >file3
+perl -pe 'y/x/\000/' <file1 >file3
 cat file3 >file4
 git add file2
-tr '\000' 'v' <file3 >file1
+perl -pe 'y/\000/v/' <file3 >file1
 rm -f file2
 git update-index --add --remove file1 file2 file3 file4
 git-commit -m 'Second Version'
index 0e8d25f18b0ccf027735017227d9eed10d01bc8b..3266e394003958b62509b7bfe6652abd03fdfcb7 100755 (executable)
@@ -9,7 +9,7 @@ dotest () {
        test_expect_success "$name" "
                git checkout-index -f -q -u file &&
                git apply $* &&
-               diff -u expect file
+               test_cmp expect file
        "
 }
 
index b1d35ab04db88f849c024208a541c0a594f0ed3b..c3f45790076e8e5f80322ad272dc4bf1ff4b9715 100755 (executable)
@@ -12,14 +12,14 @@ test_description='git apply in reverse
 test_expect_success setup '
 
        for i in a b c d e f g h i j k l m n; do echo $i; done >file1 &&
-       tr "ijk" '\''\000\001\002'\'' <file1 >file2 &&
+       perl -pe "y/ijk/\\000\\001\\002/" <file1 >file2 &&
 
        git add file1 file2 &&
        git commit -m initial &&
        git tag initial &&
 
        for i in a b c g h i J K L m o n p q; do echo $i; done >file1 &&
-       tr "mon" '\''\000\001\002'\'' <file1 >file2 &&
+       perl -pe "y/mon/\\000\\001\\002/" <file1 >file2 &&
 
        git commit -a -m second &&
        git tag second &&
index d6f15be6718d581bb2a8e3ef05930977b8dffdb9..3b471b641ba2d3274dd1ab89948485ff8ce4dfdb 100755 (executable)
@@ -56,7 +56,7 @@ test_expect_success nofix '
        git apply --whitespace=nowarn patch-1 &&
 
        # The result should obviously match.
-       diff -u file-1 file
+       test_cmp file-1 file
 '
 
 test_expect_success 'withfix (forward)' '
@@ -70,7 +70,7 @@ test_expect_success 'withfix (forward)' '
        git apply --whitespace=fix patch-0 &&
        git apply --whitespace=fix patch-1 &&
 
-       diff -u file-fixed file
+       test_cmp file-fixed file
 '
 
 test_expect_success 'withfix (backward)' '
@@ -91,12 +91,12 @@ test_expect_success 'withfix (backward)' '
 
        sed -e /h/d file-fixed >fixed-head &&
        sed -e /h/d file >file-head &&
-       diff -u fixed-head file-head &&
+       test_cmp fixed-head file-head &&
 
        sed -n -e /h/p file-fixed >fixed-tail &&
        sed -n -e /h/p file >file-tail &&
 
-       ! diff -u fixed-tail file-tail
+       ! test_cmp fixed-tail file-tail
 
 '
 
index 929d2cbd878cf927e56af35a982f34d756bbce60..52069b469bdeefed921fbc574d12e9d2490f0e8c 100755 (executable)
@@ -22,14 +22,14 @@ test_expect_success 'am regularly from stdin' '
        git checkout initial &&
        git am <patchfile &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from file' '
        git checkout initial &&
        git am patchfile &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from stdin in subdirectory' '
@@ -41,7 +41,7 @@ test_expect_success 'am regularly from stdin in subdirectory' '
                git am <../patchfile
        ) &&
        git diff master>actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from file in subdirectory' '
@@ -53,7 +53,7 @@ test_expect_success 'am regularly from file in subdirectory' '
                git am ../patchfile
        ) &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_expect_success 'am regularly from file in subdirectory with full path' '
@@ -66,7 +66,7 @@ test_expect_success 'am regularly from file in subdirectory with full path' '
                git am "$P/patchfile"
        ) &&
        git diff master >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 '
 
 test_done
index eeff3c9c0772daa85302d44552bc9c0d2d9f0280..3cbfee704e6238eb31fa1b519567fb064ca27ad8 100755 (executable)
@@ -129,7 +129,7 @@ test_expect_success 'rerere kicked in' "! grep ======= a1"
 test_expect_success 'rerere prefers first change' 'git diff a1 expect'
 
 rm $rr/postimage
-echo "$sha1    a1" | tr '\012' '\000' > .git/rr-cache/MERGE_RR
+echo "$sha1    a1" | perl -pe 'y/\012/\000/' > .git/rr-cache/MERGE_RR
 
 test_expect_success 'rerere clear' 'git rerere clear'
 
index eef4cafda99729977af9bee2eca83493814faede..672b28859f0612ec7eef15765ccdb006beac27e6 100755 (executable)
@@ -45,7 +45,7 @@ A U Thor (5):
 
 EOF
 
-test_expect_success 'shortlog wrapping' 'diff -u expect out'
+test_expect_success 'shortlog wrapping' 'test_cmp expect out'
 
 git log HEAD > log
 GIT_DIR=non-existing git shortlog -w < log > out
index cd3c149800395553cc973317ef41e89e53771f60..c955fe44f5b962ef305e49c21bc3fb0e5b58d462 100755 (executable)
@@ -15,7 +15,7 @@ test_expect_success \
     'rm -f .git/index*
      for i in a b c
      do
-            dd if=/dev/zero bs=4k count=1 | tr "\\000" $i >$i &&
+            dd if=/dev/zero bs=4k count=1 | perl -pe "y/\\000/$i/" >$i &&
             git update-index --add $i || return 1
      done &&
      cat c >d && echo foo >>d && git update-index --add d &&
index 67b9a7b84a6a411d44b6b5f90f7b33d6160b5702..b88b5bbd022bb3dd836d00f88a8e486c00285103 100755 (executable)
@@ -103,7 +103,7 @@ test_expect_success \
 test_expect_success \
     '[index v1] 2) create a stealth corruption in a delta base reference' \
     '# this test assumes a delta smaller than 16 bytes at the end of the pack
-     git show-index <1.idx | sort -n | tail -n 1 | (
+     git show-index <1.idx | sort -n | sed -ne \$p | (
        read delta_offs delta_sha1 &&
        git cat-file blob "$delta_sha1" > blob_1 &&
        chmod +w ".git/objects/pack/pack-${pack1}.pack" &&
@@ -141,7 +141,7 @@ test_expect_success \
 test_expect_success \
     '[index v2] 2) create a stealth corruption in a delta base reference' \
     '# this test assumes a delta smaller than 16 bytes at the end of the pack
-     git show-index <1.idx | sort -n | tail -n 1 | (
+     git show-index <1.idx | sort -n | sed -ne \$p | (
        read delta_offs delta_sha1 delta_crc &&
        git cat-file blob "$delta_sha1" > blob_3 &&
        chmod +w ".git/objects/pack/pack-${pack1}.pack" &&
index 2d0c07fd6a38d786efc895bc5c5c0d7dd268b31f..2b6b6e3f71613d807aa4ebfa48eebe5f73d2b980 100755 (executable)
@@ -120,7 +120,7 @@ test_expect_success \
        cd .. &&
        git-clone parent child && cd child && git-push --all &&
        cd ../parent &&
-       git-branch -a >branches && ! grep -q origin/master branches
+       git-branch -a >branches && ! grep origin/master branches
 '
 
 rewound_push_setup() {
index 2822a651b5c434bb9243a6f8f9069a8fee1ad590..ecfc999aaae728e3f57beaab60490abc53a3fb23 100755 (executable)
@@ -24,7 +24,7 @@ setup_repository () {
 tokens_match () {
        echo "$1" | tr ' ' '\012' | sort | sed -e '/^$/d' >expect &&
        echo "$2" | tr ' ' '\012' | sort | sed -e '/^$/d' >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 }
 
 check_remote_track () {
@@ -73,7 +73,7 @@ test_expect_success 'add another remote' '
        sed -e "/^refs\/remotes\/origin\//d" \
            -e "/^refs\/remotes\/second\//d" >actual &&
        >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 )
 '
 
@@ -93,7 +93,7 @@ test_expect_success 'remove remote' '
        git for-each-ref "--format=%(refname)" refs/remotes |
        sed -e "/^refs\/remotes\/origin\//d" >actual &&
        >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 )
 '
 
index 9b948c14e6f92e8154373154b32a6d450ead47af..6946557c677ccc190309cd5961b046c420174f7d 100755 (executable)
@@ -249,7 +249,7 @@ test_expect_success 'bundle should record HEAD correctly' '
        do
                echo "$(git rev-parse --verify $h) $h"
        done >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index 6ec5f7c48bdde7ff41e14c1e355b79387140ecf0..c0dc94909b694439e389ceeeecec82ed36864ec0 100755 (executable)
@@ -24,28 +24,28 @@ test_expect_success setup '
 test_expect_success 'ls-remote --tags .git' '
 
        git ls-remote --tags .git >actual &&
-       diff -u expected.tag actual
+       test_cmp expected.tag actual
 
 '
 
 test_expect_success 'ls-remote .git' '
 
        git ls-remote .git >actual &&
-       diff -u expected.all actual
+       test_cmp expected.all actual
 
 '
 
 test_expect_success 'ls-remote --tags self' '
 
        git ls-remote --tags self >actual &&
-       diff -u expected.tag actual
+       test_cmp expected.tag actual
 
 '
 
 test_expect_success 'ls-remote self' '
 
        git ls-remote self >actual &&
-       diff -u expected.all actual
+       test_cmp expected.all actual
 
 '
 
index 180633e1e0e37c59eeaa571ad7f7b292f35415ec..c0baaa536079b1213d83bbf234ac688567c95237 100755 (executable)
@@ -97,7 +97,13 @@ check_output()
 # from front and back.
 name_from_description()
 {
-        tr "'" '-' | tr '~`!@#$%^&*()_+={}[]|\;:"<>,/? ' '-' | tr -s '-' | tr '[A-Z]' '[a-z]' | sed "s/^-*//;s/-*\$//"
+       perl -pe '
+               s/[^A-Za-z0-9.]/-/g;
+               s/-+/-/g;
+               s/-$//;
+               s/^-//;
+               y/A-Z/a-z/;
+       '
 }
 
 
index 80d71988b8464b6abe2b13e3052b54a4bb84604f..5dabf1c5e354c28cc593bd0ea8e4b0d5f0d56d67 100755 (executable)
@@ -45,7 +45,7 @@ test_expect_success 'further setup' '
 test_expect_success 'path optimization 2' '
        ( echo "$side"; echo "$initial" ) >expected &&
        git rev-list HEAD -- a >actual &&
-       diff -u expected actual
+       test_cmp expected actual
 '
 
 test_done
index be3d238d996fed911d6098fad01ca25345059da6..f248a3293c5d126c60dc525e410e99d5c48a8c04 100755 (executable)
@@ -31,7 +31,7 @@ test_expect_failure 'one is ancestor of others and should not be shown' '
 
        git rev-list one --not four >result &&
        >expect &&
-       diff -u expect result
+       test_cmp expect result
 
 '
 
index a7358f75b19ed75d58124a3f1e070f022a2367bb..92ca1f0f8ccabe6f01159ea3e4a73683387ec4a3 100755 (executable)
@@ -45,7 +45,7 @@ test_expect_success resolve '
                false
        else
                git ls-files -s >current
-               diff -u current expect
+               test_cmp current expect
        fi
 '
 
@@ -60,7 +60,7 @@ test_expect_success recursive '
                false
        else
                git ls-files -s >current
-               diff -u current expect
+               test_cmp current expect
        fi
 '
 
index 35d66e804416af7f773d9eebcacb310f0e788884..43f5459c35dd862b2b15b9883a4f2354a20e8e25 100755 (executable)
@@ -25,7 +25,7 @@ test_expect_success 'subtree available and works like recursive' '
 
        git merge -s subtree side &&
        for i in mundo $s world; do echo $i; done >expect &&
-       diff -u expect hello
+       test_cmp expect hello
 
 '
 
index 4908e878fee48069fbdc339f17ad6e865111ae00..f471c1526f34fa87227ac23b458299063b408ff1 100755 (executable)
@@ -219,7 +219,7 @@ test_expect_success 'bisect run & skip: cannot tell between 2' '
        add_line_into_file "6: Yet a line." hello &&
        HASH6=$(git rev-parse --verify HEAD) &&
        echo "#"\!"/bin/sh" > test_script.sh &&
-       echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
        echo "grep line hello > /dev/null" >> test_script.sh &&
        echo "test \$? -ne 0" >> test_script.sh &&
        chmod +x test_script.sh &&
@@ -244,8 +244,8 @@ test_expect_success 'bisect run & skip: find first bad' '
        add_line_into_file "7: Should be the last line." hello &&
        HASH7=$(git rev-parse --verify HEAD) &&
        echo "#"\!"/bin/sh" > test_script.sh &&
-       echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
-       echo "tail -1 hello | grep day > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep day > /dev/null && exit 125" >> test_script.sh &&
        echo "grep Yet hello > /dev/null" >> test_script.sh &&
        echo "test \$? -ne 0" >> test_script.sh &&
        chmod +x test_script.sh &&
index 6e14bf1c7f0991bbaab217e8a08bae0cacfe1ab1..553131fcf4cc418309e0cb750d885a5fbfe0fe47 100755 (executable)
@@ -4,7 +4,7 @@ test_description='git-filter-branch'
 . ./test-lib.sh
 
 make_commit () {
-       lower=$(echo $1 | tr A-Z a-z)
+       lower=$(echo $1 | tr '[A-Z]' '[a-z]')
        echo $lower > $lower
        git add $lower
        test_tick
index bc8ab6a61913169325de3b04fee17d04033b54e1..02cf7c5c9dc5ba9ea66d9dc109a11d300c7bd817 100755 (executable)
@@ -18,7 +18,7 @@ test_expect_success 'git add (absolute)' '
        git add "$D/a/b/c/d" &&
        git ls-files >current &&
        echo a/b/c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -32,7 +32,7 @@ test_expect_success 'git add (funny relative)' '
        ) &&
        git ls-files >current &&
        echo a/e/f >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -43,7 +43,7 @@ test_expect_success 'git rm (absolute)' '
        git rm -f --cached "$D/a/b/c/d" &&
        git ls-files >current &&
        echo a/e/f >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -57,7 +57,7 @@ test_expect_success 'git rm (funny relative)' '
        ) &&
        git ls-files >current &&
        echo a/b/c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -67,7 +67,7 @@ test_expect_success 'git ls-files (absolute)' '
        git add a &&
        git ls-files "$D/a/e/../b" >current &&
        echo a/b/c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -80,7 +80,7 @@ test_expect_success 'git ls-files (relative #1)' '
                git ls-files "../b/c"
        )  >current &&
        echo c/d >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -93,7 +93,7 @@ test_expect_success 'git ls-files (relative #2)' '
                git ls-files --full-name "../e/f"
        )  >current &&
        echo a/e/f >expect &&
-       diff -u expect current
+       test_cmp expect current
 
 '
 
@@ -126,13 +126,13 @@ test_expect_success 'log using absolute path names' '
 
        git log a/b/c/d >f1.txt &&
        git log "$(pwd)/a/b/c/d" >f2.txt &&
-       diff -u f1.txt f2.txt
+       test_cmp f1.txt f2.txt
 '
 
 test_expect_success 'blame using absolute path names' '
        git blame a/b/c/d >f1.txt &&
        git blame "$(pwd)/a/b/c/d" >f2.txt &&
-       diff -u f1.txt f2.txt
+       test_cmp f1.txt f2.txt
 '
 
 test_expect_success 'setup deeper work tree' '
index 63915cd87b74aaddb943f45057bda10d283b4351..3111baa9e38ecf96de6385dc9241ea8c992e4992 100755 (executable)
@@ -83,13 +83,13 @@ test_expect_success "checkout with unrelated dirty tree without -m" '
        fill 0 1 2 3 4 5 6 7 8 >same &&
        cp same kept
        git checkout side >messages &&
-       diff -u same kept
+       test_cmp same kept
        (cat > messages.expect <<EOF
 M      same
 EOF
 ) &&
        touch messages.expect &&
-       diff -u messages.expect messages
+       test_cmp messages.expect messages
 '
 
 test_expect_success "checkout -m with dirty tree" '
@@ -106,19 +106,19 @@ test_expect_success "checkout -m with dirty tree" '
 M      one
 EOF
 ) &&
-       diff -u expect.messages messages &&
+       test_cmp expect.messages messages &&
 
        fill "M one" "A three" "D       two" >expect.master &&
        git diff --name-status master >current.master &&
-       diff -u expect.master current.master &&
+       test_cmp expect.master current.master &&
 
        fill "M one" >expect.side &&
        git diff --name-status side >current.side &&
-       diff -u expect.side current.side &&
+       test_cmp expect.side current.side &&
 
        : >expect.index &&
        git diff --cached >current.index &&
-       diff -u expect.index current.index
+       test_cmp expect.index current.index
 '
 
 test_expect_success "checkout -m with dirty tree, renamed" '
@@ -136,7 +136,7 @@ test_expect_success "checkout -m with dirty tree, renamed" '
 
        git checkout -m renamer &&
        fill 1 3 4 5 7 8 >expect &&
-       diff -u expect uno &&
+       test_cmp expect uno &&
        ! test -f one &&
        git diff --cached >current &&
        ! test -s current
@@ -161,7 +161,7 @@ test_expect_success 'checkout -m with merge conflict' '
        git diff master:one :3:uno |
        sed -e "1,/^@@/d" -e "/^ /d" -e "s/^-/d/" -e "s/^+/a/" >current &&
        fill d2 aT d7 aS >expect &&
-       diff -u current expect &&
+       test_cmp current expect &&
        git diff --cached two >current &&
        ! test -s current
 '
@@ -178,7 +178,7 @@ If you want to create a new branch from this checkout, you may do so
 HEAD is now at 7329388... Initial A one, A two
 EOF
 ) &&
-       diff -u messages.expect messages &&
+       test_cmp messages.expect messages &&
        H=$(git rev-parse --verify HEAD) &&
        M=$(git show-ref -s --verify refs/heads/master) &&
        test "z$H" = "z$M" &&
index 361886c3d62b8bf81db0be5999c1e98c4e972f6a..c0288f345fb5809d8606f4d3cfaf73d24d6c7281 100755 (executable)
@@ -203,7 +203,7 @@ test_expect_success 'sign off (1)' '
                git var GIT_COMMITTER_IDENT |
                sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"
        ) >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -223,7 +223,7 @@ $existing" &&
                git var GIT_COMMITTER_IDENT |
                sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"
        ) >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -240,7 +240,7 @@ test_expect_success 'multiple -m' '
                echo
                echo three
        ) >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -301,12 +301,12 @@ test_expect_success 'same tree (merge and amend merge)' '
        git merge -s ours side -m "empty ok" &&
        git diff HEAD^ HEAD >actual &&
        : >expected &&
-       diff -u expected actual &&
+       test_cmp expected actual &&
 
        git commit --amend -m "empty really ok" &&
        git diff HEAD^ HEAD >actual &&
        : >expected &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -323,7 +323,7 @@ test_expect_success 'amend using the message from another commit' '
        git commit --allow-empty --amend -C "$old" &&
        git show --pretty="format:%ad %s" "$old" >expected &&
        git show --pretty="format:%ad %s" HEAD >actual &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
@@ -341,7 +341,7 @@ test_expect_success 'amend using the message from a commit named with tag' '
        git commit --allow-empty --amend -C tagged-old &&
        git show --pretty="format:%ad %s" "$old" >expected &&
        git show --pretty="format:%ad %s" HEAD >actual &&
-       diff -u expected actual
+       test_cmp expected actual
 
 '
 
index b780fddc08f9c01eaf1143b9178ab5b7ecd032db..284c9412474754be649ccc51df996e3e370ac6ec 100755 (executable)
@@ -85,7 +85,7 @@ test_expect_success 'verbose' '
        git add negative &&
        git status -v | sed -ne "/^diff --git /p" >actual &&
        echo "diff --git a/negative b/negative" >expect &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -95,7 +95,7 @@ test_expect_success 'cleanup commit messages (verbatim,-t)' '
        { echo;echo "# text";echo; } >expect &&
        git commit --cleanup=verbatim -t expect -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -104,7 +104,7 @@ test_expect_success 'cleanup commit messages (verbatim,-F)' '
        echo >>negative &&
        git commit --cleanup=verbatim -F expect -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -113,7 +113,7 @@ test_expect_success 'cleanup commit messages (verbatim,-m)' '
        echo >>negative &&
        git commit --cleanup=verbatim -m "$(cat expect)" -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -124,7 +124,7 @@ test_expect_success 'cleanup commit messages (whitespace,-F)' '
        echo "# text" >expect &&
        git commit --cleanup=whitespace -F text -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -135,7 +135,7 @@ test_expect_success 'cleanup commit messages (strip,-F)' '
        echo sample >expect &&
        git commit --cleanup=strip -F text -a &&
        git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
@@ -150,7 +150,7 @@ test_expect_success 'cleanup commit messages (strip,-F,-e)' '
        { echo;echo sample;echo; } >text &&
        git commit -e -F text -a &&
        head -n 4 .git/COMMIT_EDITMSG >actual &&
-       diff -u expect actual
+       test_cmp expect actual
 
 '
 
index e00607490bcb0439c6557003a3419d84823a8f00..cd08516e6de6b5c4b39ffee14302d76c99229825 100755 (executable)
@@ -33,7 +33,7 @@ test_expect_success 'setup' '
 
 test_expect_success 'status (1)' '
 
-       grep -e "use \"git rm --cached <file>\.\.\.\" to unstage" output
+       grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
 
 '
 
@@ -146,7 +146,7 @@ cat <<EOF >expect
 EOF
 test_expect_success 'status of partial commit excluding new file in index' '
        git status dir1/modified >output &&
-       diff -u expect output
+       test_cmp expect output
 '
 
 test_done
index 7ddec99a64273b056ff0f3e1fe1694315045f583..802aa624d0ff6a1add2e1c7e40a651336b450053 100755 (executable)
@@ -25,8 +25,9 @@ export FAKE_EDITOR
 HOOKDIR="$(git rev-parse --git-dir)/hooks"
 HOOK="$HOOKDIR/prepare-commit-msg"
 mkdir -p "$HOOKDIR"
-cat > "$HOOK" <<'EOF'
-#!/bin/sh
+echo "#!$SHELL_PATH" > "$HOOK"
+cat >> "$HOOK" <<'EOF'
+
 if test "$2" = commit; then
   source=$(git-rev-parse "$3")
 else
index 5d166280cbb93ef4e22f04090d510bfd5b09fb7a..56869aceeda90281a9fed992d0b202ec03fcb9f9 100755 (executable)
@@ -108,7 +108,7 @@ create_merge_msgs() {
 }
 
 verify_diff() {
-       if ! diff -u "$1" "$2"
+       if ! test_cmp "$1" "$2"
        then
                echo "$3"
                false
@@ -165,7 +165,7 @@ verify_mergeheads() {
        fi &&
        while test $# -gt 0
        do
-               head=$(head -n $i .git/MERGE_HEAD | tail -n 1)
+               head=$(head -n $i .git/MERGE_HEAD | sed -ne \$p)
                if test "$1" != "$head"
                then
                        echo "[OOPS] MERGE_HEAD $i != $1"
@@ -371,7 +371,7 @@ test_expect_success 'override config option -n' '
        git merge --summary c2 >diffstat.txt &&
        verify_merge file result.1-5 msg.1-5 &&
        verify_parents $c1 $c2 &&
-       if ! grep -e "^ file |  *2 +-$" diffstat.txt
+       if ! grep "^ file |  *2 +-$" diffstat.txt
        then
                echo "[OOPS] diffstat was not generated"
        fi
@@ -386,7 +386,7 @@ test_expect_success 'override config option --summary' '
        git merge -n c2 >diffstat.txt &&
        verify_merge file result.1-5 msg.1-5 &&
        verify_parents $c1 $c2 &&
-       if grep -e "^ file |  *2 +-$" diffstat.txt
+       if grep "^ file |  *2 +-$" diffstat.txt
        then
                echo "[OOPS] diffstat was generated"
                false
index db51b3a6bb85c466781139fd1f203b8f9b965710..966bb0a61a89ed63dec085338d3c45f766a7f777 100755 (executable)
@@ -112,7 +112,7 @@ test_expect_success 'blame wholesale copy' '
                echo mouse-Second
                echo mouse-Third
        } >expected &&
-       diff -u expected current
+       test_cmp expected current
 
 '
 
@@ -125,7 +125,7 @@ test_expect_success 'blame wholesale copy and more' '
                echo cow-Fifth
                echo mouse-Third
        } >expected &&
-       diff -u expected current
+       test_cmp expected current
 
 '
 
index cbbfa9cb4986403cb214bba6c2216c85471469c9..c0973b4e6ee2c6a55d1573e2341607c4adfcbb10 100755 (executable)
@@ -81,7 +81,7 @@ test_expect_success 'Show all headers' '
                -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
                -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
                >actual-show-all-headers &&
-       diff -u expected-show-all-headers actual-show-all-headers
+       test_cmp expected-show-all-headers actual-show-all-headers
 '
 
 z8=zzzzzzzz
index 08313bb54509265656f750af5582283d04695143..646a5f0cdb78a960faac59d202b12531542d7715 100755 (executable)
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 test_description='test that git handles an svn repository with missing md5sums'
 
 . ./lib-git-svn.sh
index 902ed4145de5f41f3b0522fac464594e9f6e792b..e1e8bdf0e37928c20e6bf24c08aaf574268cb037 100755 (executable)
@@ -55,74 +55,74 @@ printf 'r1 \nr2 \nr4 \n' > expected-range-r1-r2-r4
 
 test_expect_success 'test ascending revision range' "
        git reset --hard trunk &&
-       git svn log -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r1-r2-r4 -
+       git svn log -r 1:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2-r4 -
        "
 
 printf 'r4 \nr2 \nr1 \n' > expected-range-r4-r2-r1
 
 test_expect_success 'test descending revision range' "
        git reset --hard trunk &&
-       git svn log -r 4:1 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4-r2-r1 -
+       git svn log -r 4:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4-r2-r1 -
        "
 
 printf 'r1 \nr2 \n' > expected-range-r1-r2
 
 test_expect_success 'test ascending revision range with unreachable revision' "
        git reset --hard trunk &&
-       git svn log -r 1:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r1-r2 -
+       git svn log -r 1:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r1-r2 -
        "
 
 printf 'r2 \nr1 \n' > expected-range-r2-r1
 
 test_expect_success 'test descending revision range with unreachable revision' "
        git reset --hard trunk &&
-       git svn log -r 3:1 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r2-r1 -
+       git svn log -r 3:1 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2-r1 -
        "
 
 printf 'r2 \n' > expected-range-r2
 
 test_expect_success 'test ascending revision range with unreachable upper boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 2:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r2 -
+       git svn log -r 2:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
        "
 
 test_expect_success 'test descending revision range with unreachable upper boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 3:2 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r2 -
+       git svn log -r 3:2 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r2 -
        "
 
 printf 'r4 \n' > expected-range-r4
 
 test_expect_success 'test ascending revision range with unreachable lower boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 3:4 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 3:4 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 test_expect_success 'test descending revision range with unreachable lower boundary revision and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 4:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 4:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 printf -- '------------------------------------------------------------------------\n' > expected-separator
 
 test_expect_success 'test ascending revision range with unreachable boundary revisions and no commits' "
        git reset --hard trunk &&
-       git svn log -r 5:6 | diff -u expected-separator -
+       git svn log -r 5:6 | test_cmp expected-separator -
        "
 
 test_expect_success 'test descending revision range with unreachable boundary revisions and no commits' "
        git reset --hard trunk &&
-       git svn log -r 6:5 | diff -u expected-separator -
+       git svn log -r 6:5 | test_cmp expected-separator -
        "
 
 test_expect_success 'test ascending revision range with unreachable boundary revisions and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 3:5 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 3:5 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 test_expect_success 'test descending revision range with unreachable boundary revisions and 1 commit' "
        git reset --hard trunk &&
-       git svn log -r 5:3 | grep '^r[0-9]' | cut -d'|' -f1 | diff -u expected-range-r4 -
+       git svn log -r 5:3 | grep '^r[0-9]' | cut -d'|' -f1 | test_cmp expected-range-r4 -
        "
 
 test_done
index 58c59ed5ae0159810b4c8258f9182991bad33636..42b144b1b3f38b406b09ae7bff455f1e436ee33c 100755 (executable)
@@ -37,7 +37,7 @@ check_entries () {
        else
                printf '%s\n' "$2" | tr '|' '\012' >expected
        fi
-       diff -u expected actual
+       test_cmp expected actual
 }
 
 test_expect_success \
@@ -257,8 +257,8 @@ test_expect_success '-w option should work with relative GIT_DIR' '
       (cd "$GIT_DIR" &&
       GIT_DIR=. git cvsexportcommit -w "$CVSWORK" -c $id &&
       check_entries "$CVSWORK/W" "file1.txt/1.1/|file2.txt/1.1/" &&
-      diff -u "$CVSWORK/W/file1.txt" ../W/file1.txt &&
-      diff -u "$CVSWORK/W/file2.txt" ../W/file2.txt
+      test_cmp "$CVSWORK/W/file1.txt" ../W/file1.txt &&
+      test_cmp "$CVSWORK/W/file2.txt" ../W/file2.txt
       )
 '
 
@@ -279,9 +279,9 @@ test_expect_success 'check files before directories' '
        git cvsexportcommit -w "$CVSWORK" -c $id &&
        check_entries "$CVSWORK/E" "DS/1.1/|newfile5.txt/1.1/" &&
        check_entries "$CVSWORK" "DS/1.1/|release-notes/1.2/" &&
-       diff -u "$CVSWORK/DS" DS &&
-       diff -u "$CVSWORK/E/DS" E/DS &&
-       diff -u "$CVSWORK/release-notes" release-notes
+       test_cmp "$CVSWORK/DS" DS &&
+       test_cmp "$CVSWORK/E/DS" E/DS &&
+       test_cmp "$CVSWORK/release-notes" release-notes
 
 '
 
@@ -293,7 +293,7 @@ test_expect_success 'commit a file with leading spaces in the name' '
        id=$(git rev-parse HEAD) &&
        git cvsexportcommit -w "$CVSWORK" -c $id &&
        check_entries "$CVSWORK" " space/1.1/|DS/1.1/|release-notes/1.2/" &&
-       diff -u "$CVSWORK/ space" " space"
+       test_cmp "$CVSWORK/ space" " space"
 
 '
 
index 0a20971ebb693250ab1fa78cdd9ec269e7129f6e..b91b151417758758bba9a7afb89ed54bd9b1dc7a 100755 (executable)
@@ -54,7 +54,7 @@ test_expect_success 'setup' '
 test_expect_success 'basic checkout' \
   'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&
    test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/"
-   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | tail -n 1))" = "secondrootfile/1.1/"'
+   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \$p))" = "secondrootfile/1.1/"'
 
 #------------------------
 # PSERVER AUTHENTICATION
@@ -94,7 +94,7 @@ EOF
 
 test_expect_success 'pserver authentication' \
   'cat request-anonymous | git-cvsserver pserver >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'pserver authentication failure (non-anonymous user)' \
   'if cat request-git | git-cvsserver pserver >log 2>&1
@@ -103,11 +103,11 @@ test_expect_success 'pserver authentication failure (non-anonymous user)' \
    else
        true
    fi &&
-   tail -n1 log | grep -q "^I HATE YOU$"'
+   sed -ne \$p log | grep "^I HATE YOU$"'
 
 test_expect_success 'pserver authentication (login)' \
   'cat login-anonymous | git-cvsserver pserver >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'pserver authentication failure (login/non-anonymous user)' \
   'if cat login-git | git-cvsserver pserver >log 2>&1
@@ -116,7 +116,7 @@ test_expect_success 'pserver authentication failure (login/non-anonymous user)'
    else
        true
    fi &&
-   tail -n1 log | grep -q "^I HATE YOU$"'
+   sed -ne \$p log | grep "^I HATE YOU$"'
 
 
 # misuse pserver authentication for testing of req_Root
@@ -146,15 +146,15 @@ test_expect_success 'req_Root failure (relative pathname)' \
    else
        true
    fi &&
-   tail log | grep -q "^error 1 Root must be an absolute pathname$"'
+   tail log | grep "^error 1 Root must be an absolute pathname$"'
 
 test_expect_success 'req_Root failure (conflicting roots)' \
   'cat request-conflict | git-cvsserver pserver >log 2>&1 &&
-   tail log | grep -q "^error 1 Conflicting roots specified$"'
+   tail log | grep "^error 1 Conflicting roots specified$"'
 
 test_expect_success 'req_Root (strict paths)' \
   'cat request-anonymous | git-cvsserver --strict-paths pserver $SERVERDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (strict-paths)' '
     ! cat request-anonymous |
@@ -163,7 +163,7 @@ test_expect_success 'req_Root failure (strict-paths)' '
 
 test_expect_success 'req_Root (w/o strict-paths)' \
   'cat request-anonymous | git-cvsserver pserver $WORKDIR/ >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (w/o strict-paths)' '
     ! cat request-anonymous |
@@ -181,7 +181,7 @@ EOF
 
 test_expect_success 'req_Root (base-path)' \
   'cat request-base | git-cvsserver --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (base-path)' '
     ! cat request-anonymous |
@@ -192,14 +192,14 @@ GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false || exit 1
 
 test_expect_success 'req_Root (export-all)' \
   'cat request-anonymous | git-cvsserver --export-all pserver $WORKDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 test_expect_success 'req_Root failure (export-all w/o whitelist)' \
   '! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'
 
 test_expect_success 'req_Root (everything together)' \
   'cat request-base | git-cvsserver --export-all --strict-paths --base-path $WORKDIR/ pserver $SERVERDIR >log 2>&1 &&
-   tail -n1 log | grep -q "^I LOVE YOU$"'
+   sed -ne \$p log | grep "^I LOVE YOU$"'
 
 GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true || exit 1
 
@@ -216,7 +216,7 @@ test_expect_success 'gitcvs.enabled = false' \
    else
      true
    fi &&
-   cat cvs.log | grep -q "GITCVS emulation disabled" &&
+   grep "GITCVS emulation disabled" cvs.log &&
    test ! -d cvswork2'
 
 rm -fr cvswork2
@@ -237,7 +237,7 @@ test_expect_success 'gitcvs.ext.enabled = false' \
    else
      true
    fi &&
-   cat cvs.log | grep -q "GITCVS emulation disabled" &&
+   grep "GITCVS emulation disabled" cvs.log &&
    test ! -d cvswork2'
 
 rm -fr cvswork2
index 6aea0ea0a579973c9baddff608ea92445ef9fcbb..268b26c959692f8f575fb088143a92c4785b1214 100644 (file)
@@ -42,6 +42,7 @@ export GIT_MERGE_VERBOSITY
 export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME
 export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
 export EDITOR VISUAL
+GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
 
 # Protect ourselves from common misconfiguration to export
 # CDPATH into the environment
@@ -302,6 +303,23 @@ test_must_fail () {
        test $? -gt 0 -a $? -le 128
 }
 
+# test_cmp is a helper function to compare actual and expected output.
+# You can use it like:
+#
+#      test_expect_success 'foo works' '
+#              echo expected >expected &&
+#              foo >actual &&
+#              test_cmp expected actual
+#      '
+#
+# This could be written as either "cmp" or "diff -u", but:
+# - cmp's output is not nearly as easy to read as diff -u
+# - not all diff versions understand "-u"
+
+test_cmp() {
+       $GIT_TEST_CMP "$@"
+}
+
 # Most tests can use the created repository, but some may need to create more.
 # Usage: test_create_repo <directory>
 test_create_repo () {
index bf526c8f5e8649590da1bfd424e11a78c5621f6f..0f0bc5d02f4dcbd67c6d405350e5aaeb39f44bfb 100755 (executable)
@@ -10,7 +10,7 @@ do
                {
                        test -z "$pfx" || echo "$pfx"
                        dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
-                       tr '\000' 'g'
+                       perl -pe 'y/\000/g/'
                } | ./test-sha1 $cnt
        `
        if test "$expect" = "$actual"
@@ -55,7 +55,7 @@ do
                {
                        test -z "$pfx" || echo "$pfx"
                        dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
-                       tr '\000' 'g'
+                       perl -pe 'y/\000/g/'
                } | sha1sum |
                sed -e 's/ .*//'
        `