(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:[671])
        (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: [679 681]
                ) ("/one\n") ("  Push  URL: ") 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub "$(">
                  spids: [684 686]
                ) ("/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: [674]
        )
      ]
    )
    (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:[795])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("refs/remotes/origin/side2\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [798]
        )
      ]
    )
    (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:[823])
        (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: [831 833]
                ) ("/one\n") (" * [would prune] origin/side2\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [826]
        )
      ]
    )
    (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:[1123])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("some-tag\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1126]
        )
      ]
    )
    (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:[1163])
        (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: [1166]
        )
      ]
    )
    (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:[1195])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("--no-tags\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1198]
        )
      ]
    )
    (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:[1246])
        (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: [1249]
        )
      ]
    )
    (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:[1275])
        (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: [1278]
        )
      ]
    )
    (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:[1335])
        (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: [1338]
        )
      ]
    )
    (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:[1367])
        (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: [1370]
        )
      ]
    )
    (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:[1534])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {
              (DQ ("URL: ") 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub "$(">
                  spids: [1541 1543]
                ) ("/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: [1537]
        )
      ]
    )
    (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:[1817])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(git)} {(remote)} {(get-url)} {(DQ ($ VSub_At "$@"))}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual)} spids:[1833])]
                    )
                    (C {(test_cmp)} {(expect)} {(actual)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [1812]
        )
      spids: [1807 1811]
    )
    (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: [2253]
        )
      spids: [2248 2252]
    )
    (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)})
  ]
)