(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'merging when a directory was replaced with a symlink' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create a commit where dir a/b changed to symlink' span_id:17))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) (Token id:Id.Lit_Chars val:'\tmkdir -p a/b/c a/b-2/c &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\t> a/b/c/d &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\t> a/b-2/c/d &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\t> a/x &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit tag start &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\trm -rf a/b &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add b-2 a/b &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit commit -m "dir to symlink"\n' span_id:32) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout does not clobber untracked symlink' span_id:39))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tgit rm --cached a/b &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tgit commit -m "untracked symlink remains" &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout start^0\n' span_id:48) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'a/b-2/c/d is kept when clobbering symlink b' span_id:55))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit rm --cached a/b &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tgit commit -m "untracked symlink remains" &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit checkout -f start^0 &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:65) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout should not have deleted a/b-2/c/d' span_id:72))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\t git checkout start^0 &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\t test -f a/b-2/c/d\n' span_id:80) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for merge test' span_id:87))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\techo x > a/x &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgit add a/x &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit commit -m x &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tgit tag baseline\n' span_id:97) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)' span_id: 104 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:108) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\tgit merge -s resolve master &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:112) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:121))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:125) (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:126) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)' span_id: 133 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive master &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:141) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:150))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:155) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)' span_id: 162 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\tgit merge -s resolve baseline^0 &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:170) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:179))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:183) (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:184) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)' span_id: 191 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:197) (Token id: Id.Lit_Chars val: '\tgit merge -s recursive baseline^0 &&\n' span_id: 198 ) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:199) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:208))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:212) (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:213) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'do not lose untracked in merge (resolve)' span_id:220))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:224) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\t>a/b/c/e &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s resolve master &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/e &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:230) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not lose untracked in merge (recursive)' span_id:237))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\t>a/b/c/e &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive master &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/e &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:247) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not lose modifications in merge (resolve)' span_id:254))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\techo more content >>a/b/c/d &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s resolve master\n' span_id:262) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not lose modifications in merge (recursive)' span_id:269))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:273) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\techo more content >>a/b/c/d &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive master\n' span_id:277) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'setup a merge where dir a/b-2 changed to symlink' span_id: 284 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\tgit checkout start^0 &&\n' span_id:290) (Token id:Id.Lit_Chars val:'\trm -rf a/b-2 &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add b a/b-2 &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\tgit commit -m "dir a/b-2 to symlink" &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\tgit tag test2\n' span_id:295) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge should not have D/F conflicts (resolve)' span_id:302))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:306) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:307) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:308) (Token id:Id.Lit_Chars val:'\tgit merge -s resolve test2 &&\n' span_id:309) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/d\n' span_id:310) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b-2 was resolved as symlink' span_id:319))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:323) (Token id:Id.Lit_Chars val:'\ttest -h a/b-2\n' span_id:324) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge should not have D/F conflicts (recursive)' span_id:331))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:335) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:337) (Token id:Id.Lit_Chars val:'\tgit merge -s recursive test2 &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/d\n' span_id:339) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b-2 was resolved as symlink' span_id:348))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:352) (Token id:Id.Lit_Chars val:'\ttest -h a/b-2\n' span_id:353) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge should not have F/D conflicts (recursive)' span_id:360))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tgit checkout -b foo test2 &&\n' span_id:366) (Token id: Id.Lit_Chars val: '\tgit merge -s recursive baseline^0 &&\n' span_id: 367 ) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/d\n' span_id:368) ) } ) (C {(test_expect_success)} {(SYMLINKS)} {(SQ (Token id:Id.Lit_Chars val:'a/b-2 was resolved as symlink' span_id:377))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:381) (Token id:Id.Lit_Chars val:'\ttest -h a/b-2\n' span_id:382) ) } ) (C {(test_done)}) ] )