(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Merge logic in fetch'>)}
          spids: [16]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LF)
          op: assign_op.Equal
          rhs: {(SQ <'\n'>)}
          spids: [27]
        )
      ]
    )
    (C {<test_expect_success>} {<setup>} 
      {
        (SQ <'\n'> <'\tGIT_AUTHOR_DATE="2006-06-26 00:00:00 +0000" &&\n'> 
          <'\tGIT_COMMITTER_DATE="2006-06-26 00:00:00 +0000" &&\n'> <'\texport GIT_AUTHOR_DATE GIT_COMMITTER_DATE &&\n'> <'\n'> <'\techo >file original &&\n'> 
          <'\tgit add file &&\n'> <'\tgit commit -a -m One &&\n'> <'\tgit tag tag-one &&\n'> <'\tgit tag tag-one-tree HEAD^{tree} &&\n'> 
          <'\tgit branch one &&\n'> <'\n'> <'\techo two >> file &&\n'> <'\tgit commit -a -m Two &&\n'> 
          <'\tgit tag -a -m "Tag Two" tag-two &&\n'> <'\tgit branch two &&\n'> <'\n'> <'\techo three >> file &&\n'> <'\tgit commit -a -m Three &&\n'> 
          <'\tgit tag -a -m "Tag Three" tag-three &&\n'> <'\tgit tag -a -m "Tag Three file" tag-three-file HEAD^{tree}:file &&\n'> <'\tgit branch three &&\n'> 
          <'\n'> <'\techo master >> file &&\n'> <'\tgit commit -a -m Master &&\n'> 
          <'\tgit tag -a -m "Tag Master" tag-master &&\n'> <'\n'> <'\tgit checkout three &&\n'> <'\n'> <'\tgit clone . cloned &&\n'> <'\tcd cloned &&\n'> 
          <'\tgit config remote.origin.url ../.git/ &&\n'> <'\n'> <'\tgit config remote.config-explicit.url ../.git/ &&\n'> 
          <'\tgit config remote.config-explicit.fetch refs/heads/master:remotes/rem/master &&\n'> <'\tgit config --add remote.config-explicit.fetch refs/heads/one:remotes/rem/one &&\n'> 
          <'\tgit config --add remote.config-explicit.fetch two:remotes/rem/two &&\n'> <'\tgit config --add remote.config-explicit.fetch refs/heads/three:remotes/rem/three &&\n'> 
          <'\tremotes="config-explicit" &&\n'> <'\n'> <'\tgit config remote.config-glob.url ../.git/ &&\n'> 
          <'\tgit config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* &&\n'> <'\tremotes="$remotes config-glob" &&\n'> <'\n'> <'\tmkdir -p .git/remotes &&\n'> <'\t{\n'> 
          <'\t\techo "URL: ../.git/"\n'> <'\t\techo "Pull: refs/heads/master:remotes/rem/master"\n'> 
          <'\t\techo "Pull: refs/heads/one:remotes/rem/one"\n'> <'\t\techo "Pull: two:remotes/rem/two"\n'> <'\t\techo "Pull: refs/heads/three:remotes/rem/three"\n'> 
          <'\t} >.git/remotes/remote-explicit &&\n'> <'\tremotes="$remotes remote-explicit" &&\n'> <'\n'> <'\t{\n'> <'\t\techo "URL: ../.git/"\n'> 
          <'\t\techo "Pull: refs/heads/*:refs/remotes/rem/*"\n'> <'\t} >.git/remotes/remote-glob &&\n'> <'\tremotes="$remotes remote-glob" &&\n'> <'\n'> 
          <'\tmkdir -p .git/branches &&\n'> <'\techo "../.git" > .git/branches/branches-default &&\n'> 
          <'\tremotes="$remotes branches-default" &&\n'> <'\n'> <'\techo "../.git#one" > .git/branches/branches-one &&\n'> 
          <'\tremotes="$remotes branches-one" &&\n'> <'\n'> <'\tfor remote in $remotes ; do\n'> <'\t\tgit config branch.br-$remote.remote $remote &&\n'> 
          <'\t\tgit config branch.br-$remote-merge.remote $remote &&\n'> <'\t\tgit config branch.br-$remote-merge.merge refs/heads/three &&\n'> 
          <'\t\tgit config branch.br-$remote-octopus.remote $remote &&\n'> <'\t\tgit config branch.br-$remote-octopus.merge refs/heads/one &&\n'> 
          <'\t\tgit config --add branch.br-$remote-octopus.merge two\n'> <'\tdone\n'>
        )
      }
    )
    (command.ForEach
      iter_name: remote
      iter_words: [{($ Id.VSub_DollarName '$remotes')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ForEach
              iter_name: branch
              iter_words: [{(DQ )} {(DQ <-merge>)} {(DQ <-octopus>)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Simple
                      words: [{<cat>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_DLess '<<'>
                          loc: (redir_loc.Fd fd:0)
                          arg: 
                            (redir_param.HereDoc
                              here_begin: {<EOF>}
                              here_end_span_id: 169
                              stdin_parts: [
                                <br->
                                ($ Id.VSub_DollarName '$remote')
                                ($ Id.VSub_DollarName '$branch')
                                <'\n'>
                                <br->
                                ($ Id.VSub_DollarName '$remote')
                                ($ Id.VSub_DollarName '$branch')
                                <' '>
                                ($ Id.VSub_DollarName '$remote')
                                <'\n'>
                              ]
                            )
                        )
                      ]
                      do_fork: T
                    )
                  ]
                )
            )
          ]
        )
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<tests>})]
    )
    (command.ForEach
      iter_name: branch
      iter_words: [{<master>} {<br-unconfig>}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {<echo>} {($ Id.VSub_DollarName '$branch')})
            (command.ForEach
              iter_name: remote
              iter_words: [{($ Id.VSub_DollarName '$remotes')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<echo>} {($ Id.VSub_DollarName '$branch')} {($ Id.VSub_DollarName '$remote')})
                  ]
                )
            )
          ]
        )
      redirects: [(redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<tests>})]
    )
    (command.ForEach
      iter_name: branch
      iter_words: [{<master>} {<br-unconfig>}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 282
                      stdin_parts: [
                        ($ Id.VSub_DollarName '$branch')
                        <' ../.git\n'>
                        ($ Id.VSub_DollarName '$branch')
                        <' ../.git one\n'>
                        ($ Id.VSub_DollarName '$branch')
                        <' ../.git one two\n'>
                        ($ Id.VSub_DollarName '$branch')
                        <' --tags ../.git\n'>
                        ($ Id.VSub_DollarName '$branch')
                        <' ../.git tag tag-one tag tag-three\n'>
                        ($ Id.VSub_DollarName '$branch')
                        <' ../.git tag tag-one-tree tag tag-three-file\n'>
                        ($ Id.VSub_DollarName '$branch')
                        <' ../.git one tag tag-one tag tag-three-file\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
      redirects: [(redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<tests>})]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: (condition.Shell commands:[(C {<read>} {<cmd>})])
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$cmd'))}
              arms: [
                (case_arm
                  pat_list: [{(SQ )} {(SQ <'#'>) <Id.Lit_Star '*'>}]
                  action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)]
                  spids: [308 317 321 -1]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:test)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<echo>} {(DQ ($ Id.VSub_DollarName '$cmd'))})
                              (C {<sed>} {<-e>} {(SQ <'s|[/ ][/ ]*|_|g'>)})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [327]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pfx)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<printf>} {(DQ <'%04d'>)} {($ Id.VSub_DollarName '$test_count')})
                      )
                    }
                  spids: [347]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:expect_f)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY') <'/t5515/fetch.'> 
                        ($ Id.VSub_DollarName '$test')
                      )
                    }
                  spids: [359]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:actual_f)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$pfx') <-fetch.> ($ Id.VSub_DollarName '$test'))}
                  spids: [367]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:expect_r)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY') <'/t5515/refs.'> 
                        ($ Id.VSub_DollarName '$test')
                      )
                    }
                  spids: [375]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:actual_r)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$pfx') <-refs.> ($ Id.VSub_DollarName '$test'))}
                  spids: [383]
                )
              ]
            )
            (C {<test_expect_success>} {(DQ ($ Id.VSub_DollarName '$cmd'))} 
              {
                (SQ <'\n'> <'\t\t{\n'> <'\t\t\techo "# $cmd"\n'> <'\t\t\tset x $cmd; shift\n'> 
                  <'\t\t\tgit symbolic-ref HEAD refs/heads/$1 ; shift\n'> <'\t\t\trm -f .git/FETCH_HEAD\n'> <'\t\t\tgit for-each-ref \\\n'> 
                  <'\t\t\t\trefs/heads refs/remotes/rem refs/tags |\n'> <'\t\t\twhile read val type refname\n'> <'\t\t\tdo\n'> 
                  <'\t\t\t\tgit update-ref -d "$refname" "$val"\n'> <'\t\t\tdone\n'> <'\t\t\tgit fetch "$@" >/dev/null\n'> <'\t\t\tcat .git/FETCH_HEAD\n'> 
                  <'\t\t} >"$actual_f" &&\n'> <'\t\tgit show-ref >"$actual_r" &&\n'> <'\t\tif test -f "$expect_f"\n'> <'\t\tthen\n'> 
                  <'\t\t\ttest_cmp "$expect_f" "$actual_f" &&\n'> <'\t\t\trm -f "$actual_f"\n'> <'\t\telse\n'> <'\t\t\t# this is to help developing new tests.\n'> 
                  <'\t\t\tcp "$actual_f" "$expect_f"\n'> <'\t\t\tfalse\n'> <'\t\tfi &&\n'> <'\t\tif test -f "$expect_r"\n'> <'\t\tthen\n'> 
                  <'\t\t\ttest_cmp "$expect_r" "$actual_r" &&\n'> <'\t\t\trm -f "$actual_r"\n'> <'\t\telse\n'> <'\t\t\t# this is to help developing new tests.\n'> 
                  <'\t\t\tcp "$actual_r" "$expect_r"\n'> <'\t\t\tfalse\n'> <'\t\tfi\n'> <'\t'>
                )
              }
            )
          ]
        )
      redirects: [(redir op:<Id.Redir_Less '<'> loc:(redir_loc.Fd fd:0) arg:{<tests>})]
    )
    (C {<test_done>})
  ]
)