(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:'git-cvsserver access\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'tests read access to a git repository with the\n' span_id:17) (Token id: Id.Lit_Chars val: 'cvs CLI client via git-cvsserver server' span_id: 18 ) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children:[(C {(test_have_prereq)} {(PERL)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:34) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'skipping git cvsserver tests, perl not available' span_id: 41 ) ) } spids: [39] ) ] ) (C {(test_done)}) ] spids: [27 36] ) ] ) (command.Simple words: [{(cvs)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:51) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'2>&' span_id:54) fd:2 arg_word:{(1)}) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {($ Id.VSub_QMark '$?')} {(-ne)} {(1)})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'skipping git-cvsserver tests, cvs not found' span_id: 72 ) ) } spids: [70] ) ] ) (C {(test_done)}) ] spids: [57 67] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(perl)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'use DBI; use DBD::SQLite' span_id:85))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:88) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:91) fd: 2 arg_word: {(1)} ) ] ) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'skipping git-cvsserver tests, Perl SQLite interface unavailable' span_id: 101 ) ) } spids: [99] ) ] ) (C {(test_done)}) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:WORKDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD')} spids: [110] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SERVERDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$PWD') (/gitcvs.git)} spids: [113] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:git_config) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$SERVERDIR') (/config))} spids: [117] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CVSROOT) op: assign_op.Equal rhs: {(DQ (':fork:') ($ Id.VSub_DollarName '$SERVERDIR'))} spids: [123] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CVSWORK) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$PWD') (/cvswork))} spids: [129] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CVS_SERVER) op: assign_op.Equal rhs: {(git-cvsserver)} spids: [135] ) ] ) (C {(export)} {(CVSROOT)} {(CVS_SERVER)}) (C {(rm)} {(-rf)} {(DQ ($ Id.VSub_DollarName '$CVSWORK'))} {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:160))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:164) (Token id:Id.Lit_Chars val:' git config push.default matching &&\n' span_id:165) (Token id:Id.Lit_Chars val:' echo >empty &&\n' span_id:166) (Token id:Id.Lit_Chars val:' git add empty &&\n' span_id:167) (Token id:Id.Lit_Chars val:' git commit -q -m "First Commit" &&\n' span_id:168) (Token id:Id.Lit_Chars val:' mkdir secondroot &&\n' span_id:169) (Token id:Id.Lit_Chars val:' ( cd secondroot &&\n' span_id:170) (Token id:Id.Lit_Chars val:' git init &&\n' span_id:171) (Token id:Id.Lit_Chars val:' touch secondrootfile &&\n' span_id:172) (Token id:Id.Lit_Chars val:' git add secondrootfile &&\n' span_id:173) (Token id:Id.Lit_Chars val:' git commit -m "second root") &&\n' span_id:174) (Token id:Id.Lit_Chars val:' git fetch secondroot master &&\n' span_id:175) (Token id:Id.Lit_Chars val:' git merge --allow-unrelated-histories FETCH_HEAD &&\n' span_id:176) (Token id: Id.Lit_Chars val: ' git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&\n' span_id: 177 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n' span_id: 178 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log" &&\n' span_id: 179 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config gitcvs.authdb "$SERVERDIR/auth.db" &&\n' span_id: 180 ) (Token id:Id.Lit_Chars val:' echo cvsuser:cvGVEarMLnhlA > "$SERVERDIR/auth.db"\n' span_id:181) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'basic checkout' span_id:194))} { (SQ (Token id: Id.Lit_Chars val: 'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&\n' span_id: 200 ) (Token id: Id.Lit_Chars val: ' test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/" &&\n' span_id: 201 ) (Token id: Id.Lit_Chars val: ' test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \\$p))" = "secondrootfile/1.1/"' span_id: 202 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:218) fd: -1 arg_word: {(request-anonymous)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:221) fd: -1 here_begin: {(EOF)} here_end_span_id: 231 stdin_parts: [ ('BEGIN AUTH REQUEST\n') ($ Id.VSub_DollarName '$SERVERDIR') ('\n') ('anonymous\n') ('\n') ('END AUTH REQUEST\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:235) fd: -1 arg_word: {(request-git)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:238) fd: -1 here_begin: {(EOF)} here_end_span_id: 248 stdin_parts: [ ('BEGIN AUTH REQUEST\n') ($ Id.VSub_DollarName '$SERVERDIR') ('\n') ('git\n') ('\n') ('END AUTH REQUEST\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:252) fd: -1 arg_word: {(login-anonymous)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:255) fd: -1 here_begin: {(EOF)} here_end_span_id: 265 stdin_parts: [ ('BEGIN VERIFICATION REQUEST\n') ($ Id.VSub_DollarName '$SERVERDIR') ('\n') ('anonymous\n') ('\n') ('END VERIFICATION REQUEST\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:269) fd: -1 arg_word: {(login-git)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:272) fd: -1 here_begin: {(EOF)} here_end_span_id: 282 stdin_parts: [ ('BEGIN VERIFICATION REQUEST\n') ($ Id.VSub_DollarName '$SERVERDIR') ('\n') ('git\n') ('\n') ('END VERIFICATION REQUEST\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:286) fd: -1 arg_word: {(login-git-ok)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:289) fd: -1 here_begin: {(EOF)} here_end_span_id: 299 stdin_parts: [ ('BEGIN VERIFICATION REQUEST\n') ($ Id.VSub_DollarName '$SERVERDIR') ('\n') ('cvsuser\n') ('Ah<Z:yZZ30 e\n') ('END VERIFICATION REQUEST\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pserver authentication' span_id:304))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-anonymous | git-cvsserver pserver >log 2>&1 &&\n' span_id: 310 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:311) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'pserver authentication failure (non-anonymous user)' span_id: 318 ) ) } { (SQ (Token id: Id.Lit_Chars val: 'if cat request-git | git-cvsserver pserver >log 2>&1\n' span_id: 324 ) (Token id:Id.Lit_Chars val:' then\n' span_id:325) (Token id:Id.Lit_Chars val:' false\n' span_id:326) (Token id:Id.Lit_Chars val:' else\n' span_id:327) (Token id:Id.Lit_Chars val:' true\n' span_id:328) (Token id:Id.Lit_Chars val:' fi &&\n' span_id:329) (Token id: Id.Lit_Chars val: ' sed -ne \\$p log | grep "^I HATE YOU\\$"' span_id: 330 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'pserver authentication success (non-anonymous user with password)' span_id: 337 ) ) } { (SQ (Token id: Id.Lit_Chars val: 'cat login-git-ok | git-cvsserver pserver >log 2>&1 &&\n' span_id: 343 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:344) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pserver authentication (login)' span_id:351))} { (SQ (Token id: Id.Lit_Chars val: 'cat login-anonymous | git-cvsserver pserver >log 2>&1 &&\n' span_id: 357 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:358) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'pserver authentication failure (login/non-anonymous user)' span_id: 365 ) ) } { (SQ (Token id: Id.Lit_Chars val: 'if cat login-git | git-cvsserver pserver >log 2>&1\n' span_id: 371 ) (Token id:Id.Lit_Chars val:' then\n' span_id:372) (Token id:Id.Lit_Chars val:' false\n' span_id:373) (Token id:Id.Lit_Chars val:' else\n' span_id:374) (Token id:Id.Lit_Chars val:' true\n' span_id:375) (Token id:Id.Lit_Chars val:' fi &&\n' span_id:376) (Token id: Id.Lit_Chars val: ' sed -ne \\$p log | grep "^I HATE YOU\\$"' span_id: 377 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:388) fd: -1 arg_word: {(request-relative)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:391) fd: -1 here_begin: {(EOF)} here_end_span_id: 400 stdin_parts: [ ('BEGIN AUTH REQUEST\n') ('gitcvs.git\n') ('anonymous\n') ('\n') ('END AUTH REQUEST\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:404) fd: -1 arg_word: {(request-conflict)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:407) fd: -1 here_begin: {(EOF)} here_end_span_id: 420 stdin_parts: [ ('BEGIN AUTH REQUEST\n') ($ Id.VSub_DollarName '$SERVERDIR') ('\n') ('anonymous\n') ('\n') ('END AUTH REQUEST\n') ('Root ') ($ Id.VSub_DollarName '$WORKDIR') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (relative pathname)' span_id:425))} { (SQ (Token id: Id.Lit_Chars val: 'if cat request-relative | git-cvsserver pserver >log 2>&1\n' span_id: 431 ) (Token id:Id.Lit_Chars val:' then\n' span_id:432) (Token id:Id.Lit_Chars val:' echo unexpected success\n' span_id:433) (Token id:Id.Lit_Chars val:' false\n' span_id:434) (Token id:Id.Lit_Chars val:' else\n' span_id:435) (Token id:Id.Lit_Chars val:' true\n' span_id:436) (Token id:Id.Lit_Chars val:' fi &&\n' span_id:437) (Token id: Id.Lit_Chars val: ' tail log | grep "^error 1 Root must be an absolute pathname$"' span_id: 438 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (conflicting roots)' span_id:445))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-conflict | git-cvsserver pserver >log 2>&1 &&\n' span_id: 451 ) (Token id:Id.Lit_Chars val:' tail log | grep "^error 1 Conflicting roots specified$"' span_id:452) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (strict paths)' span_id:459))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-anonymous | git-cvsserver --strict-paths pserver "$SERVERDIR" >log 2>&1 &&\n' span_id: 465 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:466) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (strict-paths)' span_id:473))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:477) (Token id:Id.Lit_Chars val:' ! cat request-anonymous |\n' span_id:478) (Token id: Id.Lit_Chars val: ' git-cvsserver --strict-paths pserver "$WORKDIR" >log 2>&1\n' span_id: 479 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (w/o strict-paths)' span_id:486))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-anonymous | git-cvsserver pserver "$WORKDIR/" >log 2>&1 &&\n' span_id: 492 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:493) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (w/o strict-paths)' span_id:500))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) (Token id:Id.Lit_Chars val:' ! cat request-anonymous |\n' span_id:505) (Token id:Id.Lit_Chars val:' git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1\n' span_id:506) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:512) fd: -1 arg_word: {(request-base)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:515) fd: -1 here_begin: {(EOF)} here_end_span_id: 525 stdin_parts: [ ('BEGIN AUTH REQUEST\n') ('/gitcvs.git\n') ('anonymous\n') ('\n') ('END AUTH REQUEST\n') ('Root /gitcvs.git\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (base-path)' span_id:530))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-base | git-cvsserver --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n' span_id: 536 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:537) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (base-path)' span_id:544))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:548) (Token id:Id.Lit_Chars val:' ! cat request-anonymous |\n' span_id:549) (Token id: Id.Lit_Chars val: ' git-cvsserver --strict-paths --base-path "$WORKDIR" pserver "$SERVERDIR" >log 2>&1\n' span_id: 550 ) ) } ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(git)} {(config)} {(--bool)} {(gitcvs.enabled)} {(false)}] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))} spids: [554] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:571) arg_word: {(1)} ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (export-all)' span_id:579))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-anonymous | git-cvsserver --export-all pserver "$WORKDIR" >log 2>&1 &&\n' span_id: 585 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:586) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (export-all w/o whitelist)' span_id:593))} { (SQ (Token id: Id.Lit_Chars val: '! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)' span_id: 599 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (everything together)' span_id:606))} { (SQ (Token id: Id.Lit_Chars val: 'cat request-base | git-cvsserver --export-all --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n' span_id: 612 ) (Token id:Id.Lit_Chars val:' sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:613) ) } ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(git)} {(config)} {(--bool)} {(gitcvs.enabled)} {(true)}] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))} spids: [617] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:634) arg_word: {(1)} ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gitcvs.enabled = false' span_id:652))} { (SQ (Token id: Id.Lit_Chars val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n' span_id: 658 ) (Token id: Id.Lit_Chars val: ' if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n' span_id: 659 ) (Token id:Id.Lit_Chars val:' then\n' span_id:660) (Token id:Id.Lit_Chars val:' echo unexpected cvs success\n' span_id:661) (Token id:Id.Lit_Chars val:' false\n' span_id:662) (Token id:Id.Lit_Chars val:' else\n' span_id:663) (Token id:Id.Lit_Chars val:' true\n' span_id:664) (Token id:Id.Lit_Chars val:' fi &&\n' span_id:665) (Token id:Id.Lit_Chars val:' grep "GITCVS emulation disabled" cvs.log &&\n' span_id:666) (Token id:Id.Lit_Chars val:' test ! -d cvswork2' span_id:667) ) } ) (C {(rm)} {(-fr)} {(cvswork2)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gitcvs.ext.enabled = true' span_id:680))} { (SQ (Token id: Id.Lit_Chars val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n' span_id: 686 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n' span_id: 687 ) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n' span_id: 688 ) (Token id:Id.Lit_Chars val:' test_cmp cvswork cvswork2' span_id:689) ) } ) (C {(rm)} {(-fr)} {(cvswork2)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gitcvs.ext.enabled = false' span_id:702))} { (SQ (Token id: Id.Lit_Chars val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled false &&\n' span_id: 708 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n' span_id: 709 ) (Token id: Id.Lit_Chars val: ' if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n' span_id: 710 ) (Token id:Id.Lit_Chars val:' then\n' span_id:711) (Token id:Id.Lit_Chars val:' echo unexpected cvs success\n' span_id:712) (Token id:Id.Lit_Chars val:' false\n' span_id:713) (Token id:Id.Lit_Chars val:' else\n' span_id:714) (Token id:Id.Lit_Chars val:' true\n' span_id:715) (Token id:Id.Lit_Chars val:' fi &&\n' span_id:716) (Token id:Id.Lit_Chars val:' grep "GITCVS emulation disabled" cvs.log &&\n' span_id:717) (Token id:Id.Lit_Chars val:' test ! -d cvswork2' span_id:718) ) } ) (C {(rm)} {(-fr)} {(cvswork2)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:gitcvs.dbname span_id:731))} { (SQ (Token id: Id.Lit_Chars val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n' span_id: 737 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs.%a.%m.sqlite &&\n' span_id: 738 ) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n' span_id: 739 ) (Token id:Id.Lit_Chars val:' test_cmp cvswork cvswork2 &&\n' span_id:740) (Token id: Id.Lit_Chars val: ' test -f "$SERVERDIR/gitcvs.ext.master.sqlite" &&\n' span_id: 741 ) (Token id: Id.Lit_Chars val: ' cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs.ext.master.sqlite"' span_id: 742 ) ) } ) (C {(rm)} {(-fr)} {(cvswork2)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:gitcvs.ext.dbname span_id:755))} { (SQ (Token id: Id.Lit_Chars val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n' span_id: 761 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&\n' span_id: 762 ) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&\n' span_id: 763 ) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n' span_id: 764 ) (Token id:Id.Lit_Chars val:' test_cmp cvswork cvswork2 &&\n' span_id:765) (Token id: Id.Lit_Chars val: ' test -f "$SERVERDIR/gitcvs1.ext.master.sqlite" &&\n' span_id: 766 ) (Token id:Id.Lit_Chars val:' test ! -f "$SERVERDIR/gitcvs2.ext.master.sqlite" &&\n' span_id:767) (Token id: Id.Lit_Chars val: ' cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs1.ext.master.sqlite"' span_id: 768 ) ) } ) (C {(rm)} {(-fr)} {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (command.Simple words: [ {(git)} {(clone)} {(-q)} {(--bare)} {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/.git))} {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:816) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:819) fd: 2 arg_word: {(1)} ) ] ) (command.Simple words: [{(git)} {(config)} {(--bool)} {(gitcvs.enabled)} {(true)}] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))} spids: [824] ) ] ) (command.Simple words: [ {(git)} {(config)} {(gitcvs.logfile)} {(DQ ($ Id.VSub_DollarName '$SERVERDIR') (/gitcvs.log))} ] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))} spids: [841] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:859) arg_word: {(1)} ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (create new file)' span_id:867))} { (SQ (Token id:Id.Lit_Chars val:'echo testfile1 >testfile1 &&\n' span_id:873) (Token id:Id.Lit_Chars val:' git add testfile1 &&\n' span_id:874) (Token id:Id.Lit_Chars val:' git commit -q -m "Add testfile1" &&\n' span_id:875) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:876) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:877) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id: 878 ) (Token id: Id.Lit_Chars val: ' test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.1/" &&\n' span_id: 879 ) (Token id:Id.Lit_Chars val:' test_cmp testfile1 ../testfile1' span_id:880) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (update existing file)' span_id:893))} { (SQ (Token id:Id.Lit_Chars val:'echo line 2 >>testfile1 &&\n' span_id:899) (Token id:Id.Lit_Chars val:' git add testfile1 &&\n' span_id:900) (Token id:Id.Lit_Chars val:' git commit -q -m "Append to testfile1" &&\n' span_id:901) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:902) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:903) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id: 904 ) (Token id: Id.Lit_Chars val: ' test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.2/" &&\n' span_id: 905 ) (Token id:Id.Lit_Chars val:' test_cmp testfile1 ../testfile1' span_id:906) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_failure)} {(DQ ("cvs update w/o -d doesn't create subdir (TODO)"))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:926) (Token id:Id.Lit_Chars val:' mkdir test &&\n' span_id:927) (Token id:Id.Lit_Chars val:' echo >test/empty &&\n' span_id:928) (Token id:Id.Lit_Chars val:' git add test &&\n' span_id:929) (Token id:Id.Lit_Chars val:' git commit -q -m "Single Subdirectory" &&\n' span_id:930) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:931) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:932) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id: 933 ) (Token id:Id.Lit_Chars val:' test ! -d test\n' span_id:934) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (subdirectories)' span_id:947))} { (SQ (Token id:Id.Lit_Chars val:'(for dir in A A/B A/B/C A/D E; do\n' span_id:953) (Token id:Id.Lit_Chars val:' mkdir $dir &&\n' span_id:954) (Token id: Id.Lit_Chars val: ' echo "test file in $dir" >"$dir/file_in_$(echo $dir|sed -e "s#/# #g")" &&\n' span_id: 955 ) (Token id:Id.Lit_Chars val:' git add $dir;\n' span_id:956) (Token id:Id.Lit_Chars val:' done) &&\n' span_id:957) (Token id:Id.Lit_Chars val:' git commit -q -m "deep sub directory structure" &&\n' span_id:958) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:959) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:960) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update -d &&\n' span_id: 961 ) (Token id:Id.Lit_Chars val:' (for dir in A A/B A/B/C A/D E; do\n' span_id:962) (Token id: Id.Lit_Chars val: ' filename="file_in_$(echo $dir|sed -e "s#/# #g")" &&\n' span_id: 963 ) (Token id: Id.Lit_Chars val: ' if test "$(echo $(grep -v ^D $dir/CVS/Entries|cut -d/ -f2,3,5))" = "$filename/1.1/" &&\n' span_id: 964 ) (Token id:Id.Lit_Chars val:'\ttest_cmp "$dir/$filename" "../$dir/$filename"; then\n' span_id:965) (Token id:Id.Lit_Chars val:' :\n' span_id:966) (Token id:Id.Lit_Chars val:' else\n' span_id:967) (Token id:Id.Lit_Chars val:' echo >failure\n' span_id:968) (Token id:Id.Lit_Chars val:' fi\n' span_id:969) (Token id:Id.Lit_Chars val:' done) &&\n' span_id:970) (Token id:Id.Lit_Chars val:' test ! -f failure' span_id:971) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (delete file)' span_id:984))} { (SQ (Token id:Id.Lit_Chars val:'git rm testfile1 &&\n' span_id:990) (Token id: Id.Lit_Chars val: ' git commit -q -m "Remove testfile1" &&\n' span_id: 991 ) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:992) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:993) (Token id:Id.Lit_Chars val:' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id:994) (Token id: Id.Lit_Chars val: ' test -z "$(grep testfile1 CVS/Entries)" &&\n' span_id: 995 ) (Token id:Id.Lit_Chars val:' test ! -f testfile1' span_id:996) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (re-add deleted file)' span_id:1009))} { (SQ (Token id:Id.Lit_Chars val:'echo readded testfile >testfile1 &&\n' span_id:1015) (Token id:Id.Lit_Chars val:' git add testfile1 &&\n' span_id:1016) (Token id:Id.Lit_Chars val:' git commit -q -m "Re-Add testfile1" &&\n' span_id:1017) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1018) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1019) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id: 1020 ) (Token id: Id.Lit_Chars val: ' test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.4/" &&\n' span_id: 1021 ) (Token id:Id.Lit_Chars val:' test_cmp testfile1 ../testfile1' span_id:1022) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (merge)' span_id:1035))} { (SQ (Token id:Id.Lit_Chars val:'echo Line 0 >expected &&\n' span_id:1041) (Token id:Id.Lit_Chars val:' for i in 1 2 3 4 5 6 7\n' span_id:1042) (Token id:Id.Lit_Chars val:' do\n' span_id:1043) (Token id:Id.Lit_Chars val:' echo Line $i >>merge\n' span_id:1044) (Token id:Id.Lit_Chars val:' echo Line $i >>expected\n' span_id:1045) (Token id:Id.Lit_Chars val:' done &&\n' span_id:1046) (Token id:Id.Lit_Chars val:' echo Line 8 >>expected &&\n' span_id:1047) (Token id:Id.Lit_Chars val:' git add merge &&\n' span_id:1048) (Token id:Id.Lit_Chars val:' git commit -q -m "Merge test (pre-merge)" &&\n' span_id:1049) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1050) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1051) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id: 1052 ) (Token id: Id.Lit_Chars val: ' test "$(echo $(grep merge CVS/Entries|cut -d/ -f2,3,5))" = "merge/1.1/" &&\n' span_id: 1053 ) (Token id:Id.Lit_Chars val:' test_cmp merge ../merge &&\n' span_id:1054) (Token id: Id.Lit_Chars val: ' ( echo Line 0; cat merge ) >merge.tmp &&\n' span_id: 1055 ) (Token id:Id.Lit_Chars val:' mv merge.tmp merge &&\n' span_id:1056) (Token id:Id.Lit_Chars val:' cd "$WORKDIR" &&\n' span_id:1057) (Token id:Id.Lit_Chars val:' echo Line 8 >>merge &&\n' span_id:1058) (Token id:Id.Lit_Chars val:' git add merge &&\n' span_id:1059) (Token id:Id.Lit_Chars val:' git commit -q -m "Merge test (merge)" &&\n' span_id:1060) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1061) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1062) (Token id:Id.Lit_Chars val:' sleep 1 && touch merge &&\n' span_id:1063) (Token id:Id.Lit_Chars val:' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id:1064) (Token id:Id.Lit_Chars val:' test_cmp merge ../expected' span_id:1065) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1078) fd: -1 arg_word: {(expected.C)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1081) fd: -1 here_begin: {(EOF)} here_end_span_id: 1090 stdin_parts: [ ('<<<<<<< merge.mine\n') ('Line 0\n') ('=======\n') ('LINE 0\n') ('>>>>>>> merge.1.3\n') ] ) ] ) (command.ForEach iter_name: i iter_words: [{(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{(echo)} {(Line)} {($ Id.VSub_DollarName '$i')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1123) fd: -1 arg_word: {(expected.C)} ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (conflict merge)' span_id:1132))} { (SQ (Token id:Id.Lit_Chars val:'( echo LINE 0; cat merge ) >merge.tmp &&\n' span_id:1138) (Token id:Id.Lit_Chars val:' mv merge.tmp merge &&\n' span_id:1139) (Token id:Id.Lit_Chars val:' git add merge &&\n' span_id:1140) (Token id: Id.Lit_Chars val: ' git commit -q -m "Merge test (conflict)" &&\n' span_id: 1141 ) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1142) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1143) (Token id:Id.Lit_Chars val:' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id:1144) (Token id:Id.Lit_Chars val:' test_cmp merge ../expected.C' span_id:1145) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (-C)' span_id:1158))} { (SQ (Token id:Id.Lit_Chars val:'cd cvswork &&\n' span_id:1164) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update -C &&\n' span_id: 1165 ) (Token id:Id.Lit_Chars val:' test_cmp merge ../merge' span_id:1166) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (merge no-op)' span_id:1179))} { (SQ (Token id:Id.Lit_Chars val:'echo Line 9 >>merge &&\n' span_id:1185) (Token id:Id.Lit_Chars val:' cp merge cvswork/merge &&\n' span_id:1186) (Token id:Id.Lit_Chars val:' git add merge &&\n' span_id:1187) (Token id: Id.Lit_Chars val: ' git commit -q -m "Merge test (no-op)" &&\n' span_id: 1188 ) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1189) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1190) (Token id:Id.Lit_Chars val:' sleep 1 && touch merge &&\n' span_id:1191) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id: 1192 ) (Token id:Id.Lit_Chars val:' test_cmp merge ../merge' span_id:1193) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (-p)' span_id:1206))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1210) (Token id:Id.Lit_Chars val:' touch really-empty &&\n' span_id:1211) (Token id:Id.Lit_Chars val:' echo Line 1 > no-lf &&\n' span_id:1212) (Token id:Id.Lit_Chars val:' printf "Line 2" >> no-lf &&\n' span_id:1213) (Token id:Id.Lit_Chars val:' git add really-empty no-lf &&\n' span_id:1214) (Token id: Id.Lit_Chars val: ' git commit -q -m "Update -p test" &&\n' span_id: 1215 ) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1216) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1217) (Token id:Id.Lit_Chars val:' GIT_CONFIG="$git_config" cvs update &&\n' span_id:1218) (Token id:Id.Lit_Chars val:' rm -f failures &&\n' span_id:1219) (Token id:Id.Lit_Chars val:' for i in merge no-lf empty really-empty; do\n' span_id:1220) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs update -p "$i" >$i.out\n' span_id: 1221 ) (Token id:Id.Lit_Chars val:'\ttest_cmp $i.out ../$i >>failures 2>&1\n' span_id:1222) (Token id:Id.Lit_Chars val:' done &&\n' span_id:1223) (Token id:Id.Lit_Chars val:' test -z "$(cat failures)"\n' span_id:1224) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (module list supports packed refs)' span_id:1237))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1241) (Token id: Id.Lit_Chars val: ' GIT_DIR="$SERVERDIR" git pack-refs --all &&\n' span_id: 1242 ) (Token id:Id.Lit_Chars val:' GIT_CONFIG="$git_config" cvs -n up -d 2> out &&\n' span_id:1243) (Token id: Id.Lit_Chars val: ' grep "cvs update: New directory \\`master' span_id: 1244 ) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1246)) (SQ (Token id:Id.Lit_Chars val:'" < out\n' span_id:1248)) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs status' span_id:1271))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1275) (Token id:Id.Lit_Chars val:' mkdir status.dir &&\n' span_id:1276) (Token id:Id.Lit_Chars val:' echo Line > status.dir/status.file &&\n' span_id:1277) (Token id:Id.Lit_Chars val:' echo Line > status.file &&\n' span_id:1278) (Token id:Id.Lit_Chars val:' git add status.dir status.file &&\n' span_id:1279) (Token id: Id.Lit_Chars val: ' git commit -q -m "Status test" &&\n' span_id: 1280 ) (Token id:Id.Lit_Chars val:' git push gitcvs.git >/dev/null &&\n' span_id:1281) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1282) (Token id:Id.Lit_Chars val:' GIT_CONFIG="$git_config" cvs update &&\n' span_id:1283) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs status | grep "^File: status.file" >../out &&\n' span_id: 1284 ) (Token id:Id.Lit_Chars val:' test_line_count = 2 ../out\n' span_id:1285) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs status (nonrecursive)' span_id:1298))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1302) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1303) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs status -l | grep "^File: status.file" >../out &&\n' span_id: 1304 ) (Token id:Id.Lit_Chars val:' test_line_count = 1 ../out\n' span_id:1305) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs status (no subdirs in header)' span_id:1318))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1322) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1323) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs status | grep ^File: >../out &&\n' span_id: 1324 ) (Token id:Id.Lit_Chars val:' ! grep / <../out\n' span_id:1325) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs co -c (shows module database)' span_id:1348))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1352) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs co -c > out &&\n' span_id: 1353 ) (Token id:Id.Lit_Chars val:' grep "^master[\t ][ \t]*master$" <out &&\n' span_id:1354) (Token id: Id.Lit_Chars val: ' ! grep -v "^master[\t ][ \t]*master$" <out\n' span_id: 1355 ) ) } ) (command.Simple words: [ {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^x//' span_id:1423))} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/SP$/ /' span_id:1429))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1432) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/expect))} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1439) fd: -1 here_begin: {(EOF)} here_end_span_id: 1481 stdin_parts: [ ('x\n') ('xRCS file: ') ($ Id.VSub_DollarName '$WORKDIR') ('/gitcvs.git/master/merge,v\n') ('xWorking file: merge\n') ('xhead: 1.4\n') ('xbranch:\n') ('xlocks: strict\n') ('xaccess list:\n') ('xsymbolic names:\n') ('xkeyword substitution: kv\n') ('xtotal revisions: 4;\tselected revisions: 4\n') ('xdescription:\n') ('x----------------------------\n') ('xrevision 1.4\n') ('xdate: __DATE__; author: author; state: Exp; lines: +2 -3\n') ('x\n') ('xMerge test (no-op)\n') ('xSP\n') ('x----------------------------\n') ('xrevision 1.3\n') ('xdate: __DATE__; author: author; state: Exp; lines: +2 -3\n') ('x\n') ('xMerge test (conflict)\n') ('xSP\n') ('x----------------------------\n') ('xrevision 1.2\n') ('xdate: __DATE__; author: author; state: Exp; lines: +2 -3\n') ('x\n') ('xMerge test (merge)\n') ('xSP\n') ('x----------------------------\n') ('xrevision 1.1\n') ('xdate: __DATE__; author: author; state: Exp; lines: +2 -3\n') ('x\n') ('xMerge test (pre-merge)\n') ('xSP\n') ('x=============================================================================\n') ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expectStat) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [1482] ) ] ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs log' span_id:1497))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1501) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1502) (Token id:Id.Lit_Chars val:' test x"$expectStat" = x"0" &&\n' span_id:1503) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs log merge >../out &&\n' span_id: 1504 ) (Token id: Id.Lit_Chars val: ' sed -e "s%2[0-9][0-9][0-9]/[01][0-9]/[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]%__DATE__%" ../out > ../actual &&\n' span_id: 1505 ) (Token id:Id.Lit_Chars val:' test_cmp ../expect ../actual\n' span_id:1506) ) } ) (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs annotate' span_id:1529))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1533) (Token id:Id.Lit_Chars val:' cd cvswork &&\n' span_id:1534) (Token id: Id.Lit_Chars val: ' GIT_CONFIG="$git_config" cvs annotate merge >../out &&\n' span_id: 1535 ) (Token id:Id.Lit_Chars val:' sed -e "s/ .*//" ../out >../actual &&\n' span_id:1536) (Token id: Id.Lit_Chars val: ' for i in 3 1 1 1 1 1 1 1 2 4; do echo 1.$i; done >../expect &&\n' span_id: 1537 ) (Token id:Id.Lit_Chars val:' test_cmp ../expect ../actual\n' span_id:1538) ) } ) (C {(test_done)}) ] )