|  | #!/bin/sh | 
|  |  | 
|  | test_description='read-tree -u --reset' | 
|  |  | 
|  | . ./test-lib.sh | 
|  | . "$TEST_DIRECTORY"/lib-read-tree.sh | 
|  |  | 
|  | # two-tree test | 
|  |  | 
|  | test_expect_success 'setup' ' | 
|  | git init && | 
|  | mkdir df && | 
|  | echo content >df/file && | 
|  | git add df/file && | 
|  | git commit -m one && | 
|  | git ls-files >expect && | 
|  | rm -rf df && | 
|  | echo content >df && | 
|  | git add df && | 
|  | echo content >new && | 
|  | git add new && | 
|  | git commit -m two | 
|  | ' | 
|  |  | 
|  | test_expect_success 'reset should work' ' | 
|  | read_tree_u_must_succeed -u --reset HEAD^ && | 
|  | git ls-files >actual && | 
|  | test_cmp expect actual | 
|  | ' | 
|  |  | 
|  | test_expect_success 'reset should remove remnants from a failed merge' ' | 
|  | read_tree_u_must_succeed --reset -u HEAD && | 
|  | git ls-files -s >expect && | 
|  | sha1=$(git rev-parse :new) && | 
|  | ( | 
|  | echo "100644 $sha1 1	old" | 
|  | echo "100644 $sha1 3	old" | 
|  | ) | git update-index --index-info && | 
|  | >old && | 
|  | git ls-files -s && | 
|  | read_tree_u_must_succeed --reset -u HEAD && | 
|  | git ls-files -s >actual && | 
|  | ! test -f old | 
|  | ' | 
|  |  | 
|  | test_expect_success 'two-way reset should remove remnants too' ' | 
|  | read_tree_u_must_succeed --reset -u HEAD && | 
|  | git ls-files -s >expect && | 
|  | sha1=$(git rev-parse :new) && | 
|  | ( | 
|  | echo "100644 $sha1 1	old" | 
|  | echo "100644 $sha1 3	old" | 
|  | ) | git update-index --index-info && | 
|  | >old && | 
|  | git ls-files -s && | 
|  | read_tree_u_must_succeed --reset -u HEAD HEAD && | 
|  | git ls-files -s >actual && | 
|  | ! test -f old | 
|  | ' | 
|  |  | 
|  | test_expect_success 'Porcelain reset should remove remnants too' ' | 
|  | read_tree_u_must_succeed --reset -u HEAD && | 
|  | git ls-files -s >expect && | 
|  | sha1=$(git rev-parse :new) && | 
|  | ( | 
|  | echo "100644 $sha1 1	old" | 
|  | echo "100644 $sha1 3	old" | 
|  | ) | git update-index --index-info && | 
|  | >old && | 
|  | git ls-files -s && | 
|  | git reset --hard && | 
|  | git ls-files -s >actual && | 
|  | ! test -f old | 
|  | ' | 
|  |  | 
|  | test_expect_success 'Porcelain checkout -f should remove remnants too' ' | 
|  | read_tree_u_must_succeed --reset -u HEAD && | 
|  | git ls-files -s >expect && | 
|  | sha1=$(git rev-parse :new) && | 
|  | ( | 
|  | echo "100644 $sha1 1	old" | 
|  | echo "100644 $sha1 3	old" | 
|  | ) | git update-index --index-info && | 
|  | >old && | 
|  | git ls-files -s && | 
|  | git checkout -f && | 
|  | git ls-files -s >actual && | 
|  | ! test -f old | 
|  | ' | 
|  |  | 
|  | test_expect_success 'Porcelain checkout -f HEAD should remove remnants too' ' | 
|  | read_tree_u_must_succeed --reset -u HEAD && | 
|  | git ls-files -s >expect && | 
|  | sha1=$(git rev-parse :new) && | 
|  | ( | 
|  | echo "100644 $sha1 1	old" | 
|  | echo "100644 $sha1 3	old" | 
|  | ) | git update-index --index-info && | 
|  | >old && | 
|  | git ls-files -s && | 
|  | git checkout -f HEAD && | 
|  | git ls-files -s >actual && | 
|  | ! test -f old | 
|  | ' | 
|  |  | 
|  | test_done |