t / t4011-diff-symlink.shon commit Merge branch 'wp/merge-tree-fix' (ea56a7e)
   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'
  97test_done