t / t4011-diff-symlink.shon commit Sync with maint (2d0b071)
   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
  12test_expect_success SYMLINKS 'diff new symlink and file' '
  13        cat >expected <<-\EOF &&
  14        diff --git a/frotz b/frotz
  15        new file mode 120000
  16        index 0000000..7c465af
  17        --- /dev/null
  18        +++ b/frotz
  19        @@ -0,0 +1 @@
  20        +xyzzy
  21        \ No newline at end of file
  22        diff --git a/nitfol b/nitfol
  23        new file mode 100644
  24        index 0000000..7c465af
  25        --- /dev/null
  26        +++ b/nitfol
  27        @@ -0,0 +1 @@
  28        +xyzzy
  29        EOF
  30        ln -s xyzzy frotz &&
  31        echo xyzzy >nitfol &&
  32        git update-index &&
  33        tree=$(git write-tree) &&
  34        git update-index --add frotz nitfol &&
  35        GIT_DIFF_OPTS=--unified=0 git diff-index -M -p $tree >current &&
  36        compare_diff_patch expected current
  37'
  38
  39test_expect_success SYMLINKS 'diff unchanged symlink and file'  '
  40        tree=$(git write-tree) &&
  41        git update-index frotz nitfol &&
  42        test -z "$(git diff-index --name-only $tree)"
  43'
  44
  45test_expect_success SYMLINKS 'diff removed symlink and file' '
  46        cat >expected <<-\EOF &&
  47        diff --git a/frotz b/frotz
  48        deleted file mode 120000
  49        index 7c465af..0000000
  50        --- a/frotz
  51        +++ /dev/null
  52        @@ -1 +0,0 @@
  53        -xyzzy
  54        \ No newline at end of file
  55        diff --git a/nitfol b/nitfol
  56        deleted file mode 100644
  57        index 7c465af..0000000
  58        --- a/nitfol
  59        +++ /dev/null
  60        @@ -1 +0,0 @@
  61        -xyzzy
  62        EOF
  63        mv frotz frotz2 &&
  64        mv nitfol nitfol2 &&
  65        git diff-index -M -p $tree >current &&
  66        compare_diff_patch expected current
  67'
  68
  69test_expect_success SYMLINKS 'diff identical, but newly created symlink and file' '
  70        >expected &&
  71        rm -f frotz nitfol &&
  72        echo xyzzy >nitfol &&
  73        test-chmtime +10 nitfol &&
  74        ln -s xyzzy frotz &&
  75        git diff-index -M -p $tree >current &&
  76        compare_diff_patch expected current &&
  77
  78        >expected &&
  79        git diff-index -M -p -w $tree >current &&
  80        compare_diff_patch expected current
  81'
  82
  83test_expect_success SYMLINKS 'diff different symlink and file' '
  84        cat >expected <<-\EOF &&
  85        diff --git a/frotz b/frotz
  86        index 7c465af..df1db54 120000
  87        --- a/frotz
  88        +++ b/frotz
  89        @@ -1 +1 @@
  90        -xyzzy
  91        \ No newline at end of file
  92        +yxyyz
  93        \ No newline at end of file
  94        diff --git a/nitfol b/nitfol
  95        index 7c465af..df1db54 100644
  96        --- a/nitfol
  97        +++ b/nitfol
  98        @@ -1 +1 @@
  99        -xyzzy
 100        +yxyyz
 101        EOF
 102        rm -f frotz &&
 103        ln -s yxyyz frotz &&
 104        echo yxyyz >nitfol &&
 105        git diff-index -M -p $tree >current &&
 106        compare_diff_patch expected current
 107'
 108
 109test_expect_success SYMLINKS 'diff symlinks with non-existing targets' '
 110        ln -s narf pinky &&
 111        ln -s take\ over brain &&
 112        test_must_fail git diff --no-index pinky brain >output 2>output.err &&
 113        grep narf output &&
 114        ! test -s output.err
 115'
 116
 117test_expect_success SYMLINKS 'setup symlinks with attributes' '
 118        echo "*.bin diff=bin" >>.gitattributes &&
 119        echo content >file.bin &&
 120        ln -s file.bin link.bin &&
 121        git add -N file.bin link.bin
 122'
 123
 124test_expect_success SYMLINKS 'symlinks do not respect userdiff config by path' '
 125        cat >expect <<-\EOF &&
 126        diff --git a/file.bin b/file.bin
 127        index e69de29..d95f3ad 100644
 128        Binary files a/file.bin and b/file.bin differ
 129        diff --git a/link.bin b/link.bin
 130        index e69de29..dce41ec 120000
 131        --- a/link.bin
 132        +++ b/link.bin
 133        @@ -0,0 +1 @@
 134        +file.bin
 135        \ No newline at end of file
 136        EOF
 137        git config diff.bin.binary true &&
 138        git diff file.bin link.bin >actual &&
 139        test_cmp expect actual
 140'
 141
 142test_done