(command.CommandList children: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:test_description) op: Equal rhs: {(SQ <'merge: handle file mode'>)} ) ] ) (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) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:us) op:Equal rhs:{($ VSub_Number '$2')})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:them) op: Equal rhs: {($ VSub_Number '$3')} ) ] ) (C {(test_expect_success)} { (DQ ('resolve single mode change (') ($ VSub_DollarName '$strategy') (', ') ($ VSub_DollarName '$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_DollarName '$strategy') (', ') ($ VSub_DollarName '$us') (')') ) } {(SQ <'\n'> <'\t\ttest -x file1\n'> <'\t'>)} ) ] ) ) (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) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (C {(test_expect_success)} {(DQ ('detect conflict on double mode change (') ($ VSub_DollarName '$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_DollarName '$strategy') (')'))} {(SQ <'\n'> <'\t\ttest -x file2\n'> <'\t'>)} ) ] ) ) (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) op: Equal rhs: {($ VSub_Number '$1')} ) ] ) (command.Assignment keyword: Assign_None pairs: [(assign_pair lhs:(lhs_expr.LhsName name:us) op:Equal rhs:{($ VSub_Number '$2')})] ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:them) op: Equal rhs: {($ VSub_Number '$3')} ) ] ) (C {(test_expect_success)} { (DQ ('detect delete/modechange conflict (') ($ VSub_DollarName '$strategy') (', ') ($ VSub_DollarName '$us') (')') ) } { (SQ <'\n'> <'\t\tgit reset --hard &&\n'> <'\t\tgit checkout $us &&\n'> <'\t\ttest_must_fail git merge -s $strategy $them\n'> <'\t'> ) } ) ] ) ) (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)}) ] )