t / t2201-add-update-typechange.shon commit diff --cached: do not borrow from a work tree when a path is marked as assume-unchanged (150115a)
   1#!/bin/sh
   2
   3test_description='more git add -u'
   4
   5. ./test-lib.sh
   6
   7_z40=0000000000000000000000000000000000000000
   8
   9test_expect_success setup '
  10        >xyzzy &&
  11        _empty=$(git hash-object --stdin <xyzzy) &&
  12        >yomin &&
  13        >caskly &&
  14        ln -s frotz nitfol &&
  15        mkdir rezrov &&
  16        >rezrov/bozbar &&
  17        git add caskly xyzzy yomin nitfol rezrov/bozbar &&
  18
  19        test_tick &&
  20        git commit -m initial
  21
  22'
  23
  24test_expect_success modify '
  25        rm -f xyzzy yomin nitfol caskly &&
  26        # caskly disappears (not a submodule)
  27        mkdir caskly &&
  28        # nitfol changes from symlink to regular
  29        >nitfol &&
  30        # rezrov/bozbar disappears
  31        rm -fr rezrov &&
  32        ln -s xyzzy rezrov &&
  33        # xyzzy disappears (not a submodule)
  34        mkdir xyzzy &&
  35        echo gnusto >xyzzy/bozbar &&
  36        # yomin gets replaced with a submodule
  37        mkdir yomin &&
  38        >yomin/yomin &&
  39        (
  40                cd yomin &&
  41                git init &&
  42                git add yomin &&
  43                git commit -m "sub initial"
  44        ) &&
  45        yomin=$(GIT_DIR=yomin/.git git rev-parse HEAD) &&
  46        # yonk is added and then turned into a submodule
  47        # this should appear as T in diff-files and as A in diff-index
  48        >yonk &&
  49        git add yonk &&
  50        rm -f yonk &&
  51        mkdir yonk &&
  52        >yonk/yonk &&
  53        (
  54                cd yonk &&
  55                git init &&
  56                git add yonk &&
  57                git commit -m "sub initial"
  58        ) &&
  59        yonk=$(GIT_DIR=yonk/.git git rev-parse HEAD) &&
  60        # zifmia is added and then removed
  61        # this should appear in diff-files but not in diff-index.
  62        >zifmia &&
  63        git add zifmia &&
  64        rm -f zifmia &&
  65        mkdir zifmia &&
  66        {
  67                git ls-tree -r HEAD |
  68                sed -e "s/^/:/" -e "
  69                        /       caskly/{
  70                                s/      caskly/ $_z40 D&/
  71                                s/blob/000000/
  72                        }
  73                        /       nitfol/{
  74                                s/      nitfol/ $_z40 T&/
  75                                s/blob/100644/
  76                        }
  77                        /       rezrov.bozbar/{
  78                                s/      rezrov.bozbar/ $_z40 D&/
  79                                s/blob/000000/
  80                        }
  81                        /       xyzzy/{
  82                                s/      xyzzy/ $_z40 D&/
  83                                s/blob/000000/
  84                        }
  85                        /       yomin/{
  86                            s/  yomin/ $_z40 T&/
  87                                s/blob/160000/
  88                        }
  89                "
  90        } >expect &&
  91        {
  92                cat expect
  93                echo ":100644 160000 $_empty $_z40 T    yonk"
  94                echo ":100644 000000 $_empty $_z40 D    zifmia"
  95        } >expect-files &&
  96        {
  97                cat expect
  98                echo ":000000 160000 $_z40 $_z40 A      yonk"
  99        } >expect-index &&
 100        {
 101                echo "100644 $_empty 0  nitfol"
 102                echo "160000 $yomin 0   yomin"
 103                echo "160000 $yonk 0    yonk"
 104        } >expect-final
 105'
 106
 107test_expect_success diff-files '
 108        git diff-files --raw >actual &&
 109        test_cmp expect-files actual
 110'
 111
 112test_expect_success diff-index '
 113        git diff-index --raw HEAD -- >actual &&
 114        test_cmp expect-index actual
 115'
 116
 117test_expect_success 'add -u' '
 118        rm -f ".git/saved-index" &&
 119        cp -p ".git/index" ".git/saved-index" &&
 120        git add -u &&
 121        git ls-files -s >actual &&
 122        test_cmp expect-final actual
 123'
 124
 125test_expect_success 'commit -a' '
 126        if test -f ".git/saved-index"
 127        then
 128                rm -f ".git/index" &&
 129                mv ".git/saved-index" ".git/index"
 130        fi &&
 131        git commit -m "second" -a &&
 132        git ls-files -s >actual &&
 133        test_cmp expect-final actual &&
 134        rm -f .git/index &&
 135        git read-tree HEAD &&
 136        git ls-files -s >actual &&
 137        test_cmp expect-final actual
 138'
 139
 140test_done