(command.CommandList children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:test_description spids:[12]) op: Equal rhs: {(SQ <'merge: handle file mode'>)} spids: [12] ) ] spids: [12] ) (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'> ) } ) (command.FuncDef name: do_one_mode body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:strategy spids:[52]) op: Equal rhs: {($ VSub_Number '$1')} spids: [52] ) ] spids: [52] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:us spids:[56]) op: Equal rhs: {($ VSub_Number '$2')} spids: [56] ) ] spids: [56] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:them spids:[60]) op: Equal rhs: {($ VSub_Number '$3')} spids: [60] ) ] spids: [60] ) (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: [49] ) spids: [44 48] ) (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'> ) } ) (command.FuncDef name: do_both_modes body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:strategy spids:[171]) op: Equal rhs: {($ VSub_Number '$1')} spids: [171] ) ] spids: [171] ) (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: [168] ) spids: [163 167] ) (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'> ) } ) (command.FuncDef name: do_delete_modechange body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:strategy spids:[250]) op: Equal rhs: {($ VSub_Number '$1')} spids: [250] ) ] spids: [250] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:us spids:[254]) op: Equal rhs: {($ VSub_Number '$2')} spids: [254] ) ] spids: [254] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:them spids:[258]) op: Equal rhs: {($ VSub_Number '$3')} spids: [258] ) ] spids: [258] ) (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: [247] ) spids: [242 246] ) (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)}) ] )