(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)}) ] )