(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'Three way merge with read-tree -m\n'> <'\n'> 
                <'This test tries three-way merge with read-tree -m\n'> <'\n'> <'There is one ancestor (called O for Original) and two branches A\n'> 
                <'and B derived from it.  We want to do a 3-way merge between A and\n'> <'B, using O as the common ancestor.\n'> <'\n'> <'    merge A O B\n'> <'\n'> 
                <'Decisions are made by comparing contents of O, A and B pathname\n'> <'by pathname.  The result is determined by the following guiding\n'> <'principle:\n'> <'\n'> 
                <' - If only A does something to it and B does not touch it, take\n'> <'   whatever A does.\n'> <'\n'> <' - If only B does something to it and A does not touch it, take\n'> 
                <'   whatever B does.\n'> <'\n'> <' - If both A and B does something but in the same way, take\n'> <'   whatever they do.\n'> 
                <'\n'> <' - If A and B does something but different things, we need a\n'> <'   3-way merge:\n'> <'\n'> 
                <'   - We cannot do anything about the following cases:\n'> <'\n'> <'     * O does not have it.  A and B both must be adding to the\n'> 
                <'       same path independently.\n'> <'\n'> <'     * A deletes it.  B must be modifying.\n'> <'\n'> 
                <'   - Otherwise, A and B are modifying.  Run 3-way merge.\n'> <'\n'> <'First, the case matrix.\n'> <'\n'> <' - Vertical axis is for A'>
              ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) 
              (SQ <'s actions.\n'> <' - Horizontal axis is for B'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) 
              (SQ <'s actions.\n'> <'\n'> 
                <'.----------------------------------------------------------------.\n'> <'| A        B | No Action  |   Delete   |   Modify   |    Add     |\n'> 
                <'|------------+------------+------------+------------+------------|\n'> <'| No Action  |            |            |            |            |\n'> 
                <'|            | select O   | delete     | select B   | select B   |\n'> <'|            |            |            |            |            |\n'> 
                <'|------------+------------+------------+------------+------------|\n'> <'| Delete     |            |            | ********** |    can     |\n'> 
                <'|            | delete     | delete     | merge      |    not     |\n'> <'|            |            |            |            |  happen    |\n'> 
                <'|------------+------------+------------+------------+------------|\n'> <'| Modify     |            | ********** | ?????????? |    can     |\n'> 
                <'|            | select A   | merge      | select A=B |    not     |\n'> <'|            |            |            | merge      |  happen    |\n'> 
                <'|------------+------------+------------+------------+------------|\n'> <'| Add        |            |    can     |    can     | ?????????? |\n'> 
                <'|            | select A   |    not     |    not     | select A=B |\n'> <'|            |            |  happen    |  happen    | merge      |\n'> 
                <'.----------------------------------------------------------------.\n'> <'\n'> <'In addition:\n'> <'\n'> 
                <' SS: a special case of MM, where A and B makes the same modification.\n'> <' LL: a special case of AA, where A and B creates the same file.\n'> 
                <' TT: a special case of MM, where A and B makes mergeable changes.\n'> <' DF: a special case, where A makes a directory and B makes a file.\n'> <'\n'>
              )
            }
          spids: [13]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/lib-read-tree.sh'>})
    (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/lib-read-tree-m-3way.sh'>})
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>}
              here_end_span_id: 175
              stdin_parts: [
                <'100644 X 2\tAA\n'>
                <'100644 X 3\tAA\n'>
                <'100644 X 0\tAN\n'>
                <'100644 X 1\tDD\n'>
                <'100644 X 3\tDF\n'>
                <'100644 X 2\tDF/DF\n'>
                <'100644 X 1\tDM\n'>
                <'100644 X 3\tDM\n'>
                <'100644 X 1\tDN\n'>
                <'100644 X 3\tDN\n'>
                <'100644 X 0\tLL\n'>
                <'100644 X 1\tMD\n'>
                <'100644 X 2\tMD\n'>
                <'100644 X 1\tMM\n'>
                <'100644 X 2\tMM\n'>
                <'100644 X 3\tMM\n'>
                <'100644 X 0\tMN\n'>
                <'100644 X 0\tNA\n'>
                <'100644 X 1\tND\n'>
                <'100644 X 2\tND\n'>
                <'100644 X 0\tNM\n'>
                <'100644 X 0\tNN\n'>
                <'100644 X 0\tSS\n'>
                <'100644 X 1\tTT\n'>
                <'100644 X 2\tTT\n'>
                <'100644 X 3\tTT\n'>
                <'100644 X 2\tZ/AA\n'>
                <'100644 X 3\tZ/AA\n'>
                <'100644 X 0\tZ/AN\n'>
                <'100644 X 1\tZ/DD\n'>
                <'100644 X 1\tZ/DM\n'>
                <'100644 X 3\tZ/DM\n'>
                <'100644 X 1\tZ/DN\n'>
                <'100644 X 3\tZ/DN\n'>
                <'100644 X 1\tZ/MD\n'>
                <'100644 X 2\tZ/MD\n'>
                <'100644 X 1\tZ/MM\n'>
                <'100644 X 2\tZ/MM\n'>
                <'100644 X 3\tZ/MM\n'>
                <'100644 X 0\tZ/MN\n'>
                <'100644 X 0\tZ/NA\n'>
                <'100644 X 1\tZ/ND\n'>
                <'100644 X 2\tZ/ND\n'>
                <'100644 X 0\tZ/NM\n'>
                <'100644 X 0\tZ/NN\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.ShFunction
      name: check_result
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Pipeline
                  children: [
                    (C {<git>} {<ls-files>} {<--stage>})
                    (command.Simple
                      words: [
                        {<sed>}
                        {<-e>}
                        {(SQ <'s/ '>) (DQ ($ Id.VSub_DollarName '$_x40')) (SQ <' / X /'>)}
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<current>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  negated: F
                )
                (C {<test_cmp>} {<expected>} {<current>})
              ]
            )
          ]
        )
    )
    (C {<test_expect_success>} {(SQ <'3-way merge with git read-tree -m, empty cache'>)} 
      {
        (DQ <'rm -fr [NDMALTS][NDMALTSF] Z &&\n'> <'     rm .git/index &&\n'> 
          <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> 
          ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'3-way merge with git read-tree -m, match H'>)} 
      {
        (DQ <'rm -fr [NDMALTS][NDMALTSF] Z &&\n'> <'     rm .git/index &&\n'> 
          <'     read_tree_must_succeed '> ($ Id.VSub_DollarName '$tree_A') <' &&\n'> <'     git checkout-index -f -u -a &&\n'> 
          <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> 
          ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (command.Simple
      words: [{<Id.Lit_Colon ':'>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: 
                {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <ND_OF_CASE_TABLE>}
              here_end_span_id: 345
              stdin_parts: [
                <'\n'>
                <'We have so far tested only empty index and clean-and-matching-A index\n'>
                <'case which are trivial.  Make sure index requirements are also\n'>
                <'checked.\n'>
                <'\n'>
                <'"git read-tree -m O A B"\n'>
                <'\n'>
                <'     O       A       B         result      index requirements\n'>
                <'-------------------------------------------------------------------\n'>
                <'  1  missing missing missing   -           must not exist.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  2  missing missing exists    take B*     must match B, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  3  missing exists  missing   take A*     must match A, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  4  missing exists  A!=B      no merge    must match A and be\n'>
                <'                                           up-to-date, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  5  missing exists  A==B      take A      must match A, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  6  exists  missing missing   remove      must not exist.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  7  exists  missing O!=B      no merge    must not exist.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  8  exists  missing O==B      remove      must not exist.\n'>
                <' ------------------------------------------------------------------\n'>
                <'  9  exists  O!=A    missing   no merge    must match A and be\n'>
                <'                                           up-to-date, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <' 10  exists  O==A    missing   no merge    must match A\n'>
                <' ------------------------------------------------------------------\n'>
                <' 11  exists  O!=A    O!=B      no merge    must match A and be\n'>
                <'                     A!=B                  up-to-date, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <' 12  exists  O!=A    O!=B      take A      must match A, if exists.\n'>
                <'                     A==B\n'>
                <' ------------------------------------------------------------------\n'>
                <' 13  exists  O!=A    O==B      take A      must match A, if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <' 14  exists  O==A    O!=B      take B      if exists, must either (1)\n'>
                <'                                           match A and be up-to-date,\n'>
                <'                                           or (2) match B.\n'>
                <' ------------------------------------------------------------------\n'>
                <' 15  exists  O==A    O==B      take B      must match A if exists.\n'>
                <' ------------------------------------------------------------------\n'>
                <' 16  exists  O==A    O==B      barf        must match A if exists.\n'>
                <'     *multi* in one  in another\n'>
                <'-------------------------------------------------------------------\n'>
                <'\n'>
                <'Note: we need to be careful in case 2 and 3.  The tree A may contain\n'>
                <'DF (file) when tree B require DF to be a directory by having DF/DF\n'>
                <'(file).\n'>
                <'\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'1 - must not have an entry not in A.'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index XX &&\n'> <'     echo XX >XX &&\n'> 
          <'     git update-index --add XX &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') 
          <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'2 - must match B in !O && !A && B case.'>)} 
      {
        (DQ <'rm -f .git/index NA &&\n'> <'     cp .orig-B/NA NA &&\n'> 
          <'     git update-index --add NA &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B')
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'2 - matching B alone is OK in !O && !A && B case.'>)} 
      {
        (DQ <'rm -f .git/index NA &&\n'> <'     cp .orig-B/NA NA &&\n'> 
          <'     git update-index --add NA &&\n'> <'     echo extra >>NA &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B')
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'3 - must match A in !O && A && !B case.'>)} 
      {
        (DQ <'rm -f .git/index AN &&\n'> <'     cp .orig-A/AN AN &&\n'> 
          <'     git update-index --add AN &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'3 - matching A alone is OK in !O && A && !B case.'>)} 
      {
        (DQ <'rm -f .git/index AN &&\n'> <'     cp .orig-A/AN AN &&\n'> 
          <'     git update-index --add AN &&\n'> <'     echo extra >>AN &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B')
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'3 (fail) - must match A in !O && A && !B case.'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index AN &&\n'> <'     cp .orig-A/AN AN &&\n'> 
          <'     echo extra >>AN &&\n'> <'     git update-index --add AN &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'4 - must match and be up-to-date in !O && A && B && A!=B case.'>)} 
      {
        (DQ <'rm -f .git/index AA &&\n'> <'     cp .orig-A/AA AA &&\n'> 
          <'     git update-index --add AA &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index AA &&\n'> <'     cp .orig-A/AA AA &&\n'> 
          <'     git update-index --add AA &&\n'> <'     echo extra >>AA &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'4 (fail) - must match and be up-to-date in !O && A && B && A!=B case.'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index AA &&\n'> <'     cp .orig-A/AA AA &&\n'> 
          <'     echo extra >>AA &&\n'> <'     git update-index --add AA &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'5 - must match in !O && A && B && A==B case.'>)} 
      {
        (DQ <'rm -f .git/index LL &&\n'> <'     cp .orig-A/LL LL &&\n'> 
          <'     git update-index --add LL &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'5 - must match in !O && A && B && A==B case.'>)} 
      {
        (DQ <'rm -f .git/index LL &&\n'> <'     cp .orig-A/LL LL &&\n'> 
          <'     git update-index --add LL &&\n'> <'     echo extra >>LL &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'5 (fail) - must match A in !O && A && B && A==B case.'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index LL &&\n'> <'     cp .orig-A/LL LL &&\n'> 
          <'     echo extra >>LL &&\n'> <'     git update-index --add LL &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'6 - must not exist in O && !A && !B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index DD &&\n'> <'     echo DD >DD &&\n'> 
          <'     git update-index --add DD &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') 
          <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'7 - must not exist in O && !A && B && O!=B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index DM &&\n'> <'     cp .orig-B/DM DM &&\n'> 
          <'     git update-index --add DM &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') 
          <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'8 - must not exist in O && !A && B && O==B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index DN &&\n'> <'     cp .orig-B/DN DN &&\n'> 
          <'     git update-index --add DN &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') 
          <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'9 - must match and be up-to-date in O && A && !B && O!=A case'>)} 
      {
        (DQ <'rm -f .git/index MD &&\n'> <'     cp .orig-A/MD MD &&\n'> 
          <'     git update-index --add MD &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index MD &&\n'> <'     cp .orig-A/MD MD &&\n'> 
          <'     git update-index --add MD &&\n'> <'     echo extra >>MD &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'9 (fail) - must match and be up-to-date in O && A && !B && O!=A case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index MD &&\n'> <'     cp .orig-A/MD MD &&\n'> 
          <'     echo extra >>MD &&\n'> <'     git update-index --add MD &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'10 - must match and be up-to-date in O && A && !B && O==A case'>)} 
      {
        (DQ <'rm -f .git/index ND &&\n'> <'     cp .orig-A/ND ND &&\n'> 
          <'     git update-index --add ND &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'10 (fail) - must match and be up-to-date in O && A && !B && O==A case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index ND &&\n'> <'     cp .orig-A/ND ND &&\n'> 
          <'     git update-index --add ND &&\n'> <'     echo extra >>ND &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'10 (fail) - must match and be up-to-date in O && A && !B && O==A case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index ND &&\n'> <'     cp .orig-A/ND ND &&\n'> 
          <'     echo extra >>ND &&\n'> <'     git update-index --add ND &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'11 - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case'>)} 
      {
        (DQ <'rm -f .git/index MM &&\n'> <'     cp .orig-A/MM MM &&\n'> 
          <'     git update-index --add MM &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index MM &&\n'> <'     cp .orig-A/MM MM &&\n'> 
          <'     git update-index --add MM &&\n'> <'     echo extra >>MM &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'11 (fail) - must match and be up-to-date in O && A && B && O!=A && O!=B && A!=B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index MM &&\n'> <'     cp .orig-A/MM MM &&\n'> 
          <'     echo extra >>MM &&\n'> <'     git update-index --add MM &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'12 - must match A in O && A && B && O!=A && A==B case'>)} 
      {
        (DQ <'rm -f .git/index SS &&\n'> <'     cp .orig-A/SS SS &&\n'> 
          <'     git update-index --add SS &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'12 - must match A in O && A && B && O!=A && A==B case'>)} 
      {
        (DQ <'rm -f .git/index SS &&\n'> <'     cp .orig-A/SS SS &&\n'> 
          <'     git update-index --add SS &&\n'> <'     echo extra >>SS &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'12 (fail) - must match A in O && A && B && O!=A && A==B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index SS &&\n'> <'     cp .orig-A/SS SS &&\n'> 
          <'     echo extra >>SS &&\n'> <'     git update-index --add SS &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'13 - must match A in O && A && B && O!=A && O==B case'>)} 
      {
        (DQ <'rm -f .git/index MN &&\n'> <'     cp .orig-A/MN MN &&\n'> 
          <'     git update-index --add MN &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'13 - must match A in O && A && B && O!=A && O==B case'>)} 
      {
        (DQ <'rm -f .git/index MN &&\n'> <'     cp .orig-A/MN MN &&\n'> 
          <'     git update-index --add MN &&\n'> <'     echo extra >>MN &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'14 - must match and be up-to-date in O && A && B && O==A && O!=B case'>)} 
      {
        (DQ <'rm -f .git/index NM &&\n'> <'     cp .orig-A/NM NM &&\n'> 
          <'     git update-index --add NM &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'14 - may match B in O && A && B && O==A && O!=B case'>)} 
      {
        (DQ <'rm -f .git/index NM &&\n'> <'     cp .orig-B/NM NM &&\n'> 
          <'     git update-index --add NM &&\n'> <'     echo extra >>NM &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index NM &&\n'> <'     cp .orig-A/NM NM &&\n'> 
          <'     git update-index --add NM &&\n'> <'     echo extra >>NM &&\n'> <'     read_tree_must_fail -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'14 (fail) - must match and be up-to-date in O && A && B && O==A && O!=B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index NM &&\n'> <'     cp .orig-A/NM NM &&\n'> 
          <'     echo extra >>NM &&\n'> <'     git update-index --add NM &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'15 - must match A in O && A && B && O==A && O==B case'>)} 
      {
        (DQ <'rm -f .git/index NN &&\n'> <'     cp .orig-A/NN NN &&\n'> 
          <'     git update-index --add NN &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'15 - must match A in O && A && B && O==A && O==B case'>)} 
      {
        (DQ <'rm -f .git/index NN &&\n'> <'     cp .orig-A/NN NN &&\n'> 
          <'     git update-index --add NN &&\n'> <'     echo extra >>NN &&\n'> <'     read_tree_must_succeed -m '> ($ Id.VSub_DollarName '$tree_O') <' '> 
          ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <' &&\n'> <'     check_result'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'15 (fail) - must match A in O && A && B && O==A && O==B case'>)} 
      {
        (DQ <'\n'> <'     rm -f .git/index NN &&\n'> <'     cp .orig-A/NN NN &&\n'> 
          <'     echo extra >>NN &&\n'> <'     git update-index --add NN &&\n'> <'     read_tree_must_fail -m '> 
          ($ Id.VSub_DollarName '$tree_O') <' '> ($ Id.VSub_DollarName '$tree_A') <' '> ($ Id.VSub_DollarName '$tree_B') <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'16 - A matches in one and B matches in another.'>)} 
      {
        (SQ <'rm -f .git/index F16 &&\n'> <'    echo F16 >F16 &&\n'> 
          <'    git update-index --add F16 &&\n'> <'    tree0=$(git write-tree) &&\n'> <'    echo E16 >F16 &&\n'> <'    git update-index F16 &&\n'> 
          <'    tree1=$(git write-tree) &&\n'> <'    read_tree_must_succeed -m $tree0 $tree1 $tree1 $tree0 &&\n'> <'    git ls-files --stage'>
        )
      }
    )
    (C {<test_done>})
  ]
)