rm -f A M N &&
git reset --hard &&
git checkout change+rename &&
+
+ test-tool chmtime --get -3600 B >old-mtime &&
GIT_MERGE_VERBOSITY=3 git merge change >out &&
- test_i18ngrep "^Skipped B" out &&
+
+ test-tool chmtime --get B >new-mtime &&
+ test_cmp old-mtime new-mtime &&
+
git reset --hard HEAD^ &&
git checkout change &&
+
+ # A will be renamed to B; we check mtimes and file presence
+ test_path_is_missing B &&
+ test-tool chmtime --get -3600 A >old-mtime &&
GIT_MERGE_VERBOSITY=3 git merge change+rename >out &&
- test_i18ngrep ! "^Skipped B" out
+
+ test_path_is_missing A &&
+ test-tool chmtime --get B >new-mtime &&
+ test $(cat old-mtime) -lt $(cat new-mtime)
'
test_expect_success 'setup for rename + d/f conflicts' '
git merge --strategy=recursive dir-not-in-way &&
git diff --quiet &&
- test -f dir &&
- printf "1\n2\n3\n4\n5555\n6\n7\n8\n9\n10\n11\n" >expected &&
+ test_path_is_file dir &&
+ test_write_lines 1 2 3 4 5555 6 7 8 9 10 11 >expected &&
test_cmp expected dir
'
test_must_fail git diff --quiet &&
test_must_fail git diff --cached --quiet &&
- test -f dir/file-in-the-way &&
- test -f dir~HEAD &&
+ test_path_is_file dir/file-in-the-way &&
+ test_path_is_file dir~HEAD &&
test_cmp expected dir~HEAD
'
test_must_fail git diff --quiet &&
test_must_fail git diff --cached --quiet &&
- test -f dir/file-in-the-way &&
- test -f dir~renamed-file-has-no-conflicts &&
+ test_path_is_file dir/file-in-the-way &&
+ test_path_is_file dir~renamed-file-has-no-conflicts &&
test_cmp expected dir~renamed-file-has-no-conflicts
'
test_must_fail git diff --quiet &&
test_must_fail git diff --cached --quiet &&
- test -f dir &&
+ test_path_is_file dir &&
cat >expected <<-\EOF &&
1
2
test_must_fail git diff --quiet &&
test_must_fail git diff --cached --quiet &&
- test -f dir/file-in-the-way &&
- test -f dir~HEAD &&
+ test_path_is_file dir/file-in-the-way &&
+ test_path_is_file dir~HEAD &&
test_cmp expected dir~HEAD
'
test_must_fail git diff --quiet &&
test_must_fail git diff --cached --quiet &&
- test -f dir/file-in-the-way &&
- test -f dir~renamed-file-has-conflicts &&
+ test_path_is_file dir/file-in-the-way &&
+ test_path_is_file dir~renamed-file-has-conflicts &&
cat >expected <<-\EOF &&
1
2
test_must_fail git diff --quiet &&
- test -f destdir/foo &&
- test -f one &&
- test -f destdir~HEAD &&
+ test_path_is_file destdir/foo &&
+ test_path_is_file one &&
+ test_path_is_file destdir~HEAD &&
test "stuff" = "$(cat destdir~HEAD)"
'
test 4 -eq $(find . | grep -v .git | wc -l) &&
- test -d one &&
- test -f one~rename-two &&
- test -f two &&
+ test_path_is_dir one &&
+ test_path_is_file one~rename-two &&
+ test_path_is_file two &&
test "other" = $(cat one~rename-two) &&
test "stuff" = $(cat two)
'
test 3 -eq $(find . | grep -v .git | wc -l) &&
- test -f one &&
- test -f two &&
+ test_path_is_file one &&
+ test_path_is_file two &&
test "other" = $(cat one) &&
test "stuff" = $(cat two)
'
test 1 -eq "$(git ls-files -u original | wc -l)" &&
test 2 -eq "$(git ls-files -o | wc -l)" &&
- test -f one/file &&
- test -f two/file &&
- test -f one~HEAD &&
- test -f two~second-rename &&
- ! test -f original
+ test_path_is_file one/file &&
+ test_path_is_file two/file &&
+ test_path_is_file one~HEAD &&
+ test_path_is_file two~second-rename &&
+ test_path_is_missing original
'
test_expect_success 'setup rename one file to two; directories moving out of the way' '
test 1 -eq "$(git ls-files -u original | wc -l)" &&
test 0 -eq "$(git ls-files -o | wc -l)" &&
- test -f one &&
- test -f two &&
- ! test -f original
+ test_path_is_file one &&
+ test_path_is_file two &&
+ test_path_is_missing original
'
test_expect_success 'setup avoid unnecessary update, normal rename' '
test_expect_success 'avoid unnecessary update, normal rename' '
git checkout -q avoid-unnecessary-update-1^0 &&
- test-tool chmtime --get =1000000000 rename >expect &&
+ test-tool chmtime --get -3600 rename >expect &&
git merge merge-branch-1 &&
test-tool chmtime --get rename >actual &&
test_cmp expect actual # "rename" should have stayed intact
test_expect_success 'avoid unnecessary update, with D/F conflict' '
git checkout -q avoid-unnecessary-update-2^0 &&
- test-tool chmtime --get =1000000000 df >expect &&
+ test-tool chmtime --get -3600 df >expect &&
git merge merge-branch-2 &&
test-tool chmtime --get df >actual &&
test_cmp expect actual # "df" should have stayed intact
test_expect_success 'avoid unnecessary update, dir->(file,nothing)' '
git checkout -q master^0 &&
- test-tool chmtime --get =1000000000 df >expect &&
+ test-tool chmtime --get -3600 df >expect &&
git merge side &&
test-tool chmtime --get df >actual &&
test_cmp expect actual # "df" should have stayed intact
test_expect_success 'avoid unnecessary update, modify/delete' '
git checkout -q master^0 &&
- test-tool chmtime --get =1000000000 file >expect &&
+ test-tool chmtime --get -3600 file >expect &&
test_must_fail git merge side &&
test-tool chmtime --get file >actual &&
test_cmp expect actual # "file" should have stayed intact
test_expect_success 'avoid unnecessary update, rename/add-dest' '
git checkout -q master^0 &&
- test-tool chmtime --get =1000000000 newfile >expect &&
+ test-tool chmtime --get -3600 newfile >expect &&
git merge side &&
test-tool chmtime --get newfile >actual &&
test_cmp expect actual # "file" should have stayed intact