| #!/bin/sh |
| |
| test_description='more git add -u' |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./test-lib.sh |
| |
| test_expect_success setup ' |
| >xyzzy && |
| _empty=$(git hash-object --stdin <xyzzy) && |
| >yomin && |
| >caskly && |
| if test_have_prereq SYMLINKS; then |
| ln -s frotz nitfol && |
| T_letter=T |
| else |
| printf %s frotz > nitfol && |
| T_letter=M |
| fi && |
| mkdir rezrov && |
| >rezrov/bozbar && |
| git add caskly xyzzy yomin nitfol rezrov/bozbar && |
| |
| test_tick && |
| git commit -m initial |
| |
| ' |
| |
| test_expect_success modify ' |
| rm -f xyzzy yomin nitfol caskly && |
| # caskly disappears (not a submodule) |
| mkdir caskly && |
| # nitfol changes from symlink to regular |
| >nitfol && |
| # rezrov/bozbar disappears |
| rm -fr rezrov && |
| if test_have_prereq SYMLINKS; then |
| ln -s xyzzy rezrov |
| else |
| printf %s xyzzy > rezrov |
| fi && |
| # xyzzy disappears (not a submodule) |
| mkdir xyzzy && |
| echo gnusto >xyzzy/bozbar && |
| # yomin gets replaced with a submodule |
| mkdir yomin && |
| >yomin/yomin && |
| ( |
| cd yomin && |
| git init && |
| git add yomin && |
| git commit -m "sub initial" |
| ) && |
| yomin=$(GIT_DIR=yomin/.git git rev-parse HEAD) && |
| # yonk is added and then turned into a submodule |
| # this should appear as T in diff-files and as A in diff-index |
| >yonk && |
| git add yonk && |
| rm -f yonk && |
| mkdir yonk && |
| >yonk/yonk && |
| ( |
| cd yonk && |
| git init && |
| git add yonk && |
| git commit -m "sub initial" |
| ) && |
| yonk=$(GIT_DIR=yonk/.git git rev-parse HEAD) && |
| # zifmia is added and then removed |
| # this should appear in diff-files but not in diff-index. |
| >zifmia && |
| git add zifmia && |
| rm -f zifmia && |
| mkdir zifmia && |
| { |
| git ls-tree -r HEAD | |
| sed -e "s/^/:/" -e " |
| / caskly/{ |
| s/ caskly/ $ZERO_OID D&/ |
| s/blob/000000/ |
| } |
| / nitfol/{ |
| s/ nitfol/ $ZERO_OID $T_letter&/ |
| s/blob/100644/ |
| } |
| / rezrov.bozbar/{ |
| s/ rezrov.bozbar/ $ZERO_OID D&/ |
| s/blob/000000/ |
| } |
| / xyzzy/{ |
| s/ xyzzy/ $ZERO_OID D&/ |
| s/blob/000000/ |
| } |
| / yomin/{ |
| s/ yomin/ $ZERO_OID T&/ |
| s/blob/160000/ |
| } |
| " |
| } >expect && |
| { |
| cat expect && |
| echo ":100644 160000 $_empty $ZERO_OID T yonk" && |
| echo ":100644 000000 $_empty $ZERO_OID D zifmia" |
| } >expect-files && |
| { |
| cat expect && |
| echo ":000000 160000 $ZERO_OID $ZERO_OID A yonk" |
| } >expect-index && |
| { |
| echo "100644 $_empty 0 nitfol" && |
| echo "160000 $yomin 0 yomin" && |
| echo "160000 $yonk 0 yonk" |
| } >expect-final |
| ' |
| |
| test_expect_success diff-files ' |
| git diff-files --raw >actual && |
| test_cmp expect-files actual |
| ' |
| |
| test_expect_success diff-index ' |
| git diff-index --raw HEAD -- >actual && |
| test_cmp expect-index actual |
| ' |
| |
| test_expect_success 'add -u' ' |
| rm -f ".git/saved-index" && |
| cp -p ".git/index" ".git/saved-index" && |
| git add -u && |
| git ls-files -s >actual && |
| test_cmp expect-final actual |
| ' |
| |
| test_expect_success 'commit -a' ' |
| if test -f ".git/saved-index" |
| then |
| rm -f ".git/index" && |
| mv ".git/saved-index" ".git/index" |
| fi && |
| git commit -m "second" -a && |
| git ls-files -s >actual && |
| test_cmp expect-final actual && |
| rm -f .git/index && |
| git read-tree HEAD && |
| git ls-files -s >actual && |
| test_cmp expect-final actual |
| ' |
| |
| test_done |