(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {(SQ (Token id:Id.Lit_Chars val:'Test git update-ref and basic ref logging' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:Z)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$_z40')}
          spids: [23]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:32) (Token id:Id.Lit_Chars val:'\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\tfor name in A B C D E F\n' span_id:34) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\t\tT=$(git write-tree) &&\n' span_id:37) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsha1=$(echo $name | git commit-tree $T) &&\n'
            span_id: 38
          ) (Token id:Id.Lit_Chars val:'\t\teval $name=$sha1\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\tdone\n' span_id:40) (Token id:Id.Lit_Chars val:'\n' span_id:41)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:m)
          op: assign_op.Equal
          rhs: {(refs/heads/master)}
          spids: [45]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:n_dir)
          op: assign_op.Equal
          rhs: {(refs/heads/gu)}
          spids: [48]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:n)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$n_dir') (/fixes)}
          spids: [51]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:outside)
          op: assign_op.Equal
          rhs: {(refs/foo)}
          spids: [55]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m'))} 
      {
        (DQ ('git update-ref ') ($ Id.VSub_DollarName '$m') (' ') ($ Id.VSub_DollarName '$A') (' &&\n') 
          ('\t test ') ($ Id.VSub_DollarName '$A')
        ) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:80)) (DQ ($ Id.VSub_DollarName '$m')) 
        (SQ (Token id:Id.Lit_Chars val:')' span_id:86))
      }
    )
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m'))} 
      {
        (DQ ('git update-ref ') ($ Id.VSub_DollarName '$m') (' ') ($ Id.VSub_DollarName '$B') (' ') 
          ($ Id.VSub_DollarName '$A') (' &&\n') ('\t test ') ($ Id.VSub_DollarName '$B')
        ) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:112)) (DQ ($ Id.VSub_DollarName '$m')) 
        (SQ (Token id:Id.Lit_Chars val:')' span_id:118))
      }
    )
    (C {(test_expect_success)} 
      {(DQ ('fail to delete ') ($ Id.VSub_DollarName '$m') (' with stale ref'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:130) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -d $m $A &&\n'
            span_id: 131
          ) (Token id:Id.Lit_Chars val:'\ttest $B = "$(cat .git/$m)"\n' span_id:132)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('delete ') ($ Id.VSub_DollarName '$m'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d $m $B &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\t! test -f .git/$m\n' span_id:145)
        )
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')})
    (C {(test_expect_success)} 
      {(DQ ('delete ') ($ Id.VSub_DollarName '$m') (' without oldvalue verification'))} 
      {
        (DQ ('\n') ('\tgit update-ref ') ($ Id.VSub_DollarName '$m') (' ') ($ Id.VSub_DollarName '$A') 
          (' &&\n') ('\ttest ') ($ Id.VSub_DollarName '$A') (' = ') 
          (word_part.EscapedLiteral
            token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:174)
          ) ('(cat .git/') ($ Id.VSub_DollarName '$m') (') &&\n') ('\tgit update-ref -d ') 
          ($ Id.VSub_DollarName '$m') (' &&\n') ('\t! test -f .git/') ($ Id.VSub_DollarName '$m') ('\n')
        )
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')})
    (C {(test_expect_success)} {(DQ ('fail to create ') ($ Id.VSub_DollarName '$n'))} 
      {
        (DQ ('touch .git/') ($ Id.VSub_DollarName '$n_dir') (' &&\n') 
          ('\t test_must_fail git update-ref ') ($ Id.VSub_DollarName '$n') (' ') ($ Id.VSub_DollarName '$A') (' >out 2>err')
        )
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$n_dir')} {(out)} {(err)})
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m') (' (by HEAD)'))} 
      {
        (DQ ('git update-ref HEAD ') ($ Id.VSub_DollarName '$A') (' &&\n') ('\t test ') 
          ($ Id.VSub_DollarName '$A')
        ) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:248)) (DQ ($ Id.VSub_DollarName '$m')) 
        (SQ (Token id:Id.Lit_Chars val:')' span_id:254))
      }
    )
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m') (' (by HEAD)'))} 
      {
        (DQ ('git update-ref HEAD ') ($ Id.VSub_DollarName '$B') (' ') ($ Id.VSub_DollarName '$A') 
          (' &&\n') ('\t test ') ($ Id.VSub_DollarName '$B')
        ) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:279)) (DQ ($ Id.VSub_DollarName '$m')) 
        (SQ (Token id:Id.Lit_Chars val:')' span_id:285))
      }
    )
    (C {(test_expect_success)} 
      {(DQ ('fail to delete ') ($ Id.VSub_DollarName '$m') (' (by HEAD) with stale ref'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:297) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -d HEAD $A &&\n'
            span_id: 298
          ) (Token id:Id.Lit_Chars val:'\ttest $B = $(cat .git/$m)\n' span_id:299)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('delete ') ($ Id.VSub_DollarName '$m') (' (by HEAD)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:311) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d HEAD $B &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\t! test -f .git/$m\n' span_id:313)
        )
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-ref does not create reflogs by default' span_id:327))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:331) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d $outside" &&\n'
            span_id: 332
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref $outside $A &&\n' span_id:333) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $A >expect &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\tgit rev-parse $outside >actual &&\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\ttest_must_fail git reflog exists $outside\n' span_id:337)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-ref creates reflogs with --create-reflog' span_id:344))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:348) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d $outside" &&\n'
            span_id: 349
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref --create-reflog $outside $A &&\n' span_id:350) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $A >expect &&\n' span_id:351) (Token id:Id.Lit_Chars val:'\tgit rev-parse $outside >actual &&\n' span_id:352) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:353) (Token id:Id.Lit_Chars val:'\tgit reflog exists $outside\n' span_id:354)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m') (' (by HEAD)'))} 
      {
        (DQ ('git update-ref HEAD ') ($ Id.VSub_DollarName '$A') (' &&\n') ('\t test ') 
          ($ Id.VSub_DollarName '$A')
        ) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:378)) (DQ ($ Id.VSub_DollarName '$m')) 
        (SQ (Token id:Id.Lit_Chars val:')' span_id:384))
      }
    )
    (C {(test_expect_success)} {(DQ ('pack refs'))} {(DQ ('git pack-refs --all'))})
    (C {(test_expect_success)} {(DQ ('move ') ($ Id.VSub_DollarName '$m') (' (by HEAD)'))} 
      {
        (DQ ('git update-ref HEAD ') ($ Id.VSub_DollarName '$B') (' ') ($ Id.VSub_DollarName '$A') 
          (' &&\n') ('\t test ') ($ Id.VSub_DollarName '$B')
        ) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:423)) (DQ ($ Id.VSub_DollarName '$m')) 
        (SQ (Token id:Id.Lit_Chars val:')' span_id:429))
      }
    )
    (C {(test_expect_success)} 
      {
        (DQ ('delete ') ($ Id.VSub_DollarName '$m') (' (by HEAD) should remove both packed and loose ') 
          ($ Id.VSub_DollarName '$m')
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d HEAD $B &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\t! grep "$m" .git/packed-refs &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\t! test -f .git/$m\n' span_id:445)
        )
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')})
    (C {(cp)} {(-f)} {(.git/HEAD)} {(.git/HEAD.orig)})
    (C {(test_expect_success)} {(DQ ('delete symref without dereference'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:471) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d HEAD &&\n'
            span_id: 472
          ) (Token id:Id.Lit_Chars val:'\t! test -f .git/HEAD\n' span_id:473)
        )
      }
    )
    (C {(cp)} {(-f)} {(.git/HEAD.orig)} {(.git/HEAD)})
    (C {(test_expect_success)} 
      {(DQ ('delete symref without dereference when the referred ref is packed'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:492) 
          (Token id:Id.Lit_Chars val:'\techo foo >foo.c &&\n' span_id:493) (Token id:Id.Lit_Chars val:'\tgit add foo.c &&\n' span_id:494) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m foo &&\n' span_id:495) (Token id:Id.Lit_Chars val:'\tgit pack-refs --all &&\n' span_id:496) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d HEAD &&\n'
            span_id: 497
          ) (Token id:Id.Lit_Chars val:'\t! test -f .git/HEAD\n' span_id:498)
        )
      }
    )
    (C {(cp)} {(-f)} {(.git/HEAD.orig)} {(.git/HEAD)})
    (C {(git)} {(update-ref)} {(-d)} {($ Id.VSub_DollarName '$m')})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-ref -d is not confused by self-reference' span_id:521))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:525) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref refs/heads/self refs/heads/self &&\n'
            span_id: 526
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/self" &&\n' span_id:527) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_file .git/refs/heads/self &&\n'
            span_id: 528
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref -d refs/heads/self &&\n' span_id:529) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_file .git/refs/heads/self\n'
            span_id: 530
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --no-deref -d can delete self-reference'
            span_id: 537
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:541) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref refs/heads/self refs/heads/self &&\n'
            span_id: 542
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/self" &&\n' span_id:543) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_file .git/refs/heads/self &&\n'
            span_id: 544
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref --no-deref -d refs/heads/self &&\n' span_id:545) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_path_is_missing .git/refs/heads/self\n'
            span_id: 546
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'update-ref --no-deref -d can delete reference to bad ref'
            span_id: 553
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:557) 
          (Token id:Id.Lit_Chars val:'\t>.git/refs/heads/bad &&\n' span_id:558) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f .git/refs/heads/bad" &&\n' span_id:559) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref refs/heads/ref-to-bad refs/heads/bad &&\n'
            span_id: 560
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -f .git/refs/heads/ref-to-bad" &&\n'
            span_id: 561
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_file .git/refs/heads/ref-to-bad &&\n' span_id:562) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref --no-deref -d refs/heads/ref-to-bad &&\n'
            span_id: 563
          ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/heads/ref-to-bad\n' span_id:564)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'(not) create HEAD with old sha1' span_id:571))} 
      {
        (DQ ('\n') ('\ttest_must_fail git update-ref HEAD ') ($ Id.VSub_DollarName '$A') (' ') 
          ($ Id.VSub_DollarName '$B') ('\n')
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('(not) prior created .git/') ($ Id.VSub_DollarName '$m'))} 
      {(DQ ('\n') ('\t! test -f .git/') ($ Id.VSub_DollarName '$m') ('\n'))}
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')})
    (C {(test_expect_success)} {(DQ ('create HEAD'))} 
      {(DQ ('git update-ref HEAD ') ($ Id.VSub_DollarName '$A'))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'(not) change HEAD with wrong SHA1' span_id:623))} 
      {
        (DQ ('\n') ('\ttest_must_fail git update-ref HEAD ') ($ Id.VSub_DollarName '$B') (' ') 
          ($ Id.VSub_DollarName '$Z') ('\n')
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('(not) changed .git/') ($ Id.VSub_DollarName '$m'))} 
      {(DQ ('\n') ('\t! test ') ($ Id.VSub_DollarName '$B')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:648)) (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')\n' span_id:654))
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')})
    (C {(rm)} {(-f)} {(.git/logs/refs/heads/master)})
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m') (' (logged by touch)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_COMMITTER_DATE="2005-05-26 23:30" \\\n' span_id:684) 
          (Token id:Id.Lit_Chars val:'\t git update-ref --create-reflog HEAD ' span_id:685)
        ) (DQ ($ Id.VSub_DollarName '$A')) 
        (SQ (Token id:Id.Lit_Chars val:' -m "Initial Creation" &&\n' span_id:691) 
          (Token id:Id.Lit_Chars val:'\t test ' span_id:692)
        ) (DQ ($ Id.VSub_DollarName '$A')) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:698)) 
        (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')' span_id:704))
      }
    )
    (C {(test_expect_success)} {(DQ ('update ') ($ Id.VSub_DollarName '$m') (' (logged by touch)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_COMMITTER_DATE="2005-05-26 23:31" \\\n' span_id:720) 
          (Token id:Id.Lit_Chars val:'\t git update-ref HEAD' span_id:721)
        ) (DQ (' ') ($ Id.VSub_DollarName '$B') (' ') ($ Id.VSub_DollarName '$A') (' ')) 
        (SQ (Token id:Id.Lit_Chars val:'-m "Switch" &&\n' span_id:731) 
          (Token id:Id.Lit_Chars val:'\t test ' span_id:732)
        ) (DQ ($ Id.VSub_DollarName '$B')) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:738)) 
        (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')' span_id:744))
      }
    )
    (C {(test_expect_success)} {(DQ ('set ') ($ Id.VSub_DollarName '$m') (' (logged by touch)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_COMMITTER_DATE="2005-05-26 23:41" \\\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\t git update-ref HEAD' span_id:761)
        ) (DQ (' ') ($ Id.VSub_DollarName '$A') (' &&\n') ('\t test ') ($ Id.VSub_DollarName '$A')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:771)) (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')' span_id:777))
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:783)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:786)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 814
          stdin_parts: [
            ($ Id.VSub_DollarName '$Z')
            (' ')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150200 +0000\tInitial Creation\n')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$B')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150260 +0000\tSwitch\n')
            ($ Id.VSub_DollarName '$B')
            (' ')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150860 +0000\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('verifying ') ($ Id.VSub_DollarName '$m') ("'s log"))} 
      {(DQ ('test_cmp expect .git/logs/') ($ Id.VSub_DollarName '$m'))}
    )
    (C {(rm)} {(-rf)} {(.git/) ($ Id.VSub_DollarName '$m')} {(.git/logs)} {(expect)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'enable core.logAllRefUpdates' span_id:849))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git config core.logAllRefUpdates true &&\n' span_id:855) 
          (Token
            id: Id.Lit_Chars
            val: '\t test true = $(git config --bool --get core.logAllRefUpdates)'
            span_id: 856
          )
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('create ') ($ Id.VSub_DollarName '$m') (' (logged by config)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_COMMITTER_DATE="2005-05-26 23:32" \\\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\t git update-ref HEAD' span_id:874)
        ) (DQ (' ') ($ Id.VSub_DollarName '$A') (' ')) 
        (SQ (Token id:Id.Lit_Chars val:'-m "Initial Creation" &&\n' span_id:882) 
          (Token id:Id.Lit_Chars val:'\t test ' span_id:883)
        ) (DQ ($ Id.VSub_DollarName '$A')) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:889)) 
        (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')' span_id:895))
      }
    )
    (C {(test_expect_success)} {(DQ ('update ') ($ Id.VSub_DollarName '$m') (' (logged by config)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_COMMITTER_DATE="2005-05-26 23:33" \\\n' span_id:911) 
          (Token id:Id.Lit_Chars val:'\t git update-ref HEAD' span_id:912)
        ) (DQ (' ') ($ Id.VSub_DollarName '$B') (' ') ($ Id.VSub_DollarName '$A') (' ')) 
        (SQ (Token id:Id.Lit_Chars val:'-m "Switch" &&\n' span_id:922) 
          (Token id:Id.Lit_Chars val:'\t test ' span_id:923)
        ) (DQ ($ Id.VSub_DollarName '$B')) (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:929)) 
        (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')' span_id:935))
      }
    )
    (C {(test_expect_success)} {(DQ ('set ') ($ Id.VSub_DollarName '$m') (' (logged by config)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_COMMITTER_DATE="2005-05-26 23:43" \\\n' span_id:951) 
          (Token id:Id.Lit_Chars val:'\t git update-ref HEAD ' span_id:952)
        ) (DQ ($ Id.VSub_DollarName '$A') (' &&\n') ('\t test ') ($ Id.VSub_DollarName '$A')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat .git/' span_id:961)) (DQ ($ Id.VSub_DollarName '$m')) (SQ (Token id:Id.Lit_Chars val:')' span_id:967))
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:973)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:976)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1004
          stdin_parts: [
            ($ Id.VSub_DollarName '$Z')
            (' ')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150320 +0000\tInitial Creation\n')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$B')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150380 +0000\tSwitch\n')
            ($ Id.VSub_DollarName '$B')
            (' ')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150980 +0000\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('verifying ') ($ Id.VSub_DollarName '$m') ("'s log"))} 
      {(SQ (Token id:Id.Lit_Chars val:'test_cmp expect .git/logs/$m' span_id:1018))}
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')} {(.git/logs/) ($ Id.VSub_DollarName '$m')} 
      {(expect)}
    )
    (C {(git)} {(update-ref)} {($ Id.VSub_DollarName '$m')} {($ Id.VSub_DollarName '$D')})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1044)
          fd: -1
          arg_word: {(.git/logs/) ($ Id.VSub_DollarName '$m')}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1048)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1091
          stdin_parts: [
            ('0000000000000000000000000000000000000000 ')
            ($ Id.VSub_DollarName '$C')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150320 -0500\n')
            ($ Id.VSub_DollarName '$C')
            (' ')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150350 -0500\n')
            ($ Id.VSub_DollarName '$A')
            (' ')
            ($ Id.VSub_DollarName '$B')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150380 -0500\n')
            ($ Id.VSub_DollarName '$F')
            (' ')
            ($ Id.VSub_DollarName '$Z')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150680 -0500\n')
            ($ Id.VSub_DollarName '$Z')
            (' ')
            ($ Id.VSub_DollarName '$E')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150980 -0500\n')
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ed)
          op: assign_op.Equal
          rhs: {(DQ ('Thu, 26 May 2005 18:32:00 -0500'))}
          spids: [1093]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:gd)
          op: assign_op.Equal
          rhs: {(DQ ('Thu, 26 May 2005 18:33:00 -0500'))}
          spids: [1098]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ld)
          op: assign_op.Equal
          rhs: {(DQ ('Thu, 26 May 2005 18:43:00 -0500'))}
          spids: [1103]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Query "master@{May 25 2005}" (before history)' span_id:1113))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1119) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{May 25 2005}" >o 2>e &&\n'
            span_id: 1120
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1121)
        ) (DQ ($ Id.VSub_DollarName '$C')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1127) 
          (Token id:Id.Lit_Chars val:'\t test "warning: Log for ' span_id:1128)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1130)) (master) 
        (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1132)) (SQ (Token id:Id.Lit_Chars val:' only goes back to $ed." = "$(cat e)"' span_id:1134))
      }
    )
    (C {(test_expect_success)} {(DQ ('Query master@{2005-05-25} (before history)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1148) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify master@{2005-05-25} >o 2>e &&\n'
            span_id: 1149
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1150)
        ) (DQ ($ Id.VSub_DollarName '$C')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1156) 
          (Token id:Id.Lit_Chars val:'\t echo test "warning: Log for ' span_id:1157)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1159)) (master) 
        (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1161)) (SQ (Token id:Id.Lit_Chars val:' only goes back to $ed." = "$(cat e)"' span_id:1163))
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{May 26 2005 23:31:59}" (1 second before history)'
            span_id: 1171
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1177) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{May 26 2005 23:31:59}" >o 2>e &&\n'
            span_id: 1178
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1179)
        ) (DQ ($ Id.VSub_DollarName '$C')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1185) 
          (Token id:Id.Lit_Chars val:'\t test "warning: Log for ' span_id:1186)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1188)) 
        (SQ (Token id:Id.Lit_Chars val:master span_id:1190)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1192)) 
        (SQ (Token id:Id.Lit_Chars val:' only goes back to $ed." = "$(cat e)"' span_id:1194))
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{May 26 2005 23:32:00}" (exactly history start)'
            span_id: 1202
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1208) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{May 26 2005 23:32:00}" >o 2>e &&\n'
            span_id: 1209
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1210)
        ) (DQ ($ Id.VSub_DollarName '$C')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1216) 
          (Token id:Id.Lit_Chars val:'\t test "" = "$(cat e)"' span_id:1217)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{May 26 2005 23:32:30}" (first non-creation change)'
            span_id: 1225
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1231) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{May 26 2005 23:32:30}" >o 2>e &&\n'
            span_id: 1232
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1233)
        ) (DQ ($ Id.VSub_DollarName '$A')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1239) 
          (Token id:Id.Lit_Chars val:'\t test "" = "$(cat e)"' span_id:1240)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{2005-05-26 23:33:01}" (middle of history with gap)'
            span_id: 1248
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1254) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{2005-05-26 23:33:01}" >o 2>e &&\n'
            span_id: 1255
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1256)
        ) (DQ ($ Id.VSub_DollarName '$B')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1262) 
          (Token id:Id.Lit_Chars val:'\t test "warning: Log for ref ' span_id:1263)
        ) (DQ ($ Id.VSub_DollarName '$m') (' has gap after ') ($ Id.VSub_DollarName '$gd')) 
        (SQ (Token id:Id.Lit_Chars val:'." = "$(cat e)"' span_id:1271))
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{2005-05-26 23:38:00}" (middle of history)'
            span_id: 1279
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1285) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{2005-05-26 23:38:00}" >o 2>e &&\n'
            span_id: 1286
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1287)
        ) (DQ ($ Id.VSub_DollarName '$Z')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1293) 
          (Token id:Id.Lit_Chars val:'\t test "" = "$(cat e)"' span_id:1294)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{2005-05-26 23:43:00}" (exact end of history)'
            span_id: 1302
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1308) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{2005-05-26 23:43:00}" >o 2>e &&\n'
            span_id: 1309
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1310)
        ) (DQ ($ Id.VSub_DollarName '$E')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1316) 
          (Token id:Id.Lit_Chars val:'\t test "" = "$(cat e)"' span_id:1317)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Query "master@{2005-05-28}" (past end of history)'
            span_id: 1325
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f o e &&\n' span_id:1331) 
          (Token
            id: Id.Lit_Chars
            val: '\t git rev-parse --verify "master@{2005-05-28}" >o 2>e &&\n'
            span_id: 1332
          ) (Token id:Id.Lit_Chars val:'\t test ' span_id:1333)
        ) (DQ ($ Id.VSub_DollarName '$D')) 
        (SQ (Token id:Id.Lit_Chars val:' = $(cat o) &&\n' span_id:1339) 
          (Token id:Id.Lit_Chars val:'\t test "warning: Log for ref ' span_id:1340)
        ) (DQ ($ Id.VSub_DollarName '$m') (' unexpectedly ended on ') ($ Id.VSub_DollarName '$ld')) 
        (SQ (Token id:Id.Lit_Chars val:'." = "$(cat e)"' span_id:1348))
      }
    )
    (C {(rm)} {(-f)} {(.git/) ($ Id.VSub_DollarName '$m')} {(.git/logs/) ($ Id.VSub_DollarName '$m')} 
      {(expect)}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'creating initial files' span_id:1371))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo TEST >F &&\n' span_id:1377) 
          (Token id:Id.Lit_Chars val:'     git add F &&\n' span_id:1378) (Token id:Id.Lit_Chars val:'\t GIT_AUTHOR_DATE="2005-05-26 23:30" \\\n' span_id:1379) 
          (Token
            id: Id.Lit_Chars
            val: '\t GIT_COMMITTER_DATE="2005-05-26 23:30" git commit -m add -a &&\n'
            span_id: 1380
          ) (Token id:Id.Lit_Chars val:'\t h_TEST=$(git rev-parse --verify HEAD) &&\n' span_id:1381) 
          (Token
            id: Id.Lit_Chars
            val: '\t echo The other day this did not work. >M &&\n'
            span_id: 1382
          ) (Token id:Id.Lit_Chars val:'\t echo And then Bob told me how to fix it. >>M &&\n' span_id:1383) 
          (Token id:Id.Lit_Chars val:'\t echo OTHER >F &&\n' span_id:1384) (Token id:Id.Lit_Chars val:'\t GIT_AUTHOR_DATE="2005-05-26 23:41" \\\n' span_id:1385) 
          (Token
            id: Id.Lit_Chars
            val: '\t GIT_COMMITTER_DATE="2005-05-26 23:41" git commit -F M -a &&\n'
            span_id: 1386
          ) (Token id:Id.Lit_Chars val:'\t h_OTHER=$(git rev-parse --verify HEAD) &&\n' span_id:1387) 
          (Token
            id: Id.Lit_Chars
            val: '\t GIT_AUTHOR_DATE="2005-05-26 23:44" \\\n'
            span_id: 1388
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t GIT_COMMITTER_DATE="2005-05-26 23:44" git commit --amend &&\n'
            span_id: 1389
          ) (Token id:Id.Lit_Chars val:'\t h_FIXED=$(git rev-parse --verify HEAD) &&\n' span_id:1390) 
          (Token
            id: Id.Lit_Chars
            val: '\t echo Merged initial commit and a later commit. >M &&\n'
            span_id: 1391
          ) (Token id:Id.Lit_Chars val:'\t echo $h_TEST >.git/MERGE_HEAD &&\n' span_id:1392) 
          (Token
            id: Id.Lit_Chars
            val: '\t GIT_AUTHOR_DATE="2005-05-26 23:45" \\\n'
            span_id: 1393
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t GIT_COMMITTER_DATE="2005-05-26 23:45" git commit -F M &&\n'
            span_id: 1394
          ) (Token id:Id.Lit_Chars val:'\t h_MERGED=$(git rev-parse --verify HEAD) &&\n' span_id:1395) 
          (Token id:Id.Lit_Chars val:'\t rm -f M' span_id:1396)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1402)
          fd: -1
          arg_word: {(expect)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1405)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1441
          stdin_parts: [
            ($ Id.VSub_DollarName '$Z')
            (' ')
            ($ Id.VSub_DollarName '$h_TEST')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150200 +0000\tcommit (initial): add\n')
            ($ Id.VSub_DollarName '$h_TEST')
            (' ')
            ($ Id.VSub_DollarName '$h_OTHER')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117150860 +0000\tcommit: The other day this did not work.\n')
            ($ Id.VSub_DollarName '$h_OTHER')
            (' ')
            ($ Id.VSub_DollarName '$h_FIXED')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117151040 +0000\tcommit (amend): The other day this did not work.\n')
            ($ Id.VSub_DollarName '$h_FIXED')
            (' ')
            ($ Id.VSub_DollarName '$h_MERGED')
            (' ')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_NAME')
            (' <')
            ($ Id.VSub_DollarName '$GIT_COMMITTER_EMAIL')
            ('> 1117151100 +0000\tcommit (merge): Merged initial commit and a later commit.\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git commit logged updates' span_id:1447))} {(DQ ('test_cmp expect .git/logs/') ($ Id.VSub_DollarName '$m'))}
    )
    (C {(unset)} {(h_TEST)} {(h_OTHER)} {(h_FIXED)} {(h_MERGED)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git cat-file blob master:F (expect OTHER)' span_id:1473))} {(SQ (Token id:Id.Lit_Chars val:'test OTHER = $(git cat-file blob master:F)' span_id:1479))}
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file blob master@{2005-05-26 23:30}:F (expect TEST)'
            span_id: 1487
          )
        )
      } 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test TEST = $(git cat-file blob "master@{2005-05-26 23:30}:F")'
            span_id: 1493
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git cat-file blob master@{2005-05-26 23:42}:F (expect OTHER)'
            span_id: 1501
          )
        )
      } 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test OTHER = $(git cat-file blob "master@{2005-05-26 23:42}:F")'
            span_id: 1507
          )
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:a)
          op: assign_op.Equal
          rhs: {(refs/heads/a)}
          spids: [1511]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:b)
          op: assign_op.Equal
          rhs: {(refs/heads/b)}
          spids: [1514]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:c)
          op: assign_op.Equal
          rhs: {(refs/heads/c)}
          spids: [1517]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:E)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'""' span_id:1522))}
          spids: [1520]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:F)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'%s\\0' span_id:1527))}
          spids: [1525]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:pws)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'path with space' span_id:1532))}
          spids: [1530]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stdin test setup' span_id:1539))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1543) 
          (Token id:Id.Lit_Chars val:'\techo "$pws" >"$pws" &&\n' span_id:1544) (Token id:Id.Lit_Chars val:'\tgit add -- "$pws" &&\n' span_id:1545) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "$pws"\n' span_id:1546)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'-z fails without --stdin' span_id:1553))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1557) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z $m $m $m 2>err &&\n'
            span_id: 1558
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "usage: git update-ref" err\n' span_id:1559)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin works with no input' span_id:1566))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1570) 
          (Token id:Id.Lit_Chars val:'\t>stdin &&\n' span_id:1571) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1572) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify -q $m\n' span_id:1573)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on empty line' span_id:1580))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1584) 
          (Token id:Id.Lit_Chars val:'\techo "" >stdin &&\n' span_id:1585) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1586) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: empty command in input" err\n'
            span_id: 1587
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on only whitespace' span_id:1594))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1598) 
          (Token id:Id.Lit_Chars val:'\techo " " >stdin &&\n' span_id:1599) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1600) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: whitespace before command:  " err\n'
            span_id: 1601
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on leading whitespace' span_id:1608))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1612) 
          (Token id:Id.Lit_Chars val:'\techo " create $a $m" >stdin &&\n' span_id:1613) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1614) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: whitespace before command:  create $a $m" err\n'
            span_id: 1615
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on unknown command' span_id:1622))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1626) 
          (Token id:Id.Lit_Chars val:'\techo "unknown $a" >stdin &&\n' span_id:1627) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1628) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: unknown command: unknown $a" err\n'
            span_id: 1629
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on unbalanced quotes' span_id:1636))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1640) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create $a \\"master" >stdin &&\n'
            span_id: 1641
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1642) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: badly quoted argument: \\\\\\"master" err\n'
            span_id: 1643
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on invalid escape' span_id:1650))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1654) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create $a \\"ma\\zter\\"" >stdin &&\n'
            span_id: 1655
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1656) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: badly quoted argument: \\\\\\"ma\\\\\\\\zter\\\\\\"" err\n'
            span_id: 1657
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails on junk after quoted argument' span_id:1664))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1668) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create \\"$a\\"master" >stdin &&\n'
            span_id: 1669
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1670) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgrep "fatal: unexpected character after quoted argument: \\\\\\"$a\\\\\\"master" err\n'
            span_id: 1671
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails create with no ref' span_id:1678))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1682) 
          (Token id:Id.Lit_Chars val:'\techo "create " >stdin &&\n' span_id:1683) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1684) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create: missing <ref>" err\n'
            span_id: 1685
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails create with no new value' span_id:1692))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1696) 
          (Token id:Id.Lit_Chars val:'\techo "create $a" >stdin &&\n' span_id:1697) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1698) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create $a: missing <newvalue>" err\n'
            span_id: 1699
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails create with too many arguments' span_id:1706))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1710) 
          (Token id:Id.Lit_Chars val:'\techo "create $a $m $m" >stdin &&\n' span_id:1711) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1712) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create $a: extra input:  $m" err\n'
            span_id: 1713
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails update with no ref' span_id:1720))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1724) 
          (Token id:Id.Lit_Chars val:'\techo "update " >stdin &&\n' span_id:1725) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1726) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update: missing <ref>" err\n'
            span_id: 1727
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails update with no new value' span_id:1734))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1738) 
          (Token id:Id.Lit_Chars val:'\techo "update $a" >stdin &&\n' span_id:1739) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1740) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $a: missing <newvalue>" err\n'
            span_id: 1741
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails update with too many arguments' span_id:1748))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1752) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "update $a $m $m $m" >stdin &&\n'
            span_id: 1753
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1754) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $a: extra input:  $m" err\n'
            span_id: 1755
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails delete with no ref' span_id:1762))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1766) 
          (Token id:Id.Lit_Chars val:'\techo "delete " >stdin &&\n' span_id:1767) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1768) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: delete: missing <ref>" err\n'
            span_id: 1769
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails delete with too many arguments' span_id:1776))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1780) 
          (Token id:Id.Lit_Chars val:'\techo "delete $a $m $m" >stdin &&\n' span_id:1781) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1782) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: delete $a: extra input:  $m" err\n'
            span_id: 1783
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails verify with too many arguments' span_id:1790))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1794) 
          (Token id:Id.Lit_Chars val:'\techo "verify $a $m $m" >stdin &&\n' span_id:1795) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1796) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: verify $a: extra input:  $m" err\n'
            span_id: 1797
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails option with unknown name' span_id:1804))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1808) 
          (Token id:Id.Lit_Chars val:'\techo "option unknown" >stdin &&\n' span_id:1809) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1810) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: option unknown: unknown" err\n'
            span_id: 1811
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin fails with duplicate refs' span_id:1818))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1822) 
          (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:1823) (Token id:Id.Lit_Chars val:'\tcreate $a $m\n' span_id:1824) 
          (Token id:Id.Lit_Chars val:'\tcreate $b $m\n' span_id:1825) (Token id:Id.Lit_Chars val:'\tcreate $a $m\n' span_id:1826) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1827) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1828) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: multiple updates for ref '
            span_id: 1829
          )
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$a' span_id:1835)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:' not allowed." err\n' span_id:1841))
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'stdin create ref works' span_id:1848))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1852) 
          (Token id:Id.Lit_Chars val:'\techo "create $a $m" >stdin &&\n' span_id:1853) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1854) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1855) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:1856) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1857)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin does not create reflogs by default' span_id:1864))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1868) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git update-ref -d $outside" &&\n'
            span_id: 1869
          ) (Token id:Id.Lit_Chars val:'\techo "create $outside $m" >stdin &&\n' span_id:1870) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1871) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1872) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $outside >actual &&\n' span_id:1873) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1874) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git reflog exists $outside\n'
            span_id: 1875
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin creates reflogs with --create-reflog' span_id:1882))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1886) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create $outside $m" >stdin &&\n'
            span_id: 1887
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref --create-reflog --stdin <stdin &&\n' span_id:1888) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1889) (Token id:Id.Lit_Chars val:'\tgit rev-parse $outside >actual &&\n' span_id:1890) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1891) (Token id:Id.Lit_Chars val:'\tgit reflog exists $outside\n' span_id:1892)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin succeeds with quoted argument' span_id:1899))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1903) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d $a &&\n' span_id:1904) (Token id:Id.Lit_Chars val:'\techo "create $a \\"$m\\"" >stdin &&\n' span_id:1905) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1906) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1907) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:1908) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1909)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin succeeds with escaped character' span_id:1916))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1920) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d $a &&\n' span_id:1921) (Token id:Id.Lit_Chars val:'\techo "create $a \\"ma\\\\163ter\\"" >stdin &&\n' span_id:1922) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1923) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1924) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:1925) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1926)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update ref creates with zero old value' span_id:1933))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1937) 
          (Token id:Id.Lit_Chars val:'\techo "update $b $m $Z" >stdin &&\n' span_id:1938) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1939) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1940) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:1941) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1942) (Token id:Id.Lit_Chars val:'\tgit update-ref -d $b\n' span_id:1943)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update ref creates with empty old value' span_id:1950))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1954) 
          (Token id:Id.Lit_Chars val:'\techo "update $b $m $E" >stdin &&\n' span_id:1955) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1956) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:1957) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:1958) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1959)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin create ref works with path with space to blob'
            span_id: 1966
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1970) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create refs/blobs/pws \\"$m:$pws\\"" >stdin &&\n'
            span_id: 1971
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:1972) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse "$m:$pws" >expect &&\n' span_id:1973) (Token id:Id.Lit_Chars val:'\tgit rev-parse refs/blobs/pws >actual &&\n' span_id:1974) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:1975) (Token id:Id.Lit_Chars val:'\tgit update-ref -d refs/blobs/pws\n' span_id:1976)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update ref fails with wrong old value' span_id:1983))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1987) 
          (Token id:Id.Lit_Chars val:'\techo "update $c $m $m~1" >stdin &&\n' span_id:1988) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:1989) 
          (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:1990)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$c' span_id:1996)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:2002) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $c\n'
            span_id: 2003
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update ref fails with bad old value' span_id:2010))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2014) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "update $c $m does-not-exist" >stdin &&\n'
            span_id: 2015
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:2016) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $c: invalid <oldvalue>: does-not-exist" err &&\n'
            span_id: 2017
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2018)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin create ref fails with bad new value' span_id:2025))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2029) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "create $c does-not-exist" >stdin &&\n'
            span_id: 2030
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:2031) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create $c: invalid <newvalue>: does-not-exist" err &&\n'
            span_id: 2032
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2033)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin create ref fails with zero new value' span_id:2040))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2044) 
          (Token id:Id.Lit_Chars val:'\techo "create $c " >stdin &&\n' span_id:2045) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:2046) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create $c: zero <newvalue>" err &&\n'
            span_id: 2047
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2048)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update ref works with right old value' span_id:2055))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2059) 
          (Token id:Id.Lit_Chars val:'\techo "update $b $m~1 $m" >stdin &&\n' span_id:2060) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2061) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m~1 >expect &&\n' span_id:2062) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2063) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2064)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin delete ref fails with wrong old value' span_id:2071))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2075) 
          (Token id:Id.Lit_Chars val:'\techo "delete $a $m~1" >stdin &&\n' span_id:2076) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:2077) 
          (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:2078)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$a' span_id:2084)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:2090) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2091) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2092) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2093)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin delete ref fails with zero old value' span_id:2100))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2104) 
          (Token id:Id.Lit_Chars val:'\techo "delete $a " >stdin &&\n' span_id:2105) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:2106) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: delete $a: zero <oldvalue>" err &&\n'
            span_id: 2107
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2108) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2109) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2110)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update symref works option no-deref' span_id:2117))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2121) 
          (Token id:Id.Lit_Chars val:'\tgit symbolic-ref TESTSYMREF $b &&\n' span_id:2122) (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:2123) 
          (Token id:Id.Lit_Chars val:'\toption no-deref\n' span_id:2124) (Token id:Id.Lit_Chars val:'\tupdate TESTSYMREF $a $b\n' span_id:2125) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2126) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2127) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse TESTSYMREF >expect &&\n'
            span_id: 2128
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2129) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2130) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m~1 >expect &&\n' span_id:2131) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2132) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2133)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin delete symref works option no-deref' span_id:2140))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2144) 
          (Token id:Id.Lit_Chars val:'\tgit symbolic-ref TESTSYMREF $b &&\n' span_id:2145) (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:2146) 
          (Token id:Id.Lit_Chars val:'\toption no-deref\n' span_id:2147) (Token id:Id.Lit_Chars val:'\tdelete TESTSYMREF $b\n' span_id:2148) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2149) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2150) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q TESTSYMREF &&\n'
            span_id: 2151
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m~1 >expect &&\n' span_id:2152) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2153) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2154)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin delete ref works with right old value' span_id:2161))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2165) 
          (Token id:Id.Lit_Chars val:'\techo "delete $b $m~1" >stdin &&\n' span_id:2166) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2167) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $b\n'
            span_id: 2168
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update/create/verify combination works' span_id:2175))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2179) 
          (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:2180) (Token id:Id.Lit_Chars val:'\tupdate $a $m\n' span_id:2181) 
          (Token id:Id.Lit_Chars val:'\tcreate $b $m\n' span_id:2182) (Token id:Id.Lit_Chars val:'\tverify $c\n' span_id:2183) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2184) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2185) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2186) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2187) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2188) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2189) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2190) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2191)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin verify succeeds for correct value' span_id:2198))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2202) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2203) (Token id:Id.Lit_Chars val:'\techo "verify $m $m" >stdin &&\n' span_id:2204) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2205) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:2206) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2207)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin verify succeeds for missing reference' span_id:2214))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2218) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "verify refs/heads/missing $Z" >stdin &&\n'
            span_id: 2219
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2220) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q refs/heads/missing\n'
            span_id: 2221
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin verify treats no value as missing' span_id:2228))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2232) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "verify refs/heads/missing" >stdin &&\n'
            span_id: 2233
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2234) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q refs/heads/missing\n'
            span_id: 2235
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin verify fails for wrong value' span_id:2242))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2246) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2247) (Token id:Id.Lit_Chars val:'\techo "verify $m $m~1" >stdin &&\n' span_id:2248) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref --stdin <stdin &&\n'
            span_id: 2249
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:2250) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2251)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin verify fails for mistaken null value' span_id:2258))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2262) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2263) (Token id:Id.Lit_Chars val:'\techo "verify $m $Z" >stdin &&\n' span_id:2264) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref --stdin <stdin &&\n'
            span_id: 2265
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:2266) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2267)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin verify fails for mistaken empty value' span_id:2274))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2278) 
          (Token id:Id.Lit_Chars val:'\tM=$(git rev-parse $m) &&\n' span_id:2279) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git update-ref $m $M" &&\n' span_id:2280) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2281) (Token id:Id.Lit_Chars val:'\techo "verify $m" >stdin &&\n' span_id:2282) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref --stdin <stdin &&\n'
            span_id: 2283
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:2284) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2285)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update refs works with identity updates' span_id:2292))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2296) 
          (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:2297) (Token id:Id.Lit_Chars val:'\tupdate $a $m $m\n' span_id:2298) 
          (Token id:Id.Lit_Chars val:'\tupdate $b $m $m\n' span_id:2299) (Token id:Id.Lit_Chars val:'\tupdate $c $Z $E\n' span_id:2300) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2301) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2302) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2303) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2304) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2305) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2306) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2307) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2308)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin update refs fails with wrong old value' span_id:2315))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2319) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref $c $m &&\n' span_id:2320) (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:2321) 
          (Token id:Id.Lit_Chars val:'\tupdate $a $m $m\n' span_id:2322) (Token id:Id.Lit_Chars val:'\tupdate $b $m $m\n' span_id:2323) 
          (Token id:Id.Lit_Chars val:'\tupdate $c  ' span_id:2324)
        ) 
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2327) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2328) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:2329) 
          (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:2330)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$c' span_id:2336)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:2342) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2343) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2344) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2345) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2346) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2347) (Token id:Id.Lit_Chars val:'\tgit rev-parse $c >actual &&\n' span_id:2348) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2349)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin delete refs works with packed and loose refs'
            span_id: 2356
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2360) 
          (Token id:Id.Lit_Chars val:'\tgit pack-refs --all &&\n' span_id:2361) (Token id:Id.Lit_Chars val:'\tgit update-ref $c $m~1 &&\n' span_id:2362) 
          (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:2363) (Token id:Id.Lit_Chars val:'\tdelete $a $m\n' span_id:2364) 
          (Token id:Id.Lit_Chars val:'\tupdate $b $Z $m\n' span_id:2365) (Token id:Id.Lit_Chars val:'\tupdate $c $E $m~1\n' span_id:2366) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:2367) (Token id:Id.Lit_Chars val:'\tgit update-ref --stdin <stdin &&\n' span_id:2368) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $a &&\n'
            span_id: 2369
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $b &&\n' span_id:2370) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $c\n'
            span_id: 2371
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z works on empty input' span_id:2378))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2382) 
          (Token id:Id.Lit_Chars val:'\t>stdin &&\n' span_id:2383) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2384) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify -q $m\n' span_id:2385)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails on empty line' span_id:2392))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2396) 
          (Token id:Id.Lit_Chars val:'\techo "" >stdin &&\n' span_id:2397) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2398
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: whitespace before command: " err\n' span_id:2399)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails on empty command' span_id:2406))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2410) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "" >stdin &&\n' span_id:2411) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2412
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: empty command in input" err\n' span_id:2413)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails on only whitespace' span_id:2420))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2424) 
          (Token id:Id.Lit_Chars val:'\tprintf $F " " >stdin &&\n' span_id:2425) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2426
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: whitespace before command:  " err\n' span_id:2427)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails on leading whitespace' span_id:2434))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2438) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F " create $a" "$m" >stdin &&\n'
            span_id: 2439
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2440
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: whitespace before command:  create $a" err\n'
            span_id: 2441
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails on unknown command' span_id:2448))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2452) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "unknown $a" >stdin &&\n' span_id:2453) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2454
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: unknown command: unknown $a" err\n' span_id:2455)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails create with no ref' span_id:2462))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2466) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "create " >stdin &&\n' span_id:2467) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2468
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: create: missing <ref>" err\n' span_id:2469)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails create with no new value' span_id:2476))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2480) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "create $a" >stdin &&\n' span_id:2481) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2482
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create $a: unexpected end of input when reading <newvalue>" err\n'
            span_id: 2483
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails create with too many arguments' span_id:2490))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2494) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "create $a" "$m" "$m" >stdin &&\n'
            span_id: 2495
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2496
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: unknown command: $m" err\n' span_id:2497)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails update with no ref' span_id:2504))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2508) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "update " >stdin &&\n' span_id:2509) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2510
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: update: missing <ref>" err\n' span_id:2511)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails update with too few args' span_id:2518))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2522) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $a" "$m" >stdin &&\n'
            span_id: 2523
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2524
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $a: unexpected end of input when reading <oldvalue>" err\n'
            span_id: 2525
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z emits warning with empty new value' span_id:2532))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2536) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref $a $m &&\n' span_id:2537) (Token id:Id.Lit_Chars val:'\tprintf $F "update $a" "" "" >stdin &&\n' span_id:2538) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2539
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "warning: update $a: missing <newvalue>, treating as zero" err &&\n'
            span_id: 2540
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $a\n' span_id:2541)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails update with no new value' span_id:2548))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2552) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "update $a" >stdin &&\n' span_id:2553) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2554
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $a: unexpected end of input when reading <newvalue>" err\n'
            span_id: 2555
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails update with no old value' span_id:2562))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2566) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $a" "$m" >stdin &&\n'
            span_id: 2567
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2568
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $a: unexpected end of input when reading <oldvalue>" err\n'
            span_id: 2569
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails update with too many arguments' span_id:2576))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2580) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $a" "$m" "$m" "$m" >stdin &&\n'
            span_id: 2581
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2582
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: unknown command: $m" err\n' span_id:2583)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails delete with no ref' span_id:2590))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2594) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "delete " >stdin &&\n' span_id:2595) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2596
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: delete: missing <ref>" err\n' span_id:2597)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails delete with no old value' span_id:2604))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2608) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "delete $a" >stdin &&\n' span_id:2609) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2610
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: delete $a: unexpected end of input when reading <oldvalue>" err\n'
            span_id: 2611
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails delete with too many arguments' span_id:2618))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2622) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "delete $a" "$m" "$m" >stdin &&\n'
            span_id: 2623
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2624
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: unknown command: $m" err\n' span_id:2625)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails verify with too many arguments' span_id:2632))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2636) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "verify $a" "$m" "$m" >stdin &&\n'
            span_id: 2637
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2638
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: unknown command: $m" err\n' span_id:2639)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails verify with no old value' span_id:2646))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2650) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "verify $a" >stdin &&\n' span_id:2651) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2652
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: verify $a: unexpected end of input when reading <oldvalue>" err\n'
            span_id: 2653
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails option with unknown name' span_id:2660))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2664) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "option unknown" >stdin &&\n'
            span_id: 2665
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2666
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: option unknown: unknown" err\n' span_id:2667)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z fails with duplicate refs' span_id:2674))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2678) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "create $a" "$m" "create $b" "$m" "create $a" "$m" >stdin &&\n'
            span_id: 2679
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2680
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: multiple updates for ref ' span_id:2681)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$a' span_id:2687)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:' not allowed." err\n' span_id:2693))
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z create ref works' span_id:2700))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2704) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "create $a" "$m" >stdin &&\n'
            span_id: 2705
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2706) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2707) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2708) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2709)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z update ref creates with zero old value'
            span_id: 2716
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2720) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $b" "$m" "$Z" >stdin &&\n'
            span_id: 2721
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2722) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2723) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2724) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2725) (Token id:Id.Lit_Chars val:'\tgit update-ref -d $b\n' span_id:2726)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z update ref creates with empty old value'
            span_id: 2733
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2737) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $b" "$m" "" >stdin &&\n'
            span_id: 2738
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2739) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2740) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2741) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2742)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z create ref works with path with space to blob'
            span_id: 2749
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2753) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "create refs/blobs/pws" "$m:$pws" >stdin &&\n'
            span_id: 2754
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2755) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse "$m:$pws" >expect &&\n' span_id:2756) (Token id:Id.Lit_Chars val:'\tgit rev-parse refs/blobs/pws >actual &&\n' span_id:2757) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2758) (Token id:Id.Lit_Chars val:'\tgit update-ref -d refs/blobs/pws\n' span_id:2759)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z update ref fails with wrong old value' span_id:2766))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2770) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $c" "$m" "$m~1" >stdin &&\n'
            span_id: 2771
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2772
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:2773)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$c' span_id:2779)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:2785) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $c\n'
            span_id: 2786
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z update ref fails with bad old value' span_id:2793))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2797) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $c" "$m" "does-not-exist" >stdin &&\n'
            span_id: 2798
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2799
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: update $c: invalid <oldvalue>: does-not-exist" err &&\n'
            span_id: 2800
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2801)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z create ref fails when ref exists' span_id:2808))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2812) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref $c $m &&\n' span_id:2813) (Token id:Id.Lit_Chars val:'\tgit rev-parse "$c" >expect &&\n' span_id:2814) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "create $c" "$m~1" >stdin &&\n'
            span_id: 2815
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2816
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:2817)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$c' span_id:2823)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:2829) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse "$c" >actual &&\n' span_id:2830) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2831)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z create ref fails with bad new value' span_id:2838))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2842) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref -d "$c" &&\n' span_id:2843) (Token id:Id.Lit_Chars val:'\tprintf $F "create $c" "does-not-exist" >stdin &&\n' span_id:2844) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2845
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "fatal: create $c: invalid <newvalue>: does-not-exist" err &&\n'
            span_id: 2846
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2847)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z create ref fails with empty new value' span_id:2854))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2858) 
          (Token id:Id.Lit_Chars val:'\tprintf $F "create $c" "" >stdin &&\n' span_id:2859) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2860
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: create $c: missing <newvalue>" err &&\n' span_id:2861) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $c\n'
            span_id: 2862
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z update ref works with right old value' span_id:2869))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2873) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $b" "$m~1" "$m" >stdin &&\n'
            span_id: 2874
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2875) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m~1 >expect &&\n' span_id:2876) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2877) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2878)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z delete ref fails with wrong old value' span_id:2885))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2889) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "delete $a" "$m~1" >stdin &&\n'
            span_id: 2890
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2891
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:2892)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$a' span_id:2898)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:2904) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2905) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2906) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2907)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z delete ref fails with zero old value' span_id:2914))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2918) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "delete $a" "$Z" >stdin &&\n'
            span_id: 2919
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 2920
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: delete $a: zero <oldvalue>" err &&\n' span_id:2921) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2922) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2923) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2924)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z update symref works option no-deref' span_id:2931))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2935) 
          (Token id:Id.Lit_Chars val:'\tgit symbolic-ref TESTSYMREF $b &&\n' span_id:2936) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "option no-deref" "update TESTSYMREF" "$a" "$b" >stdin &&\n'
            span_id: 2937
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2938) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse TESTSYMREF >expect &&\n'
            span_id: 2939
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2940) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2941) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m~1 >expect &&\n' span_id:2942) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2943) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2944)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z delete symref works option no-deref' span_id:2951))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2955) 
          (Token id:Id.Lit_Chars val:'\tgit symbolic-ref TESTSYMREF $b &&\n' span_id:2956) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "option no-deref" "delete TESTSYMREF" "$b" >stdin &&\n'
            span_id: 2957
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2958) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q TESTSYMREF &&\n'
            span_id: 2959
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m~1 >expect &&\n' span_id:2960) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2961) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:2962)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z delete ref works with right old value' span_id:2969))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2973) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "delete $b" "$m~1" >stdin &&\n'
            span_id: 2974
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2975) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $b\n'
            span_id: 2976
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z update/create/verify combination works'
            span_id: 2983
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2987) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "update $a" "$m" "" "create $b" "$m" "verify $c" "" >stdin &&\n'
            span_id: 2988
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:2989) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:2990) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:2991) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2992) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:2993) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:2994) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:2995)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z verify succeeds for correct value' span_id:3002))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3006) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:3007) (Token id:Id.Lit_Chars val:'\tprintf $F "verify $m" "$m" >stdin &&\n' span_id:3008) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref -z --stdin <stdin &&\n'
            span_id: 3009
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:3010) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3011)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z verify succeeds for missing reference' span_id:3018))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3022) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "verify refs/heads/missing" "$Z" >stdin &&\n'
            span_id: 3023
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:3024) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q refs/heads/missing\n'
            span_id: 3025
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z verify treats no value as missing' span_id:3032))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3036) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf $F "verify refs/heads/missing" "" >stdin &&\n'
            span_id: 3037
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:3038) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q refs/heads/missing\n'
            span_id: 3039
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z verify fails for wrong value' span_id:3046))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3050) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:3051) (Token id:Id.Lit_Chars val:'\tprintf $F "verify $m" "$m~1" >stdin &&\n' span_id:3052) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin &&\n'
            span_id: 3053
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:3054) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3055)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z verify fails for mistaken null value' span_id:3062))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3066) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:3067) (Token id:Id.Lit_Chars val:'\tprintf $F "verify $m" "$Z" >stdin &&\n' span_id:3068) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin &&\n'
            span_id: 3069
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:3070) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3071)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'stdin -z verify fails for mistaken empty value' span_id:3078))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3082) 
          (Token id:Id.Lit_Chars val:'\tM=$(git rev-parse $m) &&\n' span_id:3083) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git update-ref $m $M" &&\n' span_id:3084) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:3085) (Token id:Id.Lit_Chars val:'\tprintf $F "verify $m" "" >stdin &&\n' span_id:3086) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin &&\n'
            span_id: 3087
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >actual &&\n' span_id:3088) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3089)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z update refs works with identity updates'
            span_id: 3096
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3100) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf $F "update $a" "$m" "$m" "update $b" "$m" "$m" "update $c" "$Z" "" >stdin &&\n'
            span_id: 3101
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:3102) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:3103) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:3104) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:3105) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:3106) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:3107) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $c\n' span_id:3108)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z update refs fails with wrong old value'
            span_id: 3115
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3119) 
          (Token id:Id.Lit_Chars val:'\tgit update-ref $c $m &&\n' span_id:3120) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf $F "update $a" "$m" "$m" "update $b" "$m" "$m" "update $c" "$m" "$Z" >stdin &&\n'
            span_id: 3121
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-ref -z --stdin <stdin 2>err &&\n'
            span_id: 3122
          ) (Token id:Id.Lit_Chars val:'\tgrep "fatal: cannot lock ref ' span_id:3123)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'$c' span_id:3129)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" err &&\n' span_id:3135) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse $m >expect &&\n' span_id:3136) (Token id:Id.Lit_Chars val:'\tgit rev-parse $a >actual &&\n' span_id:3137) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:3138) (Token id:Id.Lit_Chars val:'\tgit rev-parse $b >actual &&\n' span_id:3139) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:3140) (Token id:Id.Lit_Chars val:'\tgit rev-parse $c >actual &&\n' span_id:3141) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3142)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'stdin -z delete refs works with packed and loose refs'
            span_id: 3149
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3153) 
          (Token id:Id.Lit_Chars val:'\tgit pack-refs --all &&\n' span_id:3154) (Token id:Id.Lit_Chars val:'\tgit update-ref $c $m~1 &&\n' span_id:3155) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tprintf $F "delete $a" "$m" "update $b" "$Z" "$m" "update $c" "" "$m~1" >stdin &&\n'
            span_id: 3156
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref -z --stdin <stdin &&\n' span_id:3157) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $a &&\n'
            span_id: 3158
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q $b &&\n' span_id:3159) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify -q $c\n'
            span_id: 3160
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fails with duplicate HEAD update' span_id:3167))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3171) 
          (Token id:Id.Lit_Chars val:'\tgit branch target1 $A &&\n' span_id:3172) (Token id:Id.Lit_Chars val:'\tgit checkout target1 &&\n' span_id:3173) 
          (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:3174) (Token id:Id.Lit_Chars val:'\tupdate refs/heads/target1 $C\n' span_id:3175) 
          (Token id:Id.Lit_Chars val:'\toption no-deref\n' span_id:3176) (Token id:Id.Lit_Chars val:'\tupdate HEAD $B\n' span_id:3177) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3178) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:3179) 
          (Token id:Id.Lit_Chars val:'\tgrep "fatal: multiple updates for ' span_id:3180)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:3182)) 
        (SQ (Token id:Id.Lit_Chars val:HEAD span_id:3184)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:3186)) 
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: ' (including one via its referent .refs/heads/target1.) are not allowed" err &&\n'
            span_id: 3188
          ) (Token id:Id.Lit_Chars val:'\techo "refs/heads/target1" >expect &&\n' span_id:3189) 
          (Token id:Id.Lit_Chars val:'\tgit symbolic-ref HEAD >actual &&\n' span_id:3190) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:3191) 
          (Token id:Id.Lit_Chars val:'\techo "$A" >expect &&\n' span_id:3192) (Token id:Id.Lit_Chars val:'\tgit rev-parse refs/heads/target1 >actual &&\n' span_id:3193) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3194)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fails with duplicate ref update via symref' span_id:3201))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3205) 
          (Token id:Id.Lit_Chars val:'\tgit branch target2 $A &&\n' span_id:3206) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref refs/heads/symref2 refs/heads/target2 &&\n'
            span_id: 3207
          ) (Token id:Id.Lit_Chars val:'\tcat >stdin <<-EOF &&\n' span_id:3208) 
          (Token id:Id.Lit_Chars val:'\tupdate refs/heads/target2 $C\n' span_id:3209) (Token id:Id.Lit_Chars val:'\tupdate refs/heads/symref2 $B\n' span_id:3210) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:3211) (Token id:Id.Lit_Chars val:'\ttest_must_fail git update-ref --stdin <stdin 2>err &&\n' span_id:3212) 
          (Token id:Id.Lit_Chars val:'\tgrep "fatal: multiple updates for ' span_id:3213)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:3215)) 
        (SQ (Token id:Id.Lit_Chars val:refs/heads/target2 span_id:3217)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:3219)) 
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: ' (including one via symref .refs/heads/symref2.) are not allowed" err &&\n'
            span_id: 3221
          ) (Token id:Id.Lit_Chars val:'\techo "refs/heads/target2" >expect &&\n' span_id:3222) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit symbolic-ref refs/heads/symref2 >actual &&\n'
            span_id: 3223
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:3224) 
          (Token id:Id.Lit_Chars val:'\techo "$A" >expect &&\n' span_id:3225) (Token id:Id.Lit_Chars val:'\tgit rev-parse refs/heads/target2 >actual &&\n' span_id:3226) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:3227)
        )
      }
    )
    (command.ShFunction
      name: run_with_limited_open_files
      body: 
        (command.BraceGroup
          children: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [(C {(ulimit)} {(-n)} {(32)}) (C {(DQ ($ Id.VSub_At '$@'))})]
                    )
                  ]
                )
            )
          ]
        )
    )
    (C {(test_lazy_prereq)} {(ULIMIT_FILE_DESCRIPTORS)} 
      {(SQ (Token id:Id.Lit_Chars val:'run_with_limited_open_files true' span_id:3261))}
    )
    (C {(test_expect_success)} {(ULIMIT_FILE_DESCRIPTORS)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'large transaction creating branches does not burst open file limit'
            span_id: 3270
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3274) 
          (Token id:Id.Lit_Chars val:'(\n' span_id:3275) (Token id:Id.Lit_Chars val:'\tfor i in $(test_seq 33)\n' span_id:3276) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:3277) (Token id:Id.Lit_Chars val:'\t\techo "create refs/heads/$i HEAD"\n' span_id:3278) 
          (Token id:Id.Lit_Chars val:'\tdone >large_input &&\n' span_id:3279) 
          (Token
            id: Id.Lit_Chars
            val: '\trun_with_limited_open_files git update-ref --stdin <large_input &&\n'
            span_id: 3280
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify -q refs/heads/33\n' span_id:3281) 
          (Token id:Id.Lit_Chars val:')\n' span_id:3282)
        )
      }
    )
    (C {(test_expect_success)} {(ULIMIT_FILE_DESCRIPTORS)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'large transaction deleting branches does not burst open file limit'
            span_id: 3291
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3295) 
          (Token id:Id.Lit_Chars val:'(\n' span_id:3296) (Token id:Id.Lit_Chars val:'\tfor i in $(test_seq 33)\n' span_id:3297) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:3298) (Token id:Id.Lit_Chars val:'\t\techo "delete refs/heads/$i HEAD"\n' span_id:3299) 
          (Token id:Id.Lit_Chars val:'\tdone >large_input &&\n' span_id:3300) 
          (Token
            id: Id.Lit_Chars
            val: '\trun_with_limited_open_files git update-ref --stdin <large_input &&\n'
            span_id: 3301
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify -q refs/heads/33\n' span_id:3302) 
          (Token id:Id.Lit_Chars val:')\n' span_id:3303)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'handle per-worktree refs in refs/bisect' span_id:3310))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:3314) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --allow-empty -m "initial commit" &&\n'
            span_id: 3315
          ) (Token id:Id.Lit_Chars val:'\tgit worktree add -b branch worktree &&\n' span_id:3316) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:3317) (Token id:Id.Lit_Chars val:'\t\tcd worktree &&\n' span_id:3318) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit commit --allow-empty -m "test commit"  &&\n'
            span_id: 3319
          ) (Token id:Id.Lit_Chars val:'\t\tgit for-each-ref >for-each-ref.out &&\n' span_id:3320) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t! grep refs/bisect for-each-ref.out &&\n'
            span_id: 3321
          ) (Token id:Id.Lit_Chars val:'\t\tgit update-ref refs/bisect/something HEAD &&\n' span_id:3322) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-parse refs/bisect/something >../worktree-head &&\n'
            span_id: 3323
          ) (Token id:Id.Lit_Chars val:'\t\tgit for-each-ref | grep refs/bisect/something\n' span_id:3324) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:3325) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/refs/bisect &&\n' span_id:3326) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse refs/bisect/something &&\n'
            span_id: 3327
          ) (Token id:Id.Lit_Chars val:'\tgit update-ref refs/bisect/something HEAD &&\n' span_id:3328) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse refs/bisect/something >main-head &&\n'
            span_id: 3329
          ) (Token id:Id.Lit_Chars val:'\t! test_cmp main-head worktree-head\n' span_id:3330)
        )
      }
    )
    (C {(test_done)})
  ]
)