(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ <'git-cvsserver access\n'> <'\n'> <'tests read access to a git repository with the\n'> <'cvs CLI client via git-cvsserver server'> ) } 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: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(SQ <'skipping git cvsserver tests, perl not available'>)} spids: [39] ) ] ) (C {<test_done>}) ] spids: [27 36] ) ] ) (command.Simple words: [{<cvs>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>}) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (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 <'skipping git-cvsserver tests, cvs not found'>)} spids: [70] ) ] ) (C {<test_done>}) ] spids: [57 67] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<perl>} {<-e>} {(SQ <'use DBI; use DBD::SQLite'>)}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>}) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(SQ <'skipping git-cvsserver tests, Perl SQLite interface unavailable'>)} 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 <setup>)} { (SQ <'\n'> <' git config push.default matching &&\n'> <' echo >empty &&\n'> <' git add empty &&\n'> <' git commit -q -m "First Commit" &&\n'> <' mkdir secondroot &&\n'> <' ( cd secondroot &&\n'> <' git init &&\n'> <' touch secondrootfile &&\n'> <' git add secondrootfile &&\n'> <' git commit -m "second root") &&\n'> <' git fetch secondroot master &&\n'> <' git merge --allow-unrelated-histories FETCH_HEAD &&\n'> <' git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&\n'> <' GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'> <' GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log" &&\n'> <' GIT_DIR="$SERVERDIR" git config gitcvs.authdb "$SERVERDIR/auth.db" &&\n'> <' echo cvsuser:cvGVEarMLnhlA > "$SERVERDIR/auth.db"\n'> ) } ) (C {<test_expect_success>} {(SQ <'basic checkout'>)} { (SQ <'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&\n'> < ' test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/" &&\n' > < ' test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \\$p))" = "secondrootfile/1.1/"' > ) } ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-anonymous>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-git>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<login-anonymous>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<login-git>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<login-git-ok>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'pserver authentication'>)} { (SQ <'cat request-anonymous | git-cvsserver pserver >log 2>&1 &&\n'> <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'pserver authentication failure (non-anonymous user)'>)} { (SQ <'if cat request-git | git-cvsserver pserver >log 2>&1\n'> <' then\n'> <' false\n'> <' else\n'> <' true\n'> <' fi &&\n'> <' sed -ne \\$p log | grep "^I HATE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'pserver authentication success (non-anonymous user with password)'>)} { (SQ <'cat login-git-ok | git-cvsserver pserver >log 2>&1 &&\n'> <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'pserver authentication (login)'>)} { (SQ <'cat login-anonymous | git-cvsserver pserver >log 2>&1 &&\n'> <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'pserver authentication failure (login/non-anonymous user)'>)} { (SQ <'if cat login-git | git-cvsserver pserver >log 2>&1\n'> <' then\n'> <' false\n'> <' else\n'> <' true\n'> <' fi &&\n'> <' sed -ne \\$p log | grep "^I HATE YOU\\$"'> ) } ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-relative>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 400 stdin_parts: [ <'BEGIN AUTH REQUEST\n'> <'gitcvs.git\n'> <'anonymous\n'> <'\n'> <'END AUTH REQUEST\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-conflict>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'req_Root failure (relative pathname)'>)} { (SQ <'if cat request-relative | git-cvsserver pserver >log 2>&1\n'> <' then\n'> <' echo unexpected success\n'> <' false\n'> <' else\n'> <' true\n'> <' fi &&\n'> <' tail log | grep "^error 1 Root must be an absolute pathname$"'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root failure (conflicting roots)'>)} { (SQ <'cat request-conflict | git-cvsserver pserver >log 2>&1 &&\n'> <' tail log | grep "^error 1 Conflicting roots specified$"'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root (strict paths)'>)} { (SQ < 'cat request-anonymous | git-cvsserver --strict-paths pserver "$SERVERDIR" >log 2>&1 &&\n' > <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root failure (strict-paths)'>)} { (SQ <'\n'> <' ! cat request-anonymous |\n'> <' git-cvsserver --strict-paths pserver "$WORKDIR" >log 2>&1\n'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root (w/o strict-paths)'>)} { (SQ <'cat request-anonymous | git-cvsserver pserver "$WORKDIR/" >log 2>&1 &&\n'> <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root failure (w/o strict-paths)'>)} { (SQ <'\n'> <' ! cat request-anonymous |\n'> <' git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1\n'> ) } ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-base>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'req_Root (base-path)'>)} { (SQ < 'cat request-base | git-cvsserver --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n' > <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root failure (base-path)'>)} { (SQ <'\n'> <' ! cat request-anonymous |\n'> < ' git-cvsserver --strict-paths --base-path "$WORKDIR" pserver "$SERVERDIR" >log 2>&1\n' > ) } ) (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] ) ] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) (C {<test_expect_success>} {(SQ <'req_Root (export-all)'>)} { (SQ <'cat request-anonymous | git-cvsserver --export-all pserver "$WORKDIR" >log 2>&1 &&\n'> <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (C {<test_expect_success>} {(SQ <'req_Root failure (export-all w/o whitelist)'>)} {(SQ <'! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'>)} ) (C {<test_expect_success>} {(SQ <'req_Root (everything together)'>)} { (SQ < 'cat request-base | git-cvsserver --export-all --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n' > <' sed -ne \\$p log | grep "^I LOVE YOU\\$"'> ) } ) (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] ) ] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) (C {<test_expect_success>} {(SQ <'gitcvs.enabled = false'>)} { (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n'> <' if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n'> <' then\n'> <' echo unexpected cvs success\n'> <' false\n'> <' else\n'> <' true\n'> <' fi &&\n'> <' grep "GITCVS emulation disabled" cvs.log &&\n'> <' test ! -d cvswork2'> ) } ) (C {<rm>} {<-fr>} {<cvswork2>}) (C {<test_expect_success>} {(SQ <'gitcvs.ext.enabled = true'>)} { (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'> <' GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n'> <' GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> <' test_cmp cvswork cvswork2'> ) } ) (C {<rm>} {<-fr>} {<cvswork2>}) (C {<test_expect_success>} {(SQ <'gitcvs.ext.enabled = false'>)} { (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled false &&\n'> <' GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'> <' if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n'> <' then\n'> <' echo unexpected cvs success\n'> <' false\n'> <' else\n'> <' true\n'> <' fi &&\n'> <' grep "GITCVS emulation disabled" cvs.log &&\n'> <' test ! -d cvswork2'> ) } ) (C {<rm>} {<-fr>} {<cvswork2>}) (C {<test_expect_success>} {(SQ <gitcvs.dbname>)} { (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'> <' GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs.%a.%m.sqlite &&\n'> <' GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> <' test_cmp cvswork cvswork2 &&\n'> <' test -f "$SERVERDIR/gitcvs.ext.master.sqlite" &&\n'> <' cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs.ext.master.sqlite"'> ) } ) (C {<rm>} {<-fr>} {<cvswork2>}) (C {<test_expect_success>} {(SQ <gitcvs.ext.dbname>)} { (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'> <' GIT_DIR="$SERVERDIR" git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&\n'> <' GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&\n'> <' GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> <' test_cmp cvswork cvswork2 &&\n'> <' test -f "$SERVERDIR/gitcvs1.ext.master.sqlite" &&\n'> <' test ! -f "$SERVERDIR/gitcvs2.ext.master.sqlite" &&\n'> <' cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs1.ext.master.sqlite"'> ) } ) (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 op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>}) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.Simple words: [{<git>} {<config>} {<--bool>} {<gitcvs.enabled>} {<true>}] more_env: [ (env_pair name: GIT_DIR val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))} spids: [824] ) ] do_fork: T ) (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] ) ] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) (C {<test_expect_success>} {(SQ <'cvs update (create new file)'>)} { (SQ <'echo testfile1 >testfile1 &&\n'> <' git add testfile1 &&\n'> <' git commit -q -m "Add testfile1" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.1/" &&\n'> <' test_cmp testfile1 ../testfile1'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (update existing file)'>)} { (SQ <'echo line 2 >>testfile1 &&\n'> <' git add testfile1 &&\n'> <' git commit -q -m "Append to testfile1" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.2/" &&\n'> <' test_cmp testfile1 ../testfile1'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_failure>} {(DQ <'cvs update w/o -d doesn\'t create subdir (TODO)'>)} { (SQ <'\n'> <' mkdir test &&\n'> <' echo >test/empty &&\n'> <' git add test &&\n'> <' git commit -q -m "Single Subdirectory" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test ! -d test\n'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (subdirectories)'>)} { (SQ <'(for dir in A A/B A/B/C A/D E; do\n'> <' mkdir $dir &&\n'> <' echo "test file in $dir" >"$dir/file_in_$(echo $dir|sed -e "s#/# #g")" &&\n'> <' git add $dir;\n'> <' done) &&\n'> <' git commit -q -m "deep sub directory structure" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update -d &&\n'> <' (for dir in A A/B A/B/C A/D E; do\n'> <' filename="file_in_$(echo $dir|sed -e "s#/# #g")" &&\n'> < ' if test "$(echo $(grep -v ^D $dir/CVS/Entries|cut -d/ -f2,3,5))" = "$filename/1.1/" &&\n' > <'\ttest_cmp "$dir/$filename" "../$dir/$filename"; then\n'> <' :\n'> <' else\n'> <' echo >failure\n'> <' fi\n'> <' done) &&\n'> <' test ! -f failure'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (delete file)'>)} { (SQ <'git rm testfile1 &&\n'> <' git commit -q -m "Remove testfile1" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test -z "$(grep testfile1 CVS/Entries)" &&\n'> <' test ! -f testfile1'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (re-add deleted file)'>)} { (SQ <'echo readded testfile >testfile1 &&\n'> <' git add testfile1 &&\n'> <' git commit -q -m "Re-Add testfile1" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.4/" &&\n'> <' test_cmp testfile1 ../testfile1'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (merge)'>)} { (SQ <'echo Line 0 >expected &&\n'> <' for i in 1 2 3 4 5 6 7\n'> <' do\n'> <' echo Line $i >>merge\n'> <' echo Line $i >>expected\n'> <' done &&\n'> <' echo Line 8 >>expected &&\n'> <' git add merge &&\n'> <' git commit -q -m "Merge test (pre-merge)" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test "$(echo $(grep merge CVS/Entries|cut -d/ -f2,3,5))" = "merge/1.1/" &&\n'> <' test_cmp merge ../merge &&\n'> <' ( echo Line 0; cat merge ) >merge.tmp &&\n'> <' mv merge.tmp merge &&\n'> <' cd "$WORKDIR" &&\n'> <' echo Line 8 >>merge &&\n'> <' git add merge &&\n'> <' git commit -q -m "Merge test (merge)" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' sleep 1 && touch merge &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test_cmp merge ../expected'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected.C>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine here_begin: {<EOF>} here_end_span_id: 1090 stdin_parts: [ <'<<<<<<< merge.mine\n'> <'Line 0\n'> <'=======\n'> <'LINE 0\n'> <'>>>>>>> merge.1.3\n'> ] ) ) ] do_fork: T ) (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 op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<expected.C>})] do_fork: T ) ] ) ) (C {<test_expect_success>} {(SQ <'cvs update (conflict merge)'>)} { (SQ <'( echo LINE 0; cat merge ) >merge.tmp &&\n'> <' mv merge.tmp merge &&\n'> <' git add merge &&\n'> <' git commit -q -m "Merge test (conflict)" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test_cmp merge ../expected.C'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (-C)'>)} { (SQ <'cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update -C &&\n'> <' test_cmp merge ../merge'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (merge no-op)'>)} { (SQ <'echo Line 9 >>merge &&\n'> <' cp merge cvswork/merge &&\n'> <' git add merge &&\n'> <' git commit -q -m "Merge test (no-op)" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' sleep 1 && touch merge &&\n'> <' GIT_CONFIG="$git_config" cvs -Q update &&\n'> <' test_cmp merge ../merge'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (-p)'>)} { (SQ <'\n'> <' touch really-empty &&\n'> <' echo Line 1 > no-lf &&\n'> <' printf "Line 2" >> no-lf &&\n'> <' git add really-empty no-lf &&\n'> <' git commit -q -m "Update -p test" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs update &&\n'> <' rm -f failures &&\n'> <' for i in merge no-lf empty really-empty; do\n'> <' GIT_CONFIG="$git_config" cvs update -p "$i" >$i.out\n'> <'\ttest_cmp $i.out ../$i >>failures 2>&1\n'> <' done &&\n'> <' test -z "$(cat failures)"\n'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs update (module list supports packed refs)'>)} { (SQ <'\n'> <' GIT_DIR="$SERVERDIR" git pack-refs --all &&\n'> <' GIT_CONFIG="$git_config" cvs -n up -d 2> out &&\n'> <' grep "cvs update: New directory \\`master'> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) (SQ <'" < out\n'>) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs status'>)} { (SQ <'\n'> <' mkdir status.dir &&\n'> <' echo Line > status.dir/status.file &&\n'> <' echo Line > status.file &&\n'> <' git add status.dir status.file &&\n'> <' git commit -q -m "Status test" &&\n'> <' git push gitcvs.git >/dev/null &&\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs update &&\n'> <' GIT_CONFIG="$git_config" cvs status | grep "^File: status.file" >../out &&\n'> <' test_line_count = 2 ../out\n'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs status (nonrecursive)'>)} { (SQ <'\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs status -l | grep "^File: status.file" >../out &&\n'> <' test_line_count = 1 ../out\n'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs status (no subdirs in header)'>)} { (SQ <'\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs status | grep ^File: >../out &&\n'> <' ! grep / <../out\n'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs co -c (shows module database)'>)} { (SQ <'\n'> <' GIT_CONFIG="$git_config" cvs co -c > out &&\n'> <' grep "^master[\t ][ \t]*master$" <out &&\n'> <' ! grep -v "^master[\t ][ \t]*master$" <out\n'> ) } ) (command.Simple words: [{<sed>} {<-e>} {(SQ <'s/^x//'>)} {<-e>} {(SQ <'s/SP$/ /'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(DQ ($ Id.VSub_DollarName '$WORKDIR') <'/expect'>)} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.MultiLine 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'> ] ) ) ] do_fork: T ) (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 <'cvs log'>)} { (SQ <'\n'> <' cd cvswork &&\n'> <' test x"$expectStat" = x"0" &&\n'> <' GIT_CONFIG="$git_config" cvs log merge >../out &&\n'> < ' 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' > <' test_cmp ../expect ../actual\n'> ) } ) (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))}) (C {<test_expect_success>} {(SQ <'cvs annotate'>)} { (SQ <'\n'> <' cd cvswork &&\n'> <' GIT_CONFIG="$git_config" cvs annotate merge >../out &&\n'> <' sed -e "s/ .*//" ../out >../actual &&\n'> <' for i in 3 1 1 1 1 1 1 1 2 4; do echo 1.$i; done >../expect &&\n'> <' test_cmp ../expect ../actual\n'> ) } ) (C {<test_done>}) ] )