(command.CommandList
  children: [
    (command.ShFunction
      name: create_lib_submodule_repo
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(git)} {(init)} {(submodule_update_repo)})
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                            Id.Op_DAmp
                          ]
                          children: [
                            (C {(cd)} {(submodule_update_repo)})
                            (command.Simple
                              words: [{(echo)} {(DQ (expect))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:132)
                                  fd: -1
                                  arg_word: {(.gitignore)}
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(echo)} {(DQ (actual))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:144)
                                  fd: -1
                                  arg_word: {(.gitignore)}
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(echo)} {(DQ (x))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:156)
                                  fd: -1
                                  arg_word: {(file1)}
                                )
                              ]
                            )
                            (command.Simple
                              words: [{(echo)} {(DQ (y))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:168)
                                  fd: -1
                                  arg_word: {(file2)}
                                )
                              ]
                            )
                            (C {(git)} {(add)} {(.gitignore)} {(file1)} {(file2)})
                            (C {(git)} {(commit)} {(-m)} {(DQ (Base))})
                            (C {(git)} {(branch)} {(DQ (no_submodule))})
                            (C {(git)} {(checkout)} {(-b)} {(DQ (add_sub1))})
                            (C {(git)} {(submodule)} {(add)} {(./.)} {(sub1)})
                            (C {(git)} {(config)} {(-f)} {(.gitmodules)} {(submodule.sub1.ignore)} {(all)})
                            (C {(git)} {(config)} {(submodule.sub1.ignore)} {(all)})
                            (C {(git)} {(add)} {(.gitmodules)})
                            (C {(git)} {(commit)} {(-m)} {(DQ ('Add sub1'))})
                            (C {(git)} {(checkout)} {(-b)} {(remove_sub1)})
                            (C {(git)} {(revert)} {(HEAD)})
                            (C {(git)} {(checkout)} {(-b)} {(DQ (modify_sub1))} {(DQ (add_sub1))})
                            (C {(git)} {(submodule)} {(update)})
                            (command.Subshell
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.AndOr
                                      ops: [
                                        Id.Op_DAmp
                                        Id.Op_DAmp
                                        Id.Op_DAmp
                                        Id.Op_DAmp
                                        Id.Op_DAmp
                                        Id.Op_DAmp
                                        Id.Op_DAmp
                                      ]
                                      children: [
                                        (C {(cd)} {(sub1)})
                                        (C {(git)} {(fetch)})
                                        (C {(git)} {(checkout)} {(-b)} {(DQ (modifications))})
                                        (command.Simple
                                          words: [{(echo)} {(DQ (z))}]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_Great val:'>' span_id:369)
                                              fd: -1
                                              arg_word: {(file2)}
                                            )
                                          ]
                                        )
                                        (command.Simple
                                          words: [{(echo)} {(DQ (x))}]
                                          redirects: [
                                            (redir.Redir
                                              op: (Token id:Id.Redir_Great val:'>' span_id:381)
                                              fd: -1
                                              arg_word: {(file3)}
                                            )
                                          ]
                                        )
                                        (C {(git)} {(add)} {(file2)} {(file3)})
                                        (C {(git)} {(commit)} {(-m)} 
                                          {(DQ ('modified file2 and added file3'))}
                                        )
                                        (C {(git)} {(push)} {(origin)} {(modifications)})
                                      ]
                                    )
                                  ]
                                )
                            )
                            (C {(git)} {(add)} {(sub1)})
                            (C {(git)} {(commit)} {(-m)} {(DQ ('Modify sub1'))})
                            (C {(git)} {(checkout)} {(-b)} {(DQ (replace_sub1_with_directory))} 
                              {(DQ (add_sub1))}
                            )
                            (C {(git)} {(submodule)} {(update)})
                            (command.Subshell
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(cd)} {(sub1)})
                                        (C {(git)} {(checkout)} {(modifications)})
                                      ]
                                    )
                                  ]
                                )
                            )
                            (C {(git)} {(rm)} {(--cached)} {(sub1)})
                            (C {(rm)} {(sub1/.git) (Id.Lit_Star '*')})
                            (C {(git)} {(config)} {(-f)} {(.gitmodules)} {(--remove-section)} 
                              {(DQ (submodule.sub1))}
                            )
                            (C {(git)} {(add)} {(.gitmodules)} {(sub1/) (Id.Lit_Star '*')})
                            (C {(git)} {(commit)} {(-m)} {(DQ ('Replace sub1 with directory'))})
                            (C {(git)} {(checkout)} {(-b)} {(replace_directory_with_sub1)})
                            (C {(git)} {(revert)} {(HEAD)})
                            (C {(git)} {(checkout)} {(-b)} {(DQ (replace_sub1_with_file))} 
                              {(DQ (add_sub1))}
                            )
                            (C {(git)} {(rm)} {(sub1)})
                            (command.Simple
                              words: [{(echo)} {(DQ (content))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:610)
                                  fd: -1
                                  arg_word: {(sub1)}
                                )
                              ]
                            )
                            (C {(git)} {(add)} {(sub1)})
                            (C {(git)} {(commit)} {(-m)} {(DQ ('Replace sub1 with file'))})
                            (C {(git)} {(checkout)} {(-b)} {(replace_file_with_sub1)})
                            (C {(git)} {(revert)} {(HEAD)})
                            (C {(git)} {(checkout)} {(-b)} {(DQ (invalid_sub1))} {(DQ (add_sub1))})
                            (C {(git)} {(update-index)} {(--cacheinfo)} {(160000)} 
                              {(0123456789012345678901234567890123456789)} {(sub1)}
                            )
                            (C {(git)} {(commit)} {(-m)} {(DQ ('Invalid sub1 commit'))})
                            (C {(git)} {(checkout)} {(-b)} {(valid_sub1)})
                            (C {(git)} {(revert)} {(HEAD)})
                            (C {(git)} {(checkout)} {(master)})
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: replace_gitfile_with_git_dir
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {(cd)} {(DQ ($ Id.VSub_Number '$1'))})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:git_dir)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:761)
                                      command_list: 
                                        (command.CommandList
                                          children: [(C {(git)} {(rev-parse)} {(--git-dir)})]
                                        )
                                    )
                                  )
                                }
                              spids: [759]
                            )
                          ]
                        )
                        (C {(rm)} {(-f)} {(.git)})
                        (C {(cp)} {(-R)} {(DQ ($ Id.VSub_DollarName '$git_dir'))} {(.git)})
                        (command.Simple
                          words: [{(git)} {(config)} {(--unset)} {(core.worktree)}]
                          more_env: [(env_pair name:GIT_WORK_TREE val:{(.)} spids:[795])]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: test_git_directory_is_unchanged
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(DQ (.git/modules/) ($ Id.VSub_Number '$1'))})
                            (C {(test)} 
                              {
                                (DQ 
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:861)
                                    command_list: 
                                      (command.CommandList
                                        children: [(C {(git)} {(config)} {(core.worktree)})]
                                      )
                                  )
                                )
                              } {(Id.Lit_Equals '=')} {(DQ (../../../) ($ Id.VSub_Number '$1'))}
                            )
                            (C {(git)} {(config)} {(--unset)} {(core.worktree)})
                          ]
                        )
                      ]
                    )
                )
                (C {(diff)} {(-r)} {(DQ (.git/modules/) ($ Id.VSub_Number '$1'))} 
                  {(DQ ($ Id.VSub_Number '$1') (/.git))}
                )
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(DQ (.git/modules/) ($ Id.VSub_Number '$1'))})
                            (C {(git)} {(config)} {(core.worktree)} 
                              {(DQ (../../../) ($ Id.VSub_Number '$1'))}
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: prolog
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(test)} {(-d)} {(submodule_update_repo)})
                            (C {(create_lib_submodule_repo)})
                          ]
                        )
                      ]
                    )
                )
                (C {(test_config_global)} {(diff.ignoreSubmodules)} {(all)})
                (C {(test_config)} {(diff.ignoreSubmodules)} {(all)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: reset_work_tree_to
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(rm)} {(-rf)} {(submodule_update)})
                (C {(git)} {(clone)} {(submodule_update_repo)} {(submodule_update)})
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(submodule_update)})
                            (C {(rm)} {(-rf)} {(sub1)})
                            (C {(git)} {(checkout)} {(-f)} {(DQ ($ Id.VSub_Number '$1'))})
                            (command.Simple
                              words: [{(git)} {(status)} {(-u)} {(-s)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:1080)
                                  fd: -1
                                  arg_word: {(actual)}
                                )
                              ]
                            )
                            (C {(test_must_be_empty)} {(actual)})
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:sha1)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 1094
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(git)} {(rev-parse)} {(--revs-only)} 
                                                {(HEAD) (Id.Lit_Other ':') (sub1)}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [1093]
                                )
                              ]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.AndOr
                                      ops: [Id.Op_DAmp]
                                      children: [
                                        (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$sha1'))})
                                        (C {(test)} 
                                          {
                                            (command_sub
                                              left_token: 
                                                (Token
                                                  id: Id.Left_DollarParen
                                                  val: '$('
                                                  span_id: 1124
                                                )
                                              command_list: 
                                                (command.CommandList
                                                  children: [
                                                    (command.AndOr
                                                      ops: [Id.Op_DAmp]
                                                      children: [
                                                        (C {(cd)} {(DQ (sub1))})
                                                        (C {(git)} {(rev-parse)} {(--verify)} 
                                                          {
                                                            (DQ ($ Id.VSub_DollarName '$sha1') 
                                                              ('^{commit}')
                                                            )
                                                          }
                                                        )
                                                      ]
                                                    )
                                                  ]
                                                )
                                            )
                                          }
                                        )
                                      ]
                                    )
                                  ]
                                  action: [
                                    (C {(git)} {(submodule)} {(update)} {(--init)} {(--recursive)} 
                                      {(DQ (sub1))}
                                    )
                                  ]
                                  spids: [1109 1146]
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_superproject_content
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(git)} {(diff-index)} {(--cached)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1199)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(test_must_be_empty)} {(actual)})
                (command.Simple
                  words: [{(git)} {(diff-files)} {(--ignore-submodules)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:1218)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(test_must_be_empty)} {(actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_submodule_content
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (C {(test)} {($ Id.VSub_Pound '$#')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(2)})
                      ]
                      action: [
                        (C {(echo)} {(DQ ('test_submodule_content needs two arguments'))})
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1267)
                          arg_word: {(1)}
                        )
                      ]
                      spids: [1245 1257]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:submodule)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [1277]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:commit)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$2'))}
                      spids: [1285]
                    )
                  ]
                )
                (C {(test)} {(-d)} {(DQ ($ Id.VSub_DollarName '$submodule')) (/)})
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.Pipeline
                              children: [
                                (C {(test)} {(-f)} {(DQ ($ Id.VSub_DollarName '$submodule')) (/.git)})
                              ]
                              negated: T
                            )
                            (command.Pipeline
                              children: [
                                (C {(test)} {(-d)} {(DQ ($ Id.VSub_DollarName '$submodule')) (/.git)})
                              ]
                              negated: T
                            )
                          ]
                        )
                      ]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ('Submodule ') ($ Id.VSub_DollarName '$submodule') 
                              (' is not populated')
                            )
                          }
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1344)
                          arg_word: {(1)}
                        )
                      ]
                      spids: [1305 1332]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:sha1)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1355)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {(git)} {(rev-parse)} {(--verify)} 
                                    {
                                      (DQ ($ Id.VSub_DollarName '$commit') (':') 
                                        ($ Id.VSub_DollarName '$submodule')
                                      )
                                    }
                                  )
                                ]
                              )
                          )
                        }
                      spids: [1354]
                    )
                  ]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$sha1'))})]
                      action: [
                        (C {(echo)} 
                          {
                            (DQ ("Couldn't retrieve SHA-1 of ") ($ Id.VSub_DollarName '$submodule') 
                              (' for ') ($ Id.VSub_DollarName '$commit')
                            )
                          }
                        )
                        (command.ControlFlow
                          token: (Token id:Id.ControlFlow_Return val:return span_id:1396)
                          arg_word: {(1)}
                        )
                      ]
                      spids: [1372 1383]
                    )
                  ]
                )
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(DQ ($ Id.VSub_DollarName '$submodule'))})
                            (command.Simple
                              words: [{(git)} {(status)} {(-u)} {(-s)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:1426)
                                  fd: -1
                                  arg_word: {(actual)}
                                )
                              ]
                            )
                            (C {(test_must_be_empty)} {(actual)})
                            (command.Simple
                              words: [{(git)} {(diff)} {(DQ ($ Id.VSub_DollarName '$sha1'))}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:1447)
                                  fd: -1
                                  arg_word: {(actual)}
                                )
                              ]
                            )
                            (C {(test_must_be_empty)} {(actual)})
                          ]
                        )
                      ]
                    )
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_submodule_switch
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:command)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [1526]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} 
                      {
                        (DQ 
                          ($ Id.VSub_DollarName '$KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES')
                        )
                      } {(Id.Lit_Equals '=')} {(1)}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ (failure))}
                          spids: [1560]
                        )
                      ]
                    )
                  ]
                  spids: [1540 1553]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ (success))}
                      spids: [1569]
                    )
                  ]
                )
              ]
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {(DQ ($ Id.VSub_DollarName '$command') (': added submodule creates empty directory'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1587) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1588) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to no_submodule &&\n' span_id:1589) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1590) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1591) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n'
                    span_id: 1592
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command add_sub1 &&\n' span_id:1593) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/add_sub1 &&\n'
                    span_id: 1594
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:1595) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 1596
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:1597) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1598) (Token id:Id.Lit_Chars val:'\t' span_id:1599)
                )
              }
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': added submodule leaves existing empty directory alone')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1616) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1617) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to no_submodule &&\n' span_id:1618) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1619) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1620) 
                  (Token id:Id.Lit_Chars val:'\t\t\tmkdir sub1 &&\n' span_id:1621) (Token id:Id.Lit_Chars val:'\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n' span_id:1622) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t$command add_sub1 &&\n'
                    span_id: 1623
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:1624) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_dir_is_empty sub1 &&\n'
                    span_id: 1625
                  ) (Token id:Id.Lit_Chars val:'\t\t\tgit submodule update --init --recursive &&\n' span_id:1626) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/add_sub1\n'
                    span_id: 1627
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1628) (Token id:Id.Lit_Chars val:'\t' span_id:1629)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (": added submodule doesn't remove untracked unignored file with same name")
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1645) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1646) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to no_submodule &&\n' span_id:1647) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1648) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1649) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n'
                    span_id: 1650
                  ) (Token id:Id.Lit_Chars val:'\t\t\t>sub1 &&\n' span_id:1651) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command add_sub1 &&\n'
                    span_id: 1652
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/no_submodule &&\n' span_id:1653) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_be_empty sub1\n'
                    span_id: 1654
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1655) (Token id:Id.Lit_Chars val:'\t' span_id:1656)
                )
              }
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace tracked file with submodule creates empty directory')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1677) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1678) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to replace_sub1_with_file &&\n' span_id:1679) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1680) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1681) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&\n'
                    span_id: 1682
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command replace_file_with_sub1 &&\n' span_id:1683) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/replace_file_with_sub1 &&\n'
                    span_id: 1684
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:1685) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 1686
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/replace_file_with_sub1\n'
                    span_id: 1687
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1688) (Token id:Id.Lit_Chars val:'\t' span_id:1689)
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} 
                      {
                        (DQ 
                          ($ Id.VSub_DollarName 
'$KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR'
                          )
                        )
                      } {(Id.Lit_Equals '=')} {(1)}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ (failure))}
                          spids: [1729]
                        )
                      ]
                    )
                  ]
                  spids: [1701 1714]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ (success))}
                      spids: [1738]
                    )
                  ]
                )
              ]
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {(DQ ($ Id.VSub_DollarName '$command') (': replace directory with submodule'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1756) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1757) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to replace_sub1_with_directory &&\n' span_id:1758) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1759) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1760) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&\n'
                    span_id: 1761
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command replace_directory_with_sub1 &&\n' span_id:1762) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/replace_directory_with_sub1 &&\n'
                    span_id: 1763
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:1764) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 1765
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/replace_directory_with_sub1\n'
                    span_id: 1766
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1767) (Token id:Id.Lit_Chars val:'\t' span_id:1768)
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} 
                      {
                        (DQ 
                          ($ Id.VSub_DollarName '$KNOWN_FAILURE_STASH_DOES_IGNORE_SUBMODULE_CHANGES')
                        )
                      } {(Id.Lit_Equals '=')} {(1)}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ (failure))}
                          spids: [1797]
                        )
                      ]
                    )
                  ]
                  spids: [1781 1794]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ (success))}
                      spids: [1806]
                    )
                  ]
                )
              ]
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': removed submodule leaves submodule directory and its contents in place')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1824) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1825) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:1826) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1827) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1828) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n'
                    span_id: 1829
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command remove_sub1 &&\n' span_id:1830) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/remove_sub1 &&\n'
                    span_id: 1831
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:1832) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1833) (Token id:Id.Lit_Chars val:'\t' span_id:1834)
                )
              }
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': removed submodule leaves submodule containing a .git directory alone')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1851) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1852) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:1853) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1854) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1855) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n'
                    span_id: 1856
                  ) (Token id:Id.Lit_Chars val:'\t\t\treplace_gitfile_with_git_dir sub1 &&\n' span_id:1857) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t$command remove_sub1 &&\n'
                    span_id: 1858
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/remove_sub1 &&\n' span_id:1859) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_git_directory_is_unchanged sub1 &&\n'
                    span_id: 1860
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:1861) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1862) (Token id:Id.Lit_Chars val:'\t' span_id:1863)
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} 
                      {
                        (DQ 
                          ($ Id.VSub_DollarName 
'$KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES'
                          )
                        )
                      } {(Id.Lit_Equals '=')} {(1)}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ (failure))}
                          spids: [1903]
                        )
                      ]
                    )
                  ]
                  spids: [1875 1888]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ (success))}
                      spids: [1912]
                    )
                  ]
                )
              ]
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace submodule with a directory must fail')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1930) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1931) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:1932) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1933) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1934) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n'
                    span_id: 1935
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n'
                    span_id: 1936
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:1937) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/add_sub1\n'
                    span_id: 1938
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1939) (Token id:Id.Lit_Chars val:'\t' span_id:1940)
                )
              }
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace submodule containing a .git directory with a directory must fail')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1957) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1958) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:1959) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1960) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1961) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n'
                    span_id: 1962
                  ) (Token id:Id.Lit_Chars val:'\t\t\treplace_gitfile_with_git_dir sub1 &&\n' span_id:1963) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n'
                    span_id: 1964
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:1965) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_git_directory_is_unchanged sub1 &&\n'
                    span_id: 1966
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:1967) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1968) (Token id:Id.Lit_Chars val:'\t' span_id:1969)
                )
              }
            )
            (C {(test_expect_failure)} 
              {(DQ ($ Id.VSub_DollarName '$command') (': replace submodule with a file must fail'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1989) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:1990) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:1991) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1992) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:1993) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n'
                    span_id: 1994
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_must_fail $command replace_sub1_with_file &&\n' span_id:1995) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/add_sub1 &&\n'
                    span_id: 1996
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:1997) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:1998) (Token id:Id.Lit_Chars val:'\t' span_id:1999)
                )
              }
            )
            (C {(test_expect_failure)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace submodule containing a .git directory with a file must fail')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2019) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2020) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2021) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2022) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2023) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n'
                    span_id: 2024
                  ) (Token id:Id.Lit_Chars val:'\t\t\treplace_gitfile_with_git_dir sub1 &&\n' span_id:2025) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command replace_sub1_with_file &&\n'
                    span_id: 2026
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:2027) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_git_directory_is_unchanged sub1 &&\n'
                    span_id: 2028
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2029) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2030) (Token id:Id.Lit_Chars val:'\t' span_id:2031)
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} 
                      {(DQ ($ Id.VSub_DollarName '$KNOWN_FAILURE_CHERRY_PICK_SEES_EMPTY_COMMIT'))} {(Id.Lit_Equals '=')} {(1)}
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ (failure))}
                          spids: [2072]
                        )
                      ]
                    )
                  ]
                  spids: [2044 2057]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:RESULT)
                      op: assign_op.Equal
                      rhs: {(DQ (success))}
                      spids: [2081]
                    )
                  ]
                )
              ]
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': modified submodule does not update submodule work tree')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2099) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2100) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2101) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2102) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2103) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t modify_sub1 origin/modify_sub1 &&\n'
                    span_id: 2104
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command modify_sub1 &&\n' span_id:2105) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/modify_sub1 &&\n'
                    span_id: 2106
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n' span_id:2107) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update &&\n'
                    span_id: 2108
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/modify_sub1\n' span_id:2109) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2110) (Token id:Id.Lit_Chars val:'\t' span_id:2111)
                )
              }
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': modified submodule does not update submodule work tree to invalid commit')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2133) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2134) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2135) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2136) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2137) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t invalid_sub1 origin/invalid_sub1 &&\n'
                    span_id: 2138
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command invalid_sub1 &&\n' span_id:2139) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/invalid_sub1 &&\n'
                    span_id: 2140
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n' span_id:2141) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail git submodule update &&\n'
                    span_id: 2142
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2143) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2144) (Token id:Id.Lit_Chars val:'\t' span_id:2145)
                )
              }
            )
            (C {(test_expect_) ($ Id.VSub_DollarName '$RESULT')} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': modified submodule does not update submodule work tree from invalid commit')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2166) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2167) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to invalid_sub1 &&\n' span_id:2168) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2169) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2170) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t valid_sub1 origin/valid_sub1 &&\n'
                    span_id: 2171
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command valid_sub1 &&\n' span_id:2172) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/valid_sub1 &&\n'
                    span_id: 2173
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:2174) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 2175
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/valid_sub1\n' span_id:2176) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2177) (Token id:Id.Lit_Chars val:'\t' span_id:2178)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: test_submodule_forced_switch
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:command)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [2201]
                )
              ]
            )
            (C {(test_expect_success)} 
              {(DQ ($ Id.VSub_DollarName '$command') (': added submodule creates empty directory'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2223) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2224) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to no_submodule &&\n' span_id:2225) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2226) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2227) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n'
                    span_id: 2228
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command add_sub1 &&\n' span_id:2229) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/add_sub1 &&\n'
                    span_id: 2230
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:2231) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 2232
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2233) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2234) (Token id:Id.Lit_Chars val:'\t' span_id:2235)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': added submodule leaves existing empty directory alone')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2251) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2252) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to no_submodule &&\n' span_id:2253) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2254) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2255) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n'
                    span_id: 2256
                  ) (Token id:Id.Lit_Chars val:'\t\t\tmkdir sub1 &&\n' span_id:2257) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t$command add_sub1 &&\n'
                    span_id: 2258
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:2259) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_dir_is_empty sub1 &&\n'
                    span_id: 2260
                  ) (Token id:Id.Lit_Chars val:'\t\t\tgit submodule update --init --recursive &&\n' span_id:2261) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/add_sub1\n'
                    span_id: 2262
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2263) (Token id:Id.Lit_Chars val:'\t' span_id:2264)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (
': added submodule does remove untracked unignored file with same name when forced'
                  )
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2280) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2281) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to no_submodule &&\n' span_id:2282) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2283) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2284) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t add_sub1 origin/add_sub1 &&\n'
                    span_id: 2285
                  ) (Token id:Id.Lit_Chars val:'\t\t\t>sub1 &&\n' span_id:2286) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t$command add_sub1 &&\n'
                    span_id: 2287
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:2288) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_dir_is_empty sub1\n'
                    span_id: 2289
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2290) (Token id:Id.Lit_Chars val:'\t' span_id:2291)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace tracked file with submodule creates empty directory')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2311) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2312) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to replace_sub1_with_file &&\n' span_id:2313) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2314) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2315) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_file_with_sub1 origin/replace_file_with_sub1 &&\n'
                    span_id: 2316
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command replace_file_with_sub1 &&\n' span_id:2317) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/replace_file_with_sub1 &&\n'
                    span_id: 2318
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:2319) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 2320
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/replace_file_with_sub1\n'
                    span_id: 2321
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2322) (Token id:Id.Lit_Chars val:'\t' span_id:2323)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ($ Id.VSub_DollarName '$command') (': replace directory with submodule'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2343) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2344) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to replace_sub1_with_directory &&\n' span_id:2345) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2346) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2347) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_directory_with_sub1 origin/replace_directory_with_sub1 &&\n'
                    span_id: 2348
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command replace_directory_with_sub1 &&\n' span_id:2349) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/replace_directory_with_sub1 &&\n'
                    span_id: 2350
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:2351) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 2352
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/replace_directory_with_sub1\n'
                    span_id: 2353
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2354) (Token id:Id.Lit_Chars val:'\t' span_id:2355)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': removed submodule leaves submodule directory and its contents in place')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2376) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2377) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2378) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2379) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2380) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n'
                    span_id: 2381
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command remove_sub1 &&\n' span_id:2382) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/remove_sub1 &&\n'
                    span_id: 2383
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2384) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2385) (Token id:Id.Lit_Chars val:'\t' span_id:2386)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': removed submodule leaves submodule containing a .git directory alone')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2402) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2403) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2404) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2405) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2406) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t remove_sub1 origin/remove_sub1 &&\n'
                    span_id: 2407
                  ) (Token id:Id.Lit_Chars val:'\t\t\treplace_gitfile_with_git_dir sub1 &&\n' span_id:2408) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t$command remove_sub1 &&\n'
                    span_id: 2409
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/remove_sub1 &&\n' span_id:2410) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_git_directory_is_unchanged sub1 &&\n'
                    span_id: 2411
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2412) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2413) (Token id:Id.Lit_Chars val:'\t' span_id:2414)
                )
              }
            )
            (C {(test_expect_failure)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace submodule with a directory must fail')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2434) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2435) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2436) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2437) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2438) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n'
                    span_id: 2439
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n'
                    span_id: 2440
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:2441) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_submodule_content sub1 origin/add_sub1\n'
                    span_id: 2442
                  ) (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2443) (Token id:Id.Lit_Chars val:'\t' span_id:2444)
                )
              }
            )
            (C {(test_expect_failure)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace submodule containing a .git directory with a directory must fail')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2460) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2461) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2462) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2463) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2464) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_directory origin/replace_sub1_with_directory &&\n'
                    span_id: 2465
                  ) (Token id:Id.Lit_Chars val:'\t\t\treplace_gitfile_with_git_dir sub1 &&\n' span_id:2466) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command replace_sub1_with_directory &&\n'
                    span_id: 2467
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:2468) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_git_directory_is_unchanged sub1 &&\n'
                    span_id: 2469
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2470) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2471) (Token id:Id.Lit_Chars val:'\t' span_id:2472)
                )
              }
            )
            (C {(test_expect_failure)} 
              {(DQ ($ Id.VSub_DollarName '$command') (': replace submodule with a file must fail'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2492) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2493) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2494) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2495) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2496) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n'
                    span_id: 2497
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_must_fail $command replace_sub1_with_file &&\n' span_id:2498) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/add_sub1 &&\n'
                    span_id: 2499
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2500) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2501) (Token id:Id.Lit_Chars val:'\t' span_id:2502)
                )
              }
            )
            (C {(test_expect_failure)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': replace submodule containing a .git directory with a file must fail')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2522) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2523) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2524) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2525) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2526) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\t\tgit branch -t replace_sub1_with_file origin/replace_sub1_with_file &&\n'
                    span_id: 2527
                  ) (Token id:Id.Lit_Chars val:'\t\t\treplace_gitfile_with_git_dir sub1 &&\n' span_id:2528) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail $command replace_sub1_with_file &&\n'
                    span_id: 2529
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_superproject_content origin/add_sub1 &&\n' span_id:2530) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_git_directory_is_unchanged sub1 &&\n'
                    span_id: 2531
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2532) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2533) (Token id:Id.Lit_Chars val:'\t' span_id:2534)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': modified submodule does not update submodule work tree')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2555) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2556) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2557) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2558) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2559) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t modify_sub1 origin/modify_sub1 &&\n'
                    span_id: 2560
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command modify_sub1 &&\n' span_id:2561) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/modify_sub1 &&\n'
                    span_id: 2562
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n' span_id:2563) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update &&\n'
                    span_id: 2564
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/modify_sub1\n' span_id:2565) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2566) (Token id:Id.Lit_Chars val:'\t' span_id:2567)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': modified submodule does not update submodule work tree to invalid commit')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2587) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2588) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to add_sub1 &&\n' span_id:2589) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2590) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2591) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t invalid_sub1 origin/invalid_sub1 &&\n'
                    span_id: 2592
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command invalid_sub1 &&\n' span_id:2593) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/invalid_sub1 &&\n'
                    span_id: 2594
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1 &&\n' span_id:2595) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_must_fail git submodule update &&\n'
                    span_id: 2596
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/add_sub1\n' span_id:2597) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2598) (Token id:Id.Lit_Chars val:'\t' span_id:2599)
                )
              }
            )
            (C {(test_expect_success)} 
              {
                (DQ ($ Id.VSub_DollarName '$command') 
                  (': modified submodule does not update submodule work tree from invalid commit')
                )
              } 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2619) 
                  (Token id:Id.Lit_Chars val:'\t\tprolog &&\n' span_id:2620) (Token id:Id.Lit_Chars val:'\t\treset_work_tree_to invalid_sub1 &&\n' span_id:2621) 
                  (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:2622) (Token id:Id.Lit_Chars val:'\t\t\tcd submodule_update &&\n' span_id:2623) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit branch -t valid_sub1 origin/valid_sub1 &&\n'
                    span_id: 2624
                  ) (Token id:Id.Lit_Chars val:'\t\t\t$command valid_sub1 &&\n' span_id:2625) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_superproject_content origin/valid_sub1 &&\n'
                    span_id: 2626
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_dir_is_empty sub1 &&\n' span_id:2627) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit submodule update --init --recursive &&\n'
                    span_id: 2628
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_submodule_content sub1 origin/valid_sub1\n' span_id:2629) 
                  (Token id:Id.Lit_Chars val:'\t\t)\n' span_id:2630) (Token id:Id.Lit_Chars val:'\t' span_id:2631)
                )
              }
            )
          ]
        )
    )
  ]
)