t / t4011-diff-symlink.shon commit blame,cat-file --textconv: Don't assume mode is ``S_IFREF | 0664'' (9006471)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Johannes Schindelin
   4#
   5
   6test_description='Test diff of symlinks.
   7
   8'
   9. ./test-lib.sh
  10. "$TEST_DIRECTORY"/diff-lib.sh
  11
  12if ! test_have_prereq SYMLINKS
  13then
  14        skip_all='Symbolic links not supported, skipping tests.'
  15        test_done
  16fi
  17
  18cat > expected << EOF
  19diff --git a/frotz b/frotz
  20new file mode 120000
  21index 0000000..7c465af
  22--- /dev/null
  23+++ b/frotz
  24@@ -0,0 +1 @@
  25+xyzzy
  26\ No newline at end of file
  27EOF
  28
  29test_expect_success \
  30    'diff new symlink' \
  31    'ln -s xyzzy frotz &&
  32    git update-index &&
  33    tree=$(git write-tree) &&
  34    git update-index --add frotz &&
  35    GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree > current &&
  36    compare_diff_patch current expected'
  37
  38test_expect_success \
  39    'diff unchanged symlink' \
  40    'tree=$(git write-tree) &&
  41    git update-index frotz &&
  42    test -z "$(git diff-index --name-only $tree)"'
  43
  44cat > expected << EOF
  45diff --git a/frotz b/frotz
  46deleted file mode 120000
  47index 7c465af..0000000
  48--- a/frotz
  49+++ /dev/null
  50@@ -1 +0,0 @@
  51-xyzzy
  52\ No newline at end of file
  53EOF
  54
  55test_expect_success \
  56    'diff removed symlink' \
  57    'mv frotz frotz2 &&
  58    git diff-index -M -p $tree > current &&
  59    compare_diff_patch current expected'
  60
  61cat > expected << EOF
  62diff --git a/frotz b/frotz
  63EOF
  64
  65test_expect_success \
  66    'diff identical, but newly created symlink' \
  67    'ln -s xyzzy frotz &&
  68    git diff-index -M -p $tree > current &&
  69    compare_diff_patch current expected'
  70
  71cat > expected << EOF
  72diff --git a/frotz b/frotz
  73index 7c465af..df1db54 120000
  74--- a/frotz
  75+++ b/frotz
  76@@ -1 +1 @@
  77-xyzzy
  78\ No newline at end of file
  79+yxyyz
  80\ No newline at end of file
  81EOF
  82
  83test_expect_success \
  84    'diff different symlink' \
  85    'rm frotz &&
  86    ln -s yxyyz frotz &&
  87    git diff-index -M -p $tree > current &&
  88    compare_diff_patch current expected'
  89
  90test_expect_success \
  91    'diff symlinks with non-existing targets' \
  92    'ln -s narf pinky &&
  93    ln -s take\ over brain &&
  94    test_must_fail git diff --no-index pinky brain > output 2> output.err &&
  95    grep narf output &&
  96    ! grep error output.err'
  97
  98test_expect_success SYMLINKS 'setup symlinks with attributes' '
  99        echo "*.bin diff=bin" >>.gitattributes &&
 100        echo content >file.bin &&
 101        ln -s file.bin link.bin &&
 102        git add -N file.bin link.bin
 103'
 104
 105cat >expect <<'EOF'
 106diff --git a/file.bin b/file.bin
 107index e69de29..d95f3ad 100644
 108Binary files a/file.bin and b/file.bin differ
 109diff --git a/link.bin b/link.bin
 110index e69de29..dce41ec 120000
 111--- a/link.bin
 112+++ b/link.bin
 113@@ -0,0 +1 @@
 114+file.bin
 115\ No newline at end of file
 116EOF
 117test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' '
 118        git config diff.bin.binary true &&
 119        git diff file.bin link.bin >actual &&
 120        test_cmp expect actual
 121'
 122
 123test_done