(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git remote porcelain-ish'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: setup_repository
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(mkdir)} {(DQ ($ VSub_Number '$1'))})
                (Subshell
                  child: 
                    (AndOr
                      children: [
                        (C {(cd)} {(DQ ($ VSub_Number '$1'))})
                        (AndOr
                          children: [
                            (C {(git)} {(init)})
                            (AndOr
                              children: [
                                (SimpleCommand
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: -1
                                      arg_word: {(file)}
                                      spids: [50]
                                    )
                                  ]
                                )
                                (AndOr
                                  children: [
                                    (C {(git)} {(add)} {(file)})
                                    (AndOr
                                      children: [
                                        (C {(test_tick)})
                                        (AndOr
                                          children: [
                                            (C {(git)} {(commit)} {(-m)} {(DQ (Initial))})
                                            (AndOr
                                              children: [
                                                (C {(git)} {(checkout)} {(-b)} {(side)})
                                                (AndOr
                                                  children: [
                                                    (SimpleCommand
                                                      redirects: [
                                                        (Redir
                                                          op_id: Redir_Great
                                                          fd: -1
                                                          arg_word: {(KW_Elif elif)}
                                                          spids: [94]
                                                        )
                                                      ]
                                                    )
                                                    (AndOr
                                                      children: [
                                                        (C {(git)} {(add)} {(KW_Elif elif)})
                                                        (AndOr
                                                          children: [
                                                            (C {(test_tick)})
                                                            (AndOr
                                                              children: [
                                                                (C {(git)} {(commit)} {(-m)} 
                                                                  {(DQ (Second))}
                                                                )
                                                                (C {(git)} {(checkout)} {(master)})
                                                              ]
                                                              op_id: Op_DAmp
                                                            )
                                                          ]
                                                          op_id: Op_DAmp
                                                        )
                                                      ]
                                                      op_id: Op_DAmp
                                                    )
                                                  ]
                                                  op_id: Op_DAmp
                                                )
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  spids: [31 134]
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [20]
        )
      spids: [15 19]
    )
    (FuncDef
      name: tokens_match
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(echo)} {(DQ ($ VSub_Number '$1'))})
                    (C {(tr)} {(SQ <' '>)} {(SQ <'\\012'>)})
                    (C {(sort)})
                    (SimpleCommand
                      words: [{(sed)} {(-e)} {(SQ <'/^$/d'>)}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[179])]
                    )
                  ]
                  negated: False
                )
                (AndOr
                  children: [
                    (Pipeline
                      children: [
                        (C {(echo)} {(DQ ($ VSub_Number '$2'))})
                        (C {(tr)} {(SQ <' '>)} {(SQ <'\\012'>)})
                        (C {(sort)})
                        (SimpleCommand
                          words: [{(sed)} {(-e)} {(SQ <'/^$/d'>)}]
                          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual)} spids:[217])]
                        )
                      ]
                      negated: False
                    )
                    (C {(test_cmp)} {(expect)} {(actual)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [144]
        )
      spids: [139 143]
    )
    (FuncDef
      name: check_remote_track
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:actual)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(git)} {(remote)} {(show)} {(DQ ($ VSub_Number '$1'))})
                                  (C {(sed)} {(-ne)} {(SQ <'s|^    \\(.*\\) tracked$|\\1|p'>)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [241 261]
                      )
                    }
                  spids: [240]
                )
              ]
              spids: [240]
            )
            (AndOr
              children: [
                (C {(shift)})
                (C {(tokens_match)} {(DQ ($ VSub_Star '$*'))} {(DQ ($ VSub_Name '$actual'))})
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [237]
        )
      spids: [232 236]
    )
    (FuncDef
      name: check_tracking_branch
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:f) op:Equal rhs:{(DQ )} spids:[290])]
                  spids: [290]
                )
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:r)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(git)} {(for-each-ref)} {(DQ ('--format=%(refname)'))})
                                          (C {(sed)} {(-ne)} 
                                            {(DQ ('s|^refs/remotes/') ($ VSub_Number '$1') ('/||p'))}
                                          )
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [298 319]
                              )
                            }
                          spids: [297]
                        )
                      ]
                      spids: [297]
                    )
                    (AndOr
                      children: [
                        (C {(shift)})
                        (C {(tokens_match)} {(DQ ($ VSub_Star '$*'))} {(DQ ($ VSub_Name '$r'))})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [287]
        )
      spids: [282 286]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\tsetup_repository one &&\n'> <'\tsetup_repository two &&\n'> <'\t(\n'> 
          <'\t\tcd two &&\n'> <'\t\tgit branch another\n'> <'\t) &&\n'> <'\tgit clone one test\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add remote whose URL agrees with url.<...>.insteadOf'>)} 
      {
        (SQ <'\n'> <'\ttest_config url.git@host.com:team/repo.git.insteadOf myremote &&\n'> 
          <'\tgit remote add myremote git@host.com:team/repo.git\n'>
        )
      }
    )
    (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ <'remote information for the origin'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\ttokens_match origin "$(git remote)" &&\n'> 
          <'\t\tcheck_remote_track origin master side &&\n'> <'\t\tcheck_tracking_branch origin HEAD master side\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add another remote'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tgit remote add -f second ../two &&\n'> 
          <'\t\ttokens_match "origin second" "$(git remote)" &&\n'> <'\t\tcheck_tracking_branch second master side another &&\n'> 
          <'\t\tgit for-each-ref "--format=%(refname)" refs/remotes |\n'> <'\t\tsed -e "/^refs\\/remotes\\/origin\\//d" \\\n'> 
          <'\t\t    -e "/^refs\\/remotes\\/second\\//d" >actual &&\n'> <'\t\t>expect &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ <'check remote-tracking'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tcheck_remote_track origin master side &&\n'> 
          <'\t\tcheck_remote_track second master side another\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote forces tracking branches'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tcase $(git config remote.second.fetch) in\n'> 
          <'\t\t+*) true ;;\n'> <'\t\t *) false ;;\n'> <'\t\tesac\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remove remote'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> 
          <'\t\tgit symbolic-ref refs/remotes/second/HEAD refs/remotes/second/master &&\n'> <'\t\tgit remote rm second\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ <'remove remote'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\ttokens_match origin "$(git remote)" &&\n'> 
          <'\t\tcheck_remote_track origin master side &&\n'> <'\t\tgit for-each-ref "--format=%(refname)" refs/remotes |\n'> 
          <'\t\tsed -e "/^refs\\/remotes\\/origin\\//d" >actual &&\n'> <'\t\t>expect &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remove remote protects local branches'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tcat >expect1 <<-\\EOF &&\n'> 
          <'\t\tNote: A branch outside the refs/remotes/ hierarchy was not removed;\n'> <'\t\tto delete it, use:\n'> <'\t\t  git branch -d master\n'> <'\t\tEOF\n'> 
          <'\t\tcat >expect2 <<-\\EOF &&\n'> <'\t\tNote: Some branches outside the refs/remotes/ hierarchy were not removed;\n'> 
          <'\t\tto delete them, use:\n'> <'\t\t  git branch -d foobranch\n'> <'\t\t  git branch -d master\n'> <'\t\tEOF\n'> 
          <'\t\tgit tag footag &&\n'> <'\t\tgit config --add remote.oops.fetch "+refs/*:refs/*" &&\n'> 
          <'\t\tgit remote remove oops 2>actual1 &&\n'> <'\t\tgit branch foobranch &&\n'> <'\t\tgit config --add remote.oops.fetch "+refs/*:refs/*" &&\n'> 
          <'\t\tgit remote rm oops 2>actual2 &&\n'> <'\t\tgit branch -d foobranch &&\n'> <'\t\tgit tag -d footag &&\n'> 
          <'\t\ttest_i18ncmp expect1 actual1 &&\n'> <'\t\ttest_i18ncmp expect2 actual2\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remove errors out early when deleting non-existent branch'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\techo "fatal: No such remote: foo" >expect &&\n'> 
          <'\t\ttest_must_fail git remote rm foo 2>actual &&\n'> <'\t\ttest_i18ncmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rename errors out early when deleting non-existent branch'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\techo "fatal: No such remote: foo" >expect &&\n'> 
          <'\t\ttest_must_fail git remote rename foo bar 2>actual &&\n'> <'\t\ttest_i18ncmp expect actual\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add existing foreign_vcs remote'>)} 
      {
        (SQ <'\n'> <'\ttest_config remote.foo.vcs bar &&\n'> 
          <'\techo "fatal: remote foo already exists." >expect &&\n'> <'\ttest_must_fail git remote add foo bar 2>actual &&\n'> <'\ttest_i18ncmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add existing foreign_vcs remote'>)} 
      {
        (SQ <'\n'> <'\ttest_config remote.foo.vcs bar &&\n'> <'\ttest_config remote.bar.vcs bar &&\n'> 
          <'\techo "fatal: remote bar already exists." >expect &&\n'> <'\ttest_must_fail git remote rename foo bar 2>actual &&\n'> <'\ttest_i18ncmp expect actual\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[588])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ('* remote origin\n') ('  Fetch URL: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [596 598]
                ) ('/one\n') ('  Push  URL: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [601 603]
                ) ('/one\n') ('  HEAD branch: master\n') ('  Remote branches:\n') 
                ('    master new (next fetch will store in remotes/origin)\n') ('    side   tracked\n') ("  Local branches configured for 'git pull':\n") 
                ('    ahead    merges with remote master\n') ('    master   merges with remote master\n') ('    octopus  merges with remote topic-a\n') 
                ('                and with remote topic-b\n') ('                and with remote topic-c\n') ('    rebase  rebases onto remote master\n') 
                ("  Local refs configured for 'git push':\n") ('    master pushes to master   (local out of date)\n') ('    master pushes to upstream (create)\n') 
                ('* remote two\n') ('  Fetch URL: ../two\n') ('  Push  URL: ../three\n') ('  HEAD branch: master\n') 
                ("  Local refs configured for 'git push':\n") ('    ahead  forces to master  (fast-forwardable)\n') ('    master pushes to another (up to date)\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [591]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <show>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> 
          <'\t\tgit config --add remote.origin.fetch refs/heads/master:refs/heads/upstream &&\n'> <'\t\tgit fetch &&\n'> <'\t\tgit checkout -b ahead origin/master &&\n'> <'\t\techo 1 >>file &&\n'> 
          <'\t\ttest_tick &&\n'> <'\t\tgit commit -m update file &&\n'> <'\t\tgit checkout master &&\n'> 
          <'\t\tgit branch --track octopus origin/master &&\n'> <'\t\tgit branch --track rebase origin/master &&\n'> <'\t\tgit branch -d -r origin/master &&\n'> 
          <'\t\tgit config --add remote.two.url ../two &&\n'> <'\t\tgit config --add remote.two.pushurl ../three &&\n'> 
          <'\t\tgit config branch.rebase.rebase true &&\n'> <'\t\tgit config branch.octopus.merge "topic-a topic-b topic-c" &&\n'> <'\t\t(\n'> 
          <'\t\t\tcd ../one &&\n'> <'\t\t\techo 1 >file &&\n'> <'\t\t\ttest_tick &&\n'> <'\t\t\tgit commit -m update file\n'> 
          <'\t\t) &&\n'> <'\t\tgit config --add remote.origin.push : &&\n'> 
          <'\t\tgit config --add remote.origin.push refs/heads/master:refs/heads/upstream &&\n'> <'\t\tgit config --add remote.origin.push +refs/tags/lastbackup &&\n'> 
          <'\t\tgit config --add remote.two.push +refs/heads/ahead:refs/heads/master &&\n'> <'\t\tgit config --add remote.two.push refs/heads/master:refs/heads/another &&\n'> 
          <'\t\tgit remote show origin two >output &&\n'> <'\t\tgit branch -d rebase octopus &&\n'> <'\t\ttest_i18ncmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[672])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ('* remote origin\n') ('  Fetch URL: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [680 682]
                ) ('/one\n') ('  Push  URL: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [685 687]
                ) ('/one\n') ('  HEAD branch: (not queried)\n') ('  Remote branches: (status not queried)\n') 
                ('    master\n') ('    side\n') ("  Local branches configured for 'git pull':\n") 
                ('    ahead  merges with remote master\n') ('    master merges with remote master\n') 
                ("  Local refs configured for 'git push' (status not queried):\n") ('    (matching)           pushes to (matching)\n') 
                ('    refs/heads/master    pushes to refs/heads/upstream\n') ('    refs/tags/lastbackup forces to refs/tags/lastbackup\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [675]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'show -n'>)} 
      {
        (SQ <'\n'> <'\tmv one one.unreachable &&\n'> <'\t(\n'> <'\t\tcd test &&\n'> 
          <'\t\tgit remote show -n origin >output &&\n'> <'\t\tmv ../one.unreachable ../one &&\n'> <'\t\ttest_i18ncmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <prune>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit branch -m side side2\n'> <'\t) &&\n'> <'\t(\n'> 
          <'\t\tcd test &&\n'> <'\t\tgit fetch origin &&\n'> <'\t\tgit remote prune origin &&\n'> 
          <'\t\tgit rev-parse refs/remotes/origin/side2 &&\n'> <'\t\ttest_must_fail git rev-parse refs/remotes/origin/side\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'set-head --delete'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tgit symbolic-ref refs/remotes/origin/HEAD &&\n'> 
          <'\t\tgit remote set-head --delete origin &&\n'> <'\t\ttest_must_fail git symbolic-ref refs/remotes/origin/HEAD\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'set-head --auto'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tgit remote set-head --auto origin &&\n'> 
          <'\t\techo refs/remotes/origin/master >expect &&\n'> <'\t\tgit symbolic-ref refs/remotes/origin/HEAD >output &&\n'> <'\t\ttest_cmp expect output\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'set-head --auto has no problem w/multiple HEADs'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> 
          <'\t\tgit fetch two "refs/heads/*:refs/remotes/two/*" &&\n'> <'\t\tgit remote set-head --auto two >output 2>&1 &&\n'> 
          <'\t\techo "two/HEAD set to master" >expect &&\n'> <'\t\ttest_i18ncmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[797])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {('refs/remotes/origin/side2\n')}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [800]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'set-head explicit'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tgit remote set-head origin side2 &&\n'> 
          <'\t\tgit symbolic-ref refs/remotes/origin/HEAD >output &&\n'> <'\t\tgit remote set-head origin master &&\n'> <'\t\ttest_cmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[825])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ('Pruning origin\n') ('URL: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [833 835]
                ) ('/one\n') (' * [would prune] origin/side2\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [828]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'prune --dry-run'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit branch -m side2 side) &&\n'> <'\t(\n'> 
          <'\t\tcd test &&\n'> <'\t\tgit remote prune --dry-run origin >output &&\n'> 
          <'\t\tgit rev-parse refs/remotes/origin/side2 &&\n'> <'\t\ttest_must_fail git rev-parse refs/remotes/origin/side &&\n'> <'\t(\n'> <'\t\tcd ../one &&\n'> 
          <'\t\tgit branch -m side side2) &&\n'> <'\t\ttest_i18ncmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add --mirror && prune'>)} 
      {
        (SQ <'\n'> <'\tmkdir mirror &&\n'> <'\t(\n'> <'\t\tcd mirror &&\n'> <'\t\tgit init --bare &&\n'> 
          <'\t\tgit remote add --mirror -f origin ../one\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit branch -m side2 side\n'> <'\t) &&\n'> <'\t(\n'> 
          <'\t\tcd mirror &&\n'> <'\t\tgit rev-parse --verify refs/heads/side2 &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/heads/side &&\n'> <'\t\tgit fetch origin &&\n'> <'\t\tgit remote prune origin &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/heads/side2 &&\n'> <'\t\tgit rev-parse --verify refs/heads/side\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add --mirror=fetch'>)} 
      {
        (SQ <'\n'> <'\tmkdir mirror-fetch &&\n'> <'\tgit init mirror-fetch/parent &&\n'> <'\t(\n'> 
          <'\t\tcd mirror-fetch/parent &&\n'> <'\t\ttest_commit one\n'> <'\t) &&\n'> <'\tgit init --bare mirror-fetch/child &&\n'> <'\t(\n'> 
          <'\t\tcd mirror-fetch/child &&\n'> <'\t\tgit remote add --mirror=fetch -f parent ../parent\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'fetch mirrors act as mirrors during fetch'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd mirror-fetch/parent &&\n'> <'\t\tgit branch new &&\n'> 
          <'\t\tgit branch -m master renamed\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd mirror-fetch/child &&\n'> <'\t\tgit fetch parent &&\n'> 
          <'\t\tgit rev-parse --verify refs/heads/new &&\n'> <'\t\tgit rev-parse --verify refs/heads/renamed\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'fetch mirrors can prune'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd mirror-fetch/child &&\n'> <'\t\tgit remote prune parent &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/heads/master\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'fetch mirrors do not act as mirrors during push'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd mirror-fetch/parent &&\n'> <'\t\tgit checkout HEAD^0\n'> 
          <'\t) &&\n'> <'\t(\n'> <'\t\tcd mirror-fetch/child &&\n'> <'\t\tgit branch -m renamed renamed2 &&\n'> 
          <'\t\tgit push parent :\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd mirror-fetch/parent &&\n'> <'\t\tgit rev-parse --verify renamed &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/heads/renamed2\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add fetch mirror with specific branches'>)} 
      {
        (SQ <'\n'> <'\tgit init --bare mirror-fetch/track &&\n'> <'\t(\n'> 
          <'\t\tcd mirror-fetch/track &&\n'> <'\t\tgit remote add --mirror=fetch -t heads/new parent ../parent\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'fetch mirror respects specific branches'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd mirror-fetch/track &&\n'> <'\t\tgit fetch parent &&\n'> 
          <'\t\tgit rev-parse --verify refs/heads/new &&\n'> <'\t\ttest_must_fail git rev-parse --verify refs/heads/renamed\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add --mirror=push'>)} 
      {
        (SQ <'\n'> <'\tmkdir mirror-push &&\n'> <'\tgit init --bare mirror-push/public &&\n'> 
          <'\tgit init mirror-push/private &&\n'> <'\t(\n'> <'\t\tcd mirror-push/private &&\n'> <'\t\ttest_commit one &&\n'> 
          <'\t\tgit remote add --mirror=push public ../public\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'push mirrors act as mirrors during push'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd mirror-push/private &&\n'> <'\t\tgit branch new &&\n'> 
          <'\t\tgit branch -m master renamed &&\n'> <'\t\tgit push public\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd mirror-push/private &&\n'> 
          <'\t\tgit rev-parse --verify refs/heads/new &&\n'> <'\t\tgit rev-parse --verify refs/heads/renamed &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/heads/master\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'push mirrors do not act as mirrors during fetch'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd mirror-push/public &&\n'> 
          <'\t\tgit branch -m renamed renamed2 &&\n'> <'\t\tgit symbolic-ref HEAD refs/heads/renamed2\n'> <'\t) &&\n'> <'\t(\n'> 
          <'\t\tcd mirror-push/private &&\n'> <'\t\tgit fetch public &&\n'> <'\t\tgit rev-parse --verify refs/heads/renamed &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/heads/renamed2\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'push mirrors do not allow you to specify refs'>)} 
      {
        (SQ <'\n'> <'\tgit init mirror-push/track &&\n'> <'\t(\n'> <'\t\tcd mirror-push/track &&\n'> 
          <'\t\ttest_must_fail git remote add --mirror=push -t new public ../public\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add alt && prune'>)} 
      {
        (SQ <'\n'> <'\tmkdir alttst &&\n'> <'\t(\n'> <'\t\tcd alttst &&\n'> <'\t\tgit init &&\n'> 
          <'\t\tgit remote add -f origin ../one &&\n'> <'\t\tgit config remote.alt.url ../one &&\n'> 
          <'\t\tgit config remote.alt.fetch "+refs/heads/*:refs/remotes/origin/*"\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit branch -m side side2\n'> <'\t) &&\n'> <'\t(\n'> 
          <'\t\tcd alttst &&\n'> <'\t\tgit rev-parse --verify refs/remotes/origin/side &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/remotes/origin/side2 &&\n'> <'\t\tgit fetch alt &&\n'> <'\t\tgit remote prune alt &&\n'> 
          <'\t\ttest_must_fail git rev-parse --verify refs/remotes/origin/side &&\n'> <'\t\tgit rev-parse --verify refs/remotes/origin/side2\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[1126])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {('some-tag\n')}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1129]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'add with reachable tags (default)'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\t>foobar &&\n'> <'\t\tgit add foobar &&\n'> 
          <'\t\tgit commit -m "Foobar" &&\n'> <'\t\tgit tag -a -m "Foobar tag" foobar-tag &&\n'> <'\t\tgit reset --hard HEAD~1 &&\n'> 
          <'\t\tgit tag -a -m "Some tag" some-tag\n'> <'\t) &&\n'> <'\tmkdir add-tags &&\n'> <'\t(\n'> <'\t\tcd add-tags &&\n'> <'\t\tgit init &&\n'> 
          <'\t\tgit remote add -f origin ../one &&\n'> <'\t\tgit tag -l some-tag >../test/output &&\n'> <'\t\tgit tag -l foobar-tag >>../test/output &&\n'> 
          <'\t\ttest_must_fail git config remote.origin.tagopt\n'> <'\t) &&\n'> <'\ttest_cmp test/expect test/output\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[1166])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {('some-tag\n') ('foobar-tag\n') ('--tags\n')}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1169]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'add --tags'>)} 
      {
        (SQ <'\n'> <'\trm -rf add-tags &&\n'> <'\t(\n'> <'\t\tmkdir add-tags &&\n'> 
          <'\t\tcd add-tags &&\n'> <'\t\tgit init &&\n'> <'\t\tgit remote add -f --tags origin ../one &&\n'> 
          <'\t\tgit tag -l some-tag >../test/output &&\n'> <'\t\tgit tag -l foobar-tag >>../test/output &&\n'> 
          <'\t\tgit config remote.origin.tagopt >>../test/output\n'> <'\t) &&\n'> <'\ttest_cmp test/expect test/output\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(test/expect)} spids:[1198])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {('--no-tags\n')}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1201]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'add --no-tags'>)} 
      {
        (SQ <'\n'> <'\trm -rf add-tags &&\n'> <'\t(\n'> <'\t\tmkdir add-no-tags &&\n'> 
          <'\t\tcd add-no-tags &&\n'> <'\t\tgit init &&\n'> <'\t\tgit remote add -f --no-tags origin ../one &&\n'> 
          <'\t\tgit tag -l some-tag >../test/output &&\n'> <'\t\tgit tag -l foobar-tag >../test/output &&\n'> 
          <'\t\tgit config remote.origin.tagopt >>../test/output\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit tag -d some-tag foobar-tag\n'> <'\t) &&\n'> 
          <'\ttest_cmp test/expect test/output\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'reject --no-no-tags'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd add-no-tags &&\n'> 
          <'\t\ttest_must_fail git remote add -f --no-no-tags neworigin ../one\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(one/expect)} spids:[1249])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {('  apis/master\n') ('  apis/side\n') ('  drosophila/another\n') 
              ('  drosophila/master\n') ('  drosophila/side\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1252]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <update>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit remote add drosophila ../two &&\n'> 
          <'\t\tgit remote add apis ../mirror &&\n'> <'\t\tgit remote update &&\n'> <'\t\tgit branch -r >output &&\n'> <'\t\ttest_cmp expect output\n'> 
          <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(one/expect)} spids:[1278])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {('  drosophila/another\n') ('  drosophila/master\n') ('  drosophila/side\n') 
              ('  manduca/master\n') ('  manduca/side\n') ('  megaloprepus/master\n') ('  megaloprepus/side\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1281]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'update with arguments'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tfor b in $(git branch -r)\n'> <'\t\tdo\n'> 
          <'\t\tgit branch -r -d $b || exit 1\n'> <'\t\tdone &&\n'> <'\t\tgit remote add manduca ../mirror &&\n'> 
          <'\t\tgit remote add megaloprepus ../mirror &&\n'> <'\t\tgit config remotes.phobaeticus "drosophila megaloprepus" &&\n'> 
          <'\t\tgit config remotes.titanus manduca &&\n'> <'\t\tgit remote update phobaeticus titanus &&\n'> <'\t\tgit branch -r >output &&\n'> 
          <'\t\ttest_cmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'update --prune'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tgit branch -m side2 side3\n'> <'\t) &&\n'> 
          <'\t(\n'> <'\t\tcd test &&\n'> <'\t\tgit remote update --prune &&\n'> <'\t\t(\n'> <'\t\t\tcd ../one &&\n'> 
          <'\t\t\tgit branch -m side3 side2\n'> <'\t\t) &&\n'> <'\t\tgit rev-parse refs/remotes/origin/side3 &&\n'> 
          <'\t\ttest_must_fail git rev-parse refs/remotes/origin/side2\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(one/expect)} spids:[1338])
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {('  apis/master\n') ('  apis/side\n') ('  manduca/master\n') ('  manduca/side\n') 
              ('  megaloprepus/master\n') ('  megaloprepus/side\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1341]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'update default'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tfor b in $(git branch -r)\n'> <'\t\tdo\n'> 
          <'\t\tgit branch -r -d $b || exit 1\n'> <'\t\tdone &&\n'> <'\t\tgit config remote.drosophila.skipDefaultUpdate true &&\n'> 
          <'\t\tgit remote update default &&\n'> <'\t\tgit branch -r >output &&\n'> <'\t\ttest_cmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(one/expect)} spids:[1370])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {('  drosophila/another\n') ('  drosophila/master\n') ('  drosophila/side\n')}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1373]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'update default (overridden, with funny whitespace)'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tfor b in $(git branch -r)\n'> <'\t\tdo\n'> 
          <'\t\tgit branch -r -d $b || exit 1\n'> <'\t\tdone &&\n'> <'\t\tgit config remotes.default "$(printf "\\t drosophila  \\n")" &&\n'> 
          <'\t\tgit remote update default &&\n'> <'\t\tgit branch -r >output &&\n'> <'\t\ttest_cmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'update (with remotes.default defined)'>)} 
      {
        (SQ <'\n'> <'\t(\n'> <'\t\tcd one &&\n'> <'\t\tfor b in $(git branch -r)\n'> <'\t\tdo\n'> 
          <'\t\tgit branch -r -d $b || exit 1\n'> <'\t\tdone &&\n'> <'\t\tgit config remotes.default "drosophila" &&\n'> <'\t\tgit remote update &&\n'> 
          <'\t\tgit branch -r >output &&\n'> <'\t\ttest_cmp expect output\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'"remote show" does not show symbolic refs'>)} 
      {
        (SQ <'\n'> <'\tgit clone one three &&\n'> <'\t(\n'> <'\t\tcd three &&\n'> 
          <'\t\tgit remote show origin >output &&\n'> <'\t\t! grep "^ *HEAD$" < output &&\n'> <'\t\t! grep -i stale < output\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'reject adding remote with an invalid name'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git remote add some:url desired-name\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'rename a remote'>)} 
      {
        (SQ <'\n'> <'\tgit clone one four &&\n'> <'\t(\n'> <'\t\tcd four &&\n'> 
          <'\t\tgit remote rename origin upstream &&\n'> <'\t\trmdir .git/refs/remotes/origin &&\n'> 
          <
'\t\ttest "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/master" &&\n'
          > <'\t\ttest "$(git rev-parse upstream/master)" = "$(git rev-parse master)" &&\n'> 
          <
'\t\ttest "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*" &&\n'
          > <'\t\ttest "$(git config branch.master.remote)" = "upstream"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rename does not update a non-default fetch refspec'>)} 
      {
        (SQ <'\n'> <'\tgit clone one four.one &&\n'> <'\t(\n'> <'\t\tcd four.one &&\n'> 
          <'\t\tgit config remote.origin.fetch +refs/heads/*:refs/heads/origin/* &&\n'> <'\t\tgit remote rename origin upstream &&\n'> 
          <
'\t\ttest "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/heads/origin/*" &&\n'
          > <'\t\tgit rev-parse -q origin/master\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rename a remote with name part of fetch spec'>)} 
      {
        (SQ <'\n'> <'\tgit clone one four.two &&\n'> <'\t(\n'> <'\t\tcd four.two &&\n'> 
          <'\t\tgit remote rename origin remote &&\n'> <'\t\tgit remote rename remote upstream &&\n'> 
          <
'\t\ttest "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*"\n'
          > <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'rename a remote with name prefix of other remote'>)} 
      {
        (SQ <'\n'> <'\tgit clone one four.three &&\n'> <'\t(\n'> <'\t\tcd four.three &&\n'> 
          <'\t\tgit remote add o git://example.com/repo.git &&\n'> <'\t\tgit remote rename o upstream &&\n'> 
          <'\t\ttest "$(git rev-parse origin/master)" = "$(git rev-parse master)"\n'> <'\t)\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(remotes_origin)} spids:[1537])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ('URL: ') 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [1544 1546]
                ) ('/one\n') ('Push: refs/heads/master:refs/heads/upstream\n') 
                ('Push: refs/heads/next:refs/heads/upstream2\n') ('Pull: refs/heads/master:refs/heads/origin\n') ('Pull: refs/heads/next:refs/heads/origin2\n')
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [1540]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'migrate a remote from named file in $GIT_DIR/remotes'>)} 
      {
        (SQ <'\n'> <'\tgit clone one five &&\n'> <'\torigin_url=$(pwd)/one &&\n'> <'\t(\n'> 
          <'\t\tcd five &&\n'> <'\t\tgit remote remove origin &&\n'> <'\t\tmkdir -p .git/remotes &&\n'> 
          <'\t\tcat ../remotes_origin >.git/remotes/origin &&\n'> <'\t\tgit remote rename origin origin &&\n'> <'\t\ttest_path_is_missing .git/remotes/origin &&\n'> 
          <'\t\ttest "$(git config remote.origin.url)" = "$origin_url" &&\n'> <'\t\tcat >push_expected <<-\\EOF &&\n'> <'\t\trefs/heads/master:refs/heads/upstream\n'> 
          <'\t\trefs/heads/next:refs/heads/upstream2\n'> <'\t\tEOF\n'> <'\t\tcat >fetch_expected <<-\\EOF &&\n'> <'\t\trefs/heads/master:refs/heads/origin\n'> 
          <'\t\trefs/heads/next:refs/heads/origin2\n'> <'\t\tEOF\n'> <'\t\tgit config --get-all remote.origin.push >push_actual &&\n'> 
          <'\t\tgit config --get-all remote.origin.fetch >fetch_actual &&\n'> <'\t\ttest_cmp push_expected push_actual &&\n'> <'\t\ttest_cmp fetch_expected fetch_actual\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'migrate a remote from named file in $GIT_DIR/branches'>)} 
      {
        (SQ <'\n'> <'\tgit clone one six &&\n'> <'\torigin_url=$(pwd)/one &&\n'> <'\t(\n'> 
          <'\t\tcd six &&\n'> <'\t\tgit remote rm origin &&\n'> <'\t\techo "$origin_url" >.git/branches/origin &&\n'> 
          <'\t\tgit remote rename origin origin &&\n'> <'\t\ttest_path_is_missing .git/branches/origin &&\n'> 
          <'\t\ttest "$(git config remote.origin.url)" = "$origin_url" &&\n'> <'\t\ttest "$(git config remote.origin.fetch)" = "refs/heads/master:refs/heads/origin" &&\n'> 
          <'\t\ttest "$(git config remote.origin.push)" = "HEAD:refs/heads/master"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'migrate a remote from named file in $GIT_DIR/branches (2)'>)} 
      {
        (SQ <'\n'> <'\tgit clone one seven &&\n'> <'\t(\n'> <'\t\tcd seven &&\n'> 
          <'\t\tgit remote rm origin &&\n'> <'\t\techo "quux#foom" > .git/branches/origin &&\n'> <'\t\tgit remote rename origin origin &&\n'> 
          <'\t\ttest_path_is_missing .git/branches/origin &&\n'> <'\t\ttest "$(git config remote.origin.url)" = "quux" &&\n'> 
          <'\t\ttest "$(git config remote.origin.fetch)" = "refs/heads/foom:refs/heads/origin"\n'> <'\t\ttest "$(git config remote.origin.push)" = "HEAD:refs/heads/foom"\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote prune to cause a dangling symref'>)} 
      {
        (SQ <'\n'> <'\tgit clone one eight &&\n'> <'\t(\n'> <'\t\tcd one &&\n'> 
          <'\t\tgit checkout side2 &&\n'> <'\t\tgit branch -D master\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd eight &&\n'> 
          <'\t\tgit remote prune origin\n'> <'\t) >err 2>&1 &&\n'> <'\ttest_i18ngrep "has become dangling" err &&\n'> <'\n'> 
          <'\t: And the dangling symref will not cause other annoying errors &&\n'> <'\t(\n'> <'\t\tcd eight &&\n'> <'\t\tgit branch -a\n'> <'\t) 2>err &&\n'> 
          <'\t! grep "points nowhere" err &&\n'> <'\t(\n'> <'\t\tcd eight &&\n'> <'\t\ttest_must_fail git branch nomore origin\n'> <'\t) 2>err &&\n'> 
          <'\tgrep "dangling symref" err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'show empty remote'>)} 
      {
        (SQ <'\n'> <'\ttest_create_repo empty &&\n'> <'\tgit clone empty empty-clone &&\n'> <'\t(\n'> 
          <'\t\tcd empty-clone &&\n'> <'\t\tgit remote show origin\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-branches requires a remote'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git remote set-branches &&\n'> 
          <'\ttest_must_fail git remote set-branches --add\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-branches'>)} 
      {
        (SQ <'\n'> <'\techo "+refs/heads/*:refs/remotes/scratch/*" >expect.initial &&\n'> 
          <'\tsort <<-\\EOF >expect.add &&\n'> <'\t+refs/heads/*:refs/remotes/scratch/*\n'> <'\t+refs/heads/other:refs/remotes/scratch/other\n'> 
          <'\tEOF\n'> <'\tsort <<-\\EOF >expect.replace &&\n'> <'\t+refs/heads/maint:refs/remotes/scratch/maint\n'> 
          <'\t+refs/heads/master:refs/remotes/scratch/master\n'> <'\t+refs/heads/next:refs/remotes/scratch/next\n'> <'\tEOF\n'> <'\tsort <<-\\EOF >expect.add-two &&\n'> 
          <'\t+refs/heads/maint:refs/remotes/scratch/maint\n'> <'\t+refs/heads/master:refs/remotes/scratch/master\n'> 
          <'\t+refs/heads/next:refs/remotes/scratch/next\n'> <'\t+refs/heads/pu:refs/remotes/scratch/pu\n'> 
          <'\t+refs/heads/t/topic:refs/remotes/scratch/t/topic\n'> <'\tEOF\n'> <'\tsort <<-\\EOF >expect.setup-ffonly &&\n'> 
          <'\trefs/heads/master:refs/remotes/scratch/master\n'> <'\t+refs/heads/next:refs/remotes/scratch/next\n'> <'\tEOF\n'> 
          <'\tsort <<-\\EOF >expect.respect-ffonly &&\n'> <'\trefs/heads/master:refs/remotes/scratch/master\n'> 
          <'\t+refs/heads/next:refs/remotes/scratch/next\n'> <'\t+refs/heads/pu:refs/remotes/scratch/pu\n'> <'\tEOF\n'> <'\n'> <'\tgit clone .git/ setbranches &&\n'> 
          <'\t(\n'> <'\t\tcd setbranches &&\n'> <'\t\tgit remote rename origin scratch &&\n'> 
          <'\t\tgit config --get-all remote.scratch.fetch >config-result &&\n'> <'\t\tsort <config-result >../actual.initial &&\n'> <'\n'> 
          <'\t\tgit remote set-branches scratch --add other &&\n'> <'\t\tgit config --get-all remote.scratch.fetch >config-result &&\n'> 
          <'\t\tsort <config-result >../actual.add &&\n'> <'\n'> <'\t\tgit remote set-branches scratch maint master next &&\n'> 
          <'\t\tgit config --get-all remote.scratch.fetch >config-result &&\n'> <'\t\tsort <config-result >../actual.replace &&\n'> <'\n'> 
          <'\t\tgit remote set-branches --add scratch pu t/topic &&\n'> <'\t\tgit config --get-all remote.scratch.fetch >config-result &&\n'> 
          <'\t\tsort <config-result >../actual.add-two &&\n'> <'\n'> <'\t\tgit config --unset-all remote.scratch.fetch &&\n'> 
          <'\t\tgit config remote.scratch.fetch \\\n'> <'\t\t\trefs/heads/master:refs/remotes/scratch/master &&\n'> 
          <'\t\tgit config --add remote.scratch.fetch \\\n'> <'\t\t\t+refs/heads/next:refs/remotes/scratch/next &&\n'> 
          <'\t\tgit config --get-all remote.scratch.fetch >config-result &&\n'> <'\t\tsort <config-result >../actual.setup-ffonly &&\n'> <'\n'> 
          <'\t\tgit remote set-branches --add scratch pu &&\n'> <'\t\tgit config --get-all remote.scratch.fetch >config-result &&\n'> 
          <'\t\tsort <config-result >../actual.respect-ffonly\n'> <'\t) &&\n'> <'\ttest_cmp expect.initial actual.initial &&\n'> 
          <'\ttest_cmp expect.add actual.add &&\n'> <'\ttest_cmp expect.replace actual.replace &&\n'> <'\ttest_cmp expect.add-two actual.add-two &&\n'> 
          <'\ttest_cmp expect.setup-ffonly actual.setup-ffonly &&\n'> <'\ttest_cmp expect.respect-ffonly actual.respect-ffonly\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-branches with --mirror'>)} 
      {
        (SQ <'\n'> <'\techo "+refs/*:refs/*" >expect.initial &&\n'> 
          <'\techo "+refs/heads/master:refs/heads/master" >expect.replace &&\n'> <'\tgit clone --mirror .git/ setbranches-mirror &&\n'> <'\t(\n'> <'\t\tcd setbranches-mirror &&\n'> 
          <'\t\tgit remote rename origin scratch &&\n'> <'\t\tgit config --get-all remote.scratch.fetch >../actual.initial &&\n'> <'\n'> 
          <'\t\tgit remote set-branches scratch heads/master &&\n'> <'\t\tgit config --get-all remote.scratch.fetch >../actual.replace\n'> <'\t) &&\n'> 
          <'\ttest_cmp expect.initial actual.initial &&\n'> <'\ttest_cmp expect.replace actual.replace\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'new remote'>)} 
      {
        (SQ <'\n'> <'\tgit remote add someremote foo &&\n'> <'\techo foo >expect &&\n'> 
          <'\tgit config --get-all remote.someremote.url >actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (FuncDef
      name: get_url_test
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[1821])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(git)} {(remote)} {(get-url)} {(DQ ($ VSub_At '$@'))}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual)} spids:[1837])]
                    )
                    (C {(test_cmp)} {(expect)} {(actual)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [1816]
        )
      spids: [1811 1815]
    )
    (C {(test_expect_success)} {(SQ <'get-url on new remote'>)} 
      {
        (SQ <'\n'> <'\techo foo | get_url_test someremote &&\n'> 
          <'\techo foo | get_url_test --all someremote &&\n'> <'\techo foo | get_url_test --push someremote &&\n'> 
          <'\techo foo | get_url_test --push --all someremote\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url with locked config'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished "rm -f .git/config.lock" &&\n'> 
          <'\tgit config --get-all remote.someremote.url >expect &&\n'> <'\t>.git/config.lock &&\n'> <'\ttest_must_fail git remote set-url someremote baz &&\n'> 
          <'\tgit config --get-all remote.someremote.url >actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url bar'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url someremote bar &&\n'> <'\techo bar >expect &&\n'> 
          <'\tgit config --get-all remote.someremote.url >actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url baz bar'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url someremote baz bar &&\n'> <'\techo baz >expect &&\n'> 
          <'\tgit config --get-all remote.someremote.url >actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url zot bar'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git remote set-url someremote zot bar &&\n'> 
          <'\techo baz >expect &&\n'> <'\tgit config --get-all remote.someremote.url >actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push zot baz'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git remote set-url --push someremote zot baz &&\n'> 
          <'\techo "YYY" >expect &&\n'> <'\techo baz >>expect &&\n'> 
          <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push zot'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push someremote zot &&\n'> <'\techo zot >expect &&\n'> 
          <'\techo "YYY" >>expect &&\n'> <'\techo baz >>expect &&\n'> <'\tgit config --get-all remote.someremote.pushurl >actual &&\n'> 
          <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'get-url with different urls'>)} 
      {
        (SQ <'\n'> <'\techo baz | get_url_test someremote &&\n'> 
          <'\techo baz | get_url_test --all someremote &&\n'> <'\techo zot | get_url_test --push someremote &&\n'> 
          <'\techo zot | get_url_test --push --all someremote\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push qux zot'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push someremote qux zot &&\n'> <'\techo qux >expect &&\n'> 
          <'\techo "YYY" >>expect &&\n'> <'\techo baz >>expect &&\n'> <'\tgit config --get-all remote.someremote.pushurl >actual &&\n'> 
          <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push foo qu+x'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push someremote foo qu+x &&\n'> <'\techo foo >expect &&\n'> 
          <'\techo "YYY" >>expect &&\n'> <'\techo baz >>expect &&\n'> <'\tgit config --get-all remote.someremote.pushurl >actual &&\n'> 
          <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push --add aaa'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push --add someremote aaa &&\n'> 
          <'\techo foo >expect &&\n'> <'\techo aaa >>expect &&\n'> <'\techo "YYY" >>expect &&\n'> <'\techo baz >>expect &&\n'> 
          <'\tgit config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'get-url on multi push remote'>)} 
      {
        (SQ <'\n'> <'\techo foo | get_url_test --push someremote &&\n'> 
          <'\tget_url_test --push --all someremote <<-\\EOF\n'> <'\tfoo\n'> <'\taaa\n'> <'\tEOF\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push bar aaa'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push someremote bar aaa &&\n'> <'\techo foo >expect &&\n'> 
          <'\techo bar >>expect &&\n'> <'\techo "YYY" >>expect &&\n'> <'\techo baz >>expect &&\n'> 
          <'\tgit config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push --delete bar'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push --delete someremote bar &&\n'> 
          <'\techo foo >expect &&\n'> <'\techo "YYY" >>expect &&\n'> <'\techo baz >>expect &&\n'> 
          <'\tgit config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --push --delete foo'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --push --delete someremote foo &&\n'> 
          <'\techo "YYY" >expect &&\n'> <'\techo baz >>expect &&\n'> 
          <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --add bbb'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --add someremote bbb &&\n'> <'\techo "YYY" >expect &&\n'> 
          <'\techo baz >>expect &&\n'> <'\techo bbb >>expect &&\n'> 
          <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'get-url on multi fetch remote'>)} 
      {
        (SQ <'\n'> <'\techo baz | get_url_test someremote &&\n'> 
          <'\tget_url_test --all someremote <<-\\EOF\n'> <'\tbaz\n'> <'\tbbb\n'> <'\tEOF\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --delete .*'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git remote set-url --delete someremote .\\* &&\n'> 
          <'\techo "YYY" >expect &&\n'> <'\techo baz >>expect &&\n'> <'\techo bbb >>expect &&\n'> 
          <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --delete bbb'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --delete someremote bbb &&\n'> <'\techo "YYY" >expect &&\n'> 
          <'\techo baz >>expect &&\n'> <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> 
          <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --delete baz'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git remote set-url --delete someremote baz &&\n'> 
          <'\techo "YYY" >expect &&\n'> <'\techo baz >>expect &&\n'> 
          <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --add ccc'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --add someremote ccc &&\n'> <'\techo "YYY" >expect &&\n'> 
          <'\techo baz >>expect &&\n'> <'\techo ccc >>expect &&\n'> 
          <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> 
          <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'remote set-url --delete baz'>)} 
      {
        (SQ <'\n'> <'\tgit remote set-url --delete someremote baz &&\n'> <'\techo "YYY" >expect &&\n'> 
          <'\techo ccc >>expect &&\n'> <'\ttest_must_fail git config --get-all remote.someremote.pushurl >actual &&\n'> 
          <'\techo "YYY" >>actual &&\n'> <'\tgit config --get-all remote.someremote.url >>actual &&\n'> <'\tcmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'extra args: setup'>)} 
      {
        (SQ <'\n'> <'\t# add a dummy origin so that this does not trigger failure\n'> 
          <'\tgit remote add origin .\n'>
        )
      }
    )
    (FuncDef
      name: test_extra_arg
      body: 
        (BraceGroup
          children: [
            (C {(test_expect_success)} {(DQ ('extra args: ') ($ VSub_Star '$*'))} 
              {
                (DQ ('\n') ('\t\ttest_must_fail git remote ') ($ VSub_Star '$*') 
                  (' bogus_extra_arg 2>actual &&\n') ("\t\ttest_i18ngrep '^usage:' actual\n") ('\t')
                )
              }
            )
          ]
          spids: [2257]
        )
      spids: [2252 2256]
    )
    (C {(test_extra_arg)} {(add)} {(nick)} {(url)})
    (C {(test_extra_arg)} {(rename)} {(origin)} {(newname)})
    (C {(test_extra_arg)} {(remove)} {(origin)})
    (C {(test_extra_arg)} {(set-head)} {(origin)} {(master)})
    (C {(test_extra_arg)} {(get-url)} {(origin)} {(newurl)})
    (C {(test_extra_arg)} {(set-url)} {(origin)} {(newurl)} {(oldurl)})
    (C {(test_expect_success)} {(SQ <'add remote matching the "insteadOf" URL'>)} 
      {
        (SQ <'\n'> <'\tgit config url.xyz@example.com.insteadOf backup &&\n'> 
          <'\tgit remote add backup xyz@example.com\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)