(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"merge: handle file mode">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"set up mode change in one branch">)} { (SQ <"\n"> <"\t: >file1 &&\n"> <"\tgit add file1 &&\n"> <"\tgit commit -m initial &&\n"> <"\tgit checkout -b a1 master &&\n"> <"\t: >dummy &&\n"> <"\tgit add dummy &&\n"> <"\tgit commit -m a &&\n"> <"\tgit checkout -b b1 master &&\n"> <"\ttest_chmod +x file1 &&\n"> <"\tgit add file1 &&\n"> <"\tgit commit -m b1\n"> ) } ) (FuncDef name: do_one_mode body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:strategy) op: Equal rhs: {($ VSub_Number "$1")} spids: [44] ) ] spids: [44] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:us) op: Equal rhs: {($ VSub_Number "$2")} spids: [48] ) ] spids: [48] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:them) op: Equal rhs: {($ VSub_Number "$3")} spids: [52] ) ] spids: [52] ) (C {(test_expect_success)} { (DQ ("resolve single mode change (") ($ VSub_Name "$strategy") (", ") ($ VSub_Name "$us") (")") ) } { (SQ <"\n"> <"\t\tgit checkout -f $us &&\n"> <"\t\tgit merge -s $strategy $them &&\n"> <"\t\tgit ls-files -s file1 | grep ^100755\n"> <"\t"> ) } ) (C {(test_expect_success)} {(FILEMODE)} { (DQ ("verify executable bit on file (") ($ VSub_Name "$strategy") (", ") ($ VSub_Name "$us") (")") ) } {(SQ <"\n"> <"\t\ttest -x file1\n"> <"\t">)} ) ] spids: [41] ) spids: [36 40] ) (C {(do_one_mode)} {(recursive)} {(a1)} {(b1)}) (C {(do_one_mode)} {(recursive)} {(b1)} {(a1)}) (C {(do_one_mode)} {(resolve)} {(a1)} {(b1)}) (C {(do_one_mode)} {(resolve)} {(b1)} {(a1)}) (C {(test_expect_success)} {(SQ <"set up mode change in both branches">)} { (SQ <"\n"> <"\tgit reset --hard HEAD &&\n"> <"\tgit checkout -b a2 master &&\n"> <"\t: >file2 &&\n"> <"\tH=$(git hash-object file2) &&\n"> <"\ttest_chmod +x file2 &&\n"> <"\tgit commit -m a2 &&\n"> <"\tgit checkout -b b2 master &&\n"> <"\t: >file2 &&\n"> <"\tgit add file2 &&\n"> <"\tgit commit -m b2 &&\n"> <"\t{\n"> <"\t\techo \"100755 $H 2\tfile2\"\n"> <"\t\techo \"100644 $H 3\tfile2\"\n"> <"\t} >expect\n"> ) } ) (FuncDef name: do_both_modes body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:strategy) op: Equal rhs: {($ VSub_Number "$1")} spids: [163] ) ] spids: [163] ) (C {(test_expect_success)} {(DQ ("detect conflict on double mode change (") ($ VSub_Name "$strategy") (")"))} { (SQ <"\n"> <"\t\tgit reset --hard &&\n"> <"\t\tgit checkout -f a2 &&\n"> <"\t\ttest_must_fail git merge -s $strategy b2 &&\n"> <"\t\tgit ls-files -u >actual &&\n"> <"\t\ttest_cmp actual expect &&\n"> <"\t\tgit ls-files -s file2 | grep ^100755\n"> <"\t"> ) } ) (C {(test_expect_success)} {(FILEMODE)} {(DQ ("verify executable bit on file (") ($ VSub_Name "$strategy") (")"))} {(SQ <"\n"> <"\t\ttest -x file2\n"> <"\t">)} ) ] spids: [160] ) spids: [155 159] ) (C {(do_both_modes)} {(recursive)}) (C {(do_both_modes)} {(resolve)}) (C {(test_expect_success)} {(SQ <"set up delete/modechange scenario">)} { (SQ <"\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout -b deletion master &&\n"> <"\tgit rm file1 &&\n"> <"\tgit commit -m deletion\n"> ) } ) (FuncDef name: do_delete_modechange body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:strategy) op: Equal rhs: {($ VSub_Number "$1")} spids: [242] ) ] spids: [242] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:us) op: Equal rhs: {($ VSub_Number "$2")} spids: [246] ) ] spids: [246] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:them) op: Equal rhs: {($ VSub_Number "$3")} spids: [250] ) ] spids: [250] ) (C {(test_expect_success)} { (DQ ("detect delete/modechange conflict (") ($ VSub_Name "$strategy") (", ") ($ VSub_Name "$us") (")") ) } { (SQ <"\n"> <"\t\tgit reset --hard &&\n"> <"\t\tgit checkout $us &&\n"> <"\t\ttest_must_fail git merge -s $strategy $them\n"> <"\t"> ) } ) ] spids: [239] ) spids: [234 238] ) (C {(do_delete_modechange)} {(recursive)} {(b1)} {(deletion)}) (C {(do_delete_modechange)} {(recursive)} {(deletion)} {(b1)}) (C {(do_delete_modechange)} {(resolve)} {(b1)} {(deletion)}) (C {(do_delete_modechange)} {(resolve)} {(deletion)} {(b1)}) (C {(test_done)}) ] )