(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git am handling submodules">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-submodule-update.sh)})
    (FuncDef
      name: am
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(git)} {(format-patch)} {(--stdout)} {(--ignore-submodules) (Lit_Other "=") (dirty)} 
                  {(DQ (..) ($ VSub_Number "$1"))}
                )
                (C {(git)} {(am)} {(-)})
              ]
              negated: False
            )
          ]
          spids: [27]
        )
      spids: [22 26]
    )
    (C {(test_submodule_switch)} {(DQ (am))})
    (FuncDef
      name: am_3way
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(git)} {(format-patch)} {(--stdout)} {(--ignore-submodules) (Lit_Other "=") (dirty)} 
                  {(DQ (..) ($ VSub_Number "$1"))}
                )
                (C {(git)} {(am)} {(--3way)} {(-)})
              ]
              negated: False
            )
          ]
          spids: [68]
        )
      spids: [63 67]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES)
          op: Equal
          rhs: {(1)}
          spids: [99]
        )
      ]
      spids: [99]
    )
    (C {(test_submodule_switch)} {(DQ (am_3way))})
    (C {(test_expect_success)} {(SQ <"setup diff.submodule">)} 
      {
        (SQ <"\n"> <"\ttest_commit one &&\n"> <"\tINITIAL=$(git rev-parse HEAD) &&\n"> <"\n"> 
          <"\tgit init submodule &&\n"> <"\t(\n"> <"\t\tcd submodule &&\n"> <"\t\ttest_commit two &&\n"> 
          <"\t\tgit rev-parse HEAD >../initial-submodule\n"> <"\t) &&\n"> <"\tgit submodule add ./submodule &&\n"> <"\tgit commit -m first &&\n"> <"\n"> <"\t(\n"> 
          <"\t\tcd submodule &&\n"> <"\t\ttest_commit three &&\n"> <"\t\tgit rev-parse HEAD >../first-submodule\n"> <"\t) &&\n"> 
          <"\tgit add submodule &&\n"> <"\tgit commit -m second &&\n"> <"\tSECOND=$(git rev-parse HEAD) &&\n"> <"\n"> <"\t(\n"> 
          <"\t\tcd submodule &&\n"> <"\t\tgit mv two.t four.t &&\n"> <"\t\tgit commit -m \"second submodule\" &&\n"> 
          <"\t\tgit rev-parse HEAD >../second-submodule\n"> <"\t) &&\n"> <"\ttest_commit four &&\n"> <"\tgit add submodule &&\n"> 
          <"\tgit commit --amend --no-edit &&\n"> <"\tTHIRD=$(git rev-parse HEAD) &&\n"> <"\tgit submodule update --init\n">
        )
      }
    )
    (FuncDef
      name: run_test
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:START_COMMIT)
                      op: Equal
                      rhs: {($ VSub_Number "$1")}
                      spids: [159]
                    )
                  ]
                  spids: [159]
                )
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:EXPECT)
                          op: Equal
                          rhs: {($ VSub_Number "$2")}
                          spids: [165]
                        )
                      ]
                      spids: [165]
                    )
                    (AndOr
                      children: [
                        (C {(test_might_fail)} {(git)} {(am)} {(--abort)})
                        (AndOr
                          children: [
                            (C {(git)} {(reset)} {(--hard)} {($ VSub_Name "$START_COMMIT")})
                            (AndOr
                              children: [
                                (C {(rm)} {(-f)} {(Lit_Other "*") (.patch)})
                                (AndOr
                                  children: [
                                    (C {(git)} {(format-patch)} {(-1)})
                                    (AndOr
                                      children: [
                                        (C {(git)} {(reset)} {(--hard)} 
                                          {($ VSub_Name "$START_COMMIT") (Lit_Other "^")}
                                        )
                                        (AndOr
                                          children: [
                                            (C {(git)} {(submodule)} {(update)})
                                            (AndOr
                                              children: [
                                                (C {(git)} {(am)} {(Lit_Other "*") (.patch)})
                                                (AndOr
                                                  children: [
                                                    (C {(git)} {(submodule)} {(update)})
                                                    (AndOr
                                                      children: [
                                                        (SimpleCommand
                                                          words: [
                                                            {(git)}
                                                            {(-C)}
                                                            {(submodule)}
                                                            {(rev-parse)}
                                                            {(HEAD)}
                                                          ]
                                                          redirects: [
                                                            (Redir
                                                              op_id: Redir_Great
                                                              fd: -1
                                                              arg_word: {(actual)}
                                                              spids: [270]
                                                            )
                                                          ]
                                                        )
                                                        (C {(test_cmp)} {($ VSub_Name "$EXPECT")} 
                                                          {(actual)}
                                                        )
                                                      ]
                                                      op_id: Op_DAmp
                                                    )
                                                  ]
                                                  op_id: Op_DAmp
                                                )
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [156]
        )
      spids: [152 155]
    )
    (C {(test_expect_success)} {(SQ <"diff.submodule unset">)} 
      {(SQ <"\n"> <"\ttest_unconfig diff.submodule &&\n"> <"\trun_test $SECOND first-submodule\n">)}
    )
    (C {(test_expect_success)} {(SQ <"diff.submodule unset with extra file">)} 
      {(SQ <"\n"> <"\ttest_unconfig diff.submodule &&\n"> <"\trun_test $THIRD second-submodule\n">)}
    )
    (C {(test_expect_success)} {(SQ <"diff.submodule=log">)} 
      {
        (SQ <"\n"> <"\ttest_config diff.submodule log &&\n"> <"\trun_test $SECOND first-submodule\n">)
      }
    )
    (C {(test_expect_success)} {(SQ <"diff.submodule=log with extra file">)} 
      {
        (SQ <"\n"> <"\ttest_config diff.submodule log &&\n"> <"\trun_test $THIRD second-submodule\n">)
      }
    )
    (C {(test_done)})
  ]
)