(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)})
  ]
)