# write the index and that together with -u it doesn't touch the work tree.
#
read_tree_must_succeed () {
- git ls-files -s >pre-dry-run &&
- git read-tree -n "$@" &&
- git ls-files -s >post-dry-run &&
- test_cmp pre-dry-run post-dry-run &&
- git read-tree "$@"
+ git ls-files -s >pre-dry-run &&
+ git read-tree -n "$@" &&
+ git ls-files -s >post-dry-run &&
+ test_cmp pre-dry-run post-dry-run &&
+ git read-tree "$@"
}
read_tree_must_fail () {
- git ls-files -s >pre-dry-run &&
- test_must_fail git read-tree -n "$@" &&
- git ls-files -s >post-dry-run &&
- test_cmp pre-dry-run post-dry-run &&
- test_must_fail git read-tree "$@"
+ git ls-files -s >pre-dry-run &&
+ test_must_fail git read-tree -n "$@" &&
+ git ls-files -s >post-dry-run &&
+ test_cmp pre-dry-run post-dry-run &&
+ test_must_fail git read-tree "$@"
}
read_tree_u_must_succeed () {
- git ls-files -s >pre-dry-run &&
- git diff-files -p >pre-dry-run-wt &&
- git read-tree -n "$@" &&
- git ls-files -s >post-dry-run &&
- git diff-files -p >post-dry-run-wt &&
- test_cmp pre-dry-run post-dry-run &&
- test_cmp pre-dry-run-wt post-dry-run-wt &&
- git read-tree "$@"
+ git ls-files -s >pre-dry-run &&
+ git diff-files -p >pre-dry-run-wt &&
+ git read-tree -n "$@" &&
+ git ls-files -s >post-dry-run &&
+ git diff-files -p >post-dry-run-wt &&
+ test_cmp pre-dry-run post-dry-run &&
+ test_cmp pre-dry-run-wt post-dry-run-wt &&
+ git read-tree "$@"
}
read_tree_u_must_fail () {
- git ls-files -s >pre-dry-run &&
- git diff-files -p >pre-dry-run-wt &&
- test_must_fail git read-tree -n "$@" &&
- git ls-files -s >post-dry-run &&
- git diff-files -p >post-dry-run-wt &&
- test_cmp pre-dry-run post-dry-run &&
- test_cmp pre-dry-run-wt post-dry-run-wt &&
- test_must_fail git read-tree "$@"
+ git ls-files -s >pre-dry-run &&
+ git diff-files -p >pre-dry-run-wt &&
+ test_must_fail git read-tree -n "$@" &&
+ git ls-files -s >post-dry-run &&
+ git diff-files -p >post-dry-run-wt &&
+ test_cmp pre-dry-run post-dry-run &&
+ test_cmp pre-dry-run-wt post-dry-run-wt &&
+ test_must_fail git read-tree "$@"
}
# 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
+ 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
+ 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
+ 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 '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
+ 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
+ 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
+ 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