(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          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">
              ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
              (SQ <"s actions.\n"> <" - Horizontal axis is for B">) (EscapedLiteralPart token:<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]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-read-tree.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-read-tree-m-3way.sh)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(expected)} spids:[123])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("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_expansion: False
          here_end: EOF
          was_filled: True
          spids: [126]
        )
      ]
    )
    (FuncDef
      name: check_result
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(git)} {(ls-files)} {(--stage)})
                    (SimpleCommand
                      words: [{(sed)} {(-e)} {(SQ <"s/ ">) (DQ ($ VSub_Name "$_x40")) (SQ <" / X /">)}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(current)} spids:[161])]
                    )
                  ]
                  negated: False
                )
                (C {(test_cmp)} {(expected)} {(current)})
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [136]
        )
      spids: [131 135]
    )
    (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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_A") (" &&\n") ("     git checkout-index -f -u -a &&\n") 
          ("     read_tree_must_succeed -m ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$tree_B") (" &&\n") 
          ("     check_result")
        )
      }
    )
    (SimpleCommand
      words: [{(Lit_Other ":")}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {("\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_expansion: False
          here_end: END_OF_CASE_TABLE
          was_filled: True
          spids: [242]
        )
      ]
    )
    (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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") ($ VSub_Name "$tree_A") (" ") 
          ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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 ") ($ VSub_Name "$tree_O") (" ") 
          ($ VSub_Name "$tree_A") (" ") ($ VSub_Name "$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)})
  ]
)