(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git ls-remote'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\t>file &&\n'> <'\tgit add file &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit -m initial &&\n'> <'\tgit tag mark &&\n'> <'\tgit show-ref --tags -d | sed -e "s/ /\t/" >expected.tag &&\n'> <'\t(\n'> 
          <'\t\techo "$(git rev-parse HEAD)\tHEAD"\n'> <'\t\tgit show-ref -d\t| sed -e "s/ /\t/"\n'> <'\t) >expected.all &&\n'> <'\n'> 
          <'\tgit remote add self "$(pwd)/.git"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'ls-remote --tags .git'>)} 
      {(SQ <'\n'> <'\tgit ls-remote --tags .git >actual &&\n'> <'\ttest_cmp expected.tag actual\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'ls-remote .git'>)} 
      {(SQ <'\n'> <'\tgit ls-remote .git >actual &&\n'> <'\ttest_cmp expected.all actual\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'ls-remote --tags self'>)} 
      {(SQ <'\n'> <'\tgit ls-remote --tags self >actual &&\n'> <'\ttest_cmp expected.tag actual\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'ls-remote self'>)} 
      {(SQ <'\n'> <'\tgit ls-remote self >actual &&\n'> <'\ttest_cmp expected.all actual\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'dies when no remote specified and no default remotes found'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git ls-remote\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'use "origin" when no remote specified'>)} 
      {
        (SQ <'\n'> <'\tURL="$(pwd)/.git" &&\n'> <'\techo "From $URL" >exp_err &&\n'> <'\n'> 
          <'\tgit remote add origin "$URL" &&\n'> <'\tgit ls-remote 2>actual_err >actual &&\n'> <'\n'> <'\ttest_cmp exp_err actual_err &&\n'> 
          <'\ttest_cmp expected.all actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'suppress "From <url>" with -q'>)} 
      {
        (SQ <'\n'> <'\tgit ls-remote -q 2>actual_err &&\n'> 
          <'\ttest_must_fail test_cmp exp_err actual_err\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'use branch.<name>.remote if possible'>)} 
      {
        (SQ <'\n'> <'\t#\n'> 
          <'\t# Test that we are indeed using branch.<name>.remote, not "origin", even\n'> <'\t# though the "origin" remote has been set.\n'> <'\t#\n'> <'\n'> 
          <'\t# setup a new remote to differentiate from "origin"\n'> <'\tgit clone . other.git &&\n'> <'\t(\n'> <'\t\tcd other.git &&\n'> 
          <'\t\techo "$(git rev-parse HEAD)\tHEAD"\n'> <'\t\tgit show-ref\t| sed -e "s/ /\t/"\n'> <'\t) >exp &&\n'> <'\n'> <'\tURL="other.git" &&\n'> 
          <'\techo "From $URL" >exp_err &&\n'> <'\n'> <'\tgit remote add other $URL &&\n'> <'\tgit config branch.master.remote other &&\n'> <'\n'> 
          <'\tgit ls-remote 2>actual_err >actual &&\n'> <'\ttest_cmp exp_err actual_err &&\n'> <'\ttest_cmp exp actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'confuses pattern as remote when no remote specified'>)} 
      {(SQ <'\n'> <'\tcat >exp <<-\\EOF &&\n'> <'\tfatal: '>) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'refs*master'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
        (SQ <' does not appear to be a git repository\n'> 
          <'\tfatal: Could not read from remote repository.\n'> <'\n'> <'\tPlease make sure you have the correct access rights\n'> <'\tand the repository exists.\n'> 
          <'\tEOF\n'> <'\t#\n'> <'\t# Do not expect "git ls-remote <pattern>" to work; ls-remote needs\n'> 
          <'\t# <remote> if you want to feed <pattern>, just like you cannot say\n'> <'\t# fetch <branch>.\n'> <'\t# We could just as easily have used "master"; the "*" emphasizes its\n'> 
          <'\t# role as a pattern.\n'> <'\ttest_must_fail git ls-remote refs*master >actual 2>&1 &&\n'> <'\ttest_i18ncmp exp actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'die with non-2 for wrong repository even with --exit-code'>)} 
      {
        (SQ <'\n'> <'\t{\n'> <'\t\tgit ls-remote --exit-code ./no-such-repository\n'> 
          <'\t\tstatus=$?\n'> <'\t} &&\n'> <'\ttest $status != 2 && test $status != 0\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'Report success even when nothing matches'>)} 
      {
        (SQ <'\n'> <'\tgit ls-remote other.git "refs/nsn/*" >actual &&\n'> <'\t>expect &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'Report no-match with --exit-code'>)} 
      {
        (SQ <'\n'> 
          <'\ttest_expect_code 2 git ls-remote --exit-code other.git "refs/nsn/*" >actual &&\n'> <'\t>expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'Report match with --exit-code'>)} 
      {
        (SQ <'\n'> <'\tgit ls-remote --exit-code other.git "refs/tags/*" >actual &&\n'> 
          <'\tgit ls-remote . tags/mark >expect &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'set up some extra tags for ref hiding'>)} 
      {(SQ <'\n'> <'\tgit tag magic/one &&\n'> <'\tgit tag magic/two\n'>)}
    )
    (ForEach
      iter_name: configsection
      iter_words: [{(transfer)} {(uploadpack)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('Hide some refs with ') ($ VSub_Name '$configsection') (.hiderefs))} 
              {
                (SQ <'\n'> <'\t\ttest_config $configsection.hiderefs refs/tags &&\n'> 
                  <'\t\tgit ls-remote . >actual &&\n'> <'\t\ttest_unconfig $configsection.hiderefs &&\n'> <'\t\tgit ls-remote . |\n'> 
                  <'\t\tsed -e "/\trefs\\/tags\\//d" >expect &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('Override hiding of ') ($ VSub_Name '$configsection') (.hiderefs))} 
              {
                (SQ <'\n'> <'\t\ttest_when_finished "test_unconfig $configsection.hiderefs" &&\n'> 
                  <'\t\tgit config --add $configsection.hiderefs refs/tags &&\n'> <'\t\tgit config --add $configsection.hiderefs "!refs/tags/magic" &&\n'> 
                  <'\t\tgit config --add $configsection.hiderefs refs/tags/magic/one &&\n'> <'\t\tgit ls-remote . >actual &&\n'> <'\t\tgrep refs/tags/magic/two actual &&\n'> 
                  <'\t\t! grep refs/tags/magic/one actual\n'> <'\t'>
                )
              }
            )
          ]
          spids: [280 325]
        )
      spids: [275 16777215]
    )
    (C {(test_expect_success)} {(SQ <'overrides work between mixed transfer/upload-pack hideRefs'>)} 
      {
        (SQ <'\n'> <'\ttest_config uploadpack.hiderefs refs/tags &&\n'> 
          <'\ttest_config transfer.hiderefs "!refs/tags/magic" &&\n'> <'\tgit ls-remote . >actual &&\n'> <'\tgrep refs/tags/magic actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'ls-remote --symref'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tref: refs/heads/master\tHEAD\n'> 
          <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\tHEAD\n'> <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/heads/master\n'> 
          <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/remotes/origin/HEAD\n'> <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/remotes/origin/master\n'> 
          <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/tags/mark\n'> <'\tEOF\n'> <'\tgit ls-remote --symref >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'ls-remote with filtered symref (refname)'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-\\EOF &&\n'> <'\tref: refs/heads/master\tHEAD\n'> 
          <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\tHEAD\n'> <'\tEOF\n'> <'\tgit ls-remote --symref . HEAD >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <'ls-remote with filtered symref (--heads)'>)} 
      {
        (SQ <'\n'> <'\tgit symbolic-ref refs/heads/foo refs/tags/mark &&\n'> 
          <'\tcat >expect <<-\\EOF &&\n'> <'\tref: refs/tags/mark\trefs/heads/foo\n'> 
          <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/heads/foo\n'> <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/heads/master\n'> <'\tEOF\n'> 
          <'\tgit ls-remote --symref --heads . >actual &&\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'ls-remote --symref omits filtered-out matches'>)} 
      {
        (SQ <'\n'> <'\tcat >expect <<-\\EOF &&\n'> 
          <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/heads/foo\n'> <'\t1bd44cb9d13204b0fe1958db0082f5028a16eb3a\trefs/heads/master\n'> <'\tEOF\n'> 
          <'\tgit ls-remote --symref --heads . >actual &&\n'> <'\ttest_cmp expect actual &&\n'> <'\tgit ls-remote --symref . "refs/heads/*" >actual &&\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_lazy_prereq)} {(GIT_DAEMON)} 
      {
        (SQ <'\n'> <'\ttest_tristate GIT_TEST_GIT_DAEMON &&\n'> 
          <'\ttest "$GIT_TEST_GIT_DAEMON" != false\n'>
        )
      }
    )
    (C {(test_expect_success)} {(PIPE) (Lit_Comma ',') (JGIT) (Lit_Comma ',') (GIT_DAEMON)} 
      {(SQ <'indicate no refs in standards-compliant empty remote'>)} 
      {
        (SQ <'\n'> <'\tJGIT_DAEMON_PORT=${JGIT_DAEMON_PORT-${this_test#t}} &&\n'> 
          <'\tJGIT_DAEMON_PID= &&\n'> <'\tgit init --bare empty.git &&\n'> <'\t>empty.git/git-daemon-export-ok &&\n'> 
          <'\tmkfifo jgit_daemon_output &&\n'> <'\t{\n'> <'\t\tjgit daemon --port="$JGIT_DAEMON_PORT" . >jgit_daemon_output &\n'> 
          <'\t\tJGIT_DAEMON_PID=$!\n'> <'\t} &&\n'> <'\ttest_when_finished kill "$JGIT_DAEMON_PID" &&\n'> <'\t{\n'> <'\t\tread line &&\n'> 
          <'\t\tcase $line in\n'> <'\t\tExporting*)\n'> <'\t\t\t;;\n'> <'\t\t*)\n'> <'\t\t\techo "Expected: Exporting" &&\n'> 
          <'\t\t\tfalse;;\n'> <'\t\tesac &&\n'> <'\t\tread line &&\n'> <'\t\tcase $line in\n'> <'\t\t"Listening on"*)\n'> 
          <'\t\t\t;;\n'> <'\t\t*)\n'> <'\t\t\techo "Expected: Listening on" &&\n'> <'\t\t\tfalse;;\n'> <'\t\tesac\n'> 
          <'\t} <jgit_daemon_output &&\n'> <'\t# --exit-code asks the command to exit with 2 when no\n'> <'\t# matching refs are found.\n'> 
          <
'\ttest_expect_code 2 git ls-remote --exit-code git://localhost:$JGIT_DAEMON_PORT/empty.git\n'
          >
        )
      }
    )
    (C {(test_done)})
  ]
)