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