(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description) op: assign_op.Equal rhs: {(SQ <'merging when a directory was replaced with a symlink'>)} spids: [4] ) ] redirects: [] ) (C {<.>} {<'./test-lib.sh'>}) (C {<test_expect_success>} {(SQ <'create a commit where dir a/b changed to symlink'>)} { (SQ <'\n'> <'\tmkdir -p a/b/c a/b-2/c &&\n'> <'\t> a/b/c/d &&\n'> <'\t> a/b-2/c/d &&\n'> <'\t> a/x &&\n'> <'\tgit add -A &&\n'> <'\tgit commit -m base &&\n'> <'\tgit tag start &&\n'> <'\trm -rf a/b &&\n'> <'\tgit add -A &&\n'> <'\ttest_ln_s_add b-2 a/b &&\n'> <'\tgit commit -m "dir to symlink"\n'> ) } ) (C {<test_expect_success>} {(SQ <'checkout does not clobber untracked symlink'>)} { (SQ <'\n'> <'\tgit checkout HEAD^0 &&\n'> <'\tgit reset --hard master &&\n'> <'\tgit rm --cached a/b &&\n'> <'\tgit commit -m "untracked symlink remains" &&\n'> <'\ttest_must_fail git checkout start^0\n'> ) } ) (C {<test_expect_success>} {(SQ <'a/b-2/c/d is kept when clobbering symlink b'>)} { (SQ <'\n'> <'\tgit checkout HEAD^0 &&\n'> <'\tgit reset --hard master &&\n'> <'\tgit rm --cached a/b &&\n'> <'\tgit commit -m "untracked symlink remains" &&\n'> <'\tgit checkout -f start^0 &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {(SQ <'checkout should not have deleted a/b-2/c/d'>)} { (SQ <'\n'> <'\tgit checkout HEAD^0 &&\n'> <'\tgit reset --hard master &&\n'> <'\t git checkout start^0 &&\n'> <'\t test -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup for merge test'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\ttest -f a/b-2/c/d &&\n'> <'\techo x > a/x &&\n'> <'\tgit add a/x &&\n'> <'\tgit commit -m x &&\n'> <'\tgit tag baseline\n'> ) } ) (C {<test_expect_success>} {(SQ <'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\tgit merge -s resolve master &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b\n'>)} ) (C {<test_expect_success>} {(SQ <'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\tgit merge -s recursive master &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b\n'>)} ) (C {<test_expect_success>} {(SQ <'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout master^0 &&\n'> <'\tgit merge -s resolve baseline^0 &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b\n'>)} ) (C {<test_expect_success>} {(SQ <'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout master^0 &&\n'> <'\tgit merge -s recursive baseline^0 &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b\n'>)} ) (C {<test_expect_failure>} {(SQ <'do not lose untracked in merge (resolve)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\t>a/b/c/e &&\n'> <'\ttest_must_fail git merge -s resolve master &&\n'> <'\ttest -f a/b/c/e &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {(SQ <'do not lose untracked in merge (recursive)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\t>a/b/c/e &&\n'> <'\ttest_must_fail git merge -s recursive master &&\n'> <'\ttest -f a/b/c/e &&\n'> <'\ttest -f a/b-2/c/d\n'> ) } ) (C {<test_expect_success>} {(SQ <'do not lose modifications in merge (resolve)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\techo more content >>a/b/c/d &&\n'> <'\ttest_must_fail git merge -s resolve master\n'> ) } ) (C {<test_expect_success>} {(SQ <'do not lose modifications in merge (recursive)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\techo more content >>a/b/c/d &&\n'> <'\ttest_must_fail git merge -s recursive master\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup a merge where dir a/b-2 changed to symlink'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout start^0 &&\n'> <'\trm -rf a/b-2 &&\n'> <'\tgit add -A &&\n'> <'\ttest_ln_s_add b a/b-2 &&\n'> <'\tgit commit -m "dir a/b-2 to symlink" &&\n'> <'\tgit tag test2\n'> ) } ) (C {<test_expect_success>} {(SQ <'merge should not have D/F conflicts (resolve)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\tgit merge -s resolve test2 &&\n'> <'\ttest -f a/b/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b-2 was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b-2\n'>)} ) (C {<test_expect_success>} {(SQ <'merge should not have D/F conflicts (recursive)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout baseline^0 &&\n'> <'\tgit merge -s recursive test2 &&\n'> <'\ttest -f a/b/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b-2 was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b-2\n'>)} ) (C {<test_expect_success>} {(SQ <'merge should not have F/D conflicts (recursive)'>)} { (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout -b foo test2 &&\n'> <'\tgit merge -s recursive baseline^0 &&\n'> <'\ttest -f a/b/c/d\n'> ) } ) (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'a/b-2 was resolved as symlink'>)} {(SQ <'\n'> <'\ttest -h a/b-2\n'>)} ) (C {<test_done>}) ] )