(List (= scope= flags=0 words=[] bindings=[('TEST_NO_CREATE_REPO', {[LIT_CHARS NoThanks]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]} ) (If (Pipeline! (Com {[LIT_CHARS test_have_prereq]} {[LIT_CHARS PYTHON]} ) ) (List (= scope= flags=0 words=[] bindings=[('skip_all', {[SQ ]})]) (Com {[LIT_CHARS test_done]} ) ) ) (AndOr OP_OR_IF (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS p4]} {[LIT_CHARS -h]} ) (Com {[LIT_CHARS p4d]} {[LIT_CHARS -h]} ) ) ) (List (= scope= flags=0 words=[] bindings=[('skip_all', {[SQ ]})]) (Com {[LIT_CHARS test_done]} ) ) ) (= scope= flags=0 words=[] bindings=[('testid', {[VarSub this_test transform_ops=[VS_UNARY_POUND {[LIT_CHARS t]}]]})]) (= scope= flags=0 words=[] bindings=[('git_p4_test_start', {[LIT_CHARS 9800]})]) (= scope= flags=0 words=[] bindings=[('P4DPORT', {[ArithSub {A2 AS_OP_PLUS {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 10669]}} {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub testid]}} {A Atom NODE_ARITH_WORD {[VarSub git_p4_test_start]}}}}]})]) (= scope= flags=0 words=[] bindings=[('P4PORT', {[LIT_CHARS localhost] [LIT_OTHER ":"] [VarSub P4DPORT]})]) (= scope= flags=0 words=[] bindings=[('P4CLIENT', {[LIT_CHARS client]})]) (= scope= flags=0 words=[] bindings=[('P4EDITOR', {[LIT_OTHER ":"]})]) (= scope= flags=1 words=[{[LIT_CHARS P4PORT]}, {[LIT_CHARS P4CLIENT]}, {[LIT_CHARS P4EDITOR]}] bindings=[]) (= scope= flags=0 words=[] bindings=[('db', {[DQ [VarSub TRASH_DIRECTORY][LIT_CHARS /db]]})]) (= scope= flags=0 words=[] bindings=[('cli', {[ComSub (Com {[LIT_CHARS test-path-utils]} {[LIT_CHARS real_path]} {[DQ [VarSub TRASH_DIRECTORY][LIT_CHARS /cli]]})]})]) (= scope= flags=0 words=[] bindings=[('git', {[DQ [VarSub TRASH_DIRECTORY][LIT_CHARS /git]]})]) (= scope= flags=0 words=[] bindings=[('pidfile', {[DQ [VarSub TRASH_DIRECTORY][LIT_CHARS /p4d.pid]]})]) (FunctionDef start_p4d [] (List (AndOr OP_AND_IF (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub db]]} {[DQ [VarSub cli]]} {[DQ [VarSub git]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub pidfile]]} ) (AndOr OP_AND_IF (Subshell (List (Fork (Com {[LIT_CHARS p4d]} {[LIT_CHARS -q]} {[LIT_CHARS -r]} {[DQ [VarSub db]]} {[LIT_CHARS -p]} {[VarSub P4DPORT]} ) ) (Com {[LIT_CHARS echo]} {[VarSub !]} < (FilenameRedirectNode filename={[DQ [VarSub pidfile]]} "> 1), > ) ) ) (= scope= flags=0 words=[] bindings=[('i', {[VarSub P4D_START_PATIENCE test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 300]}]})]) ) ) ) (= scope= flags=0 words=[] bindings=[('pid', {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub pidfile]]})]})]) (= scope= flags=0 words=[] bindings=[('ready', {[SQ ]})]) (While (Com {[LIT_CHARS test]} {[VarSub i]} {[LIT_CHARS -gt]} {[LIT_CHARS 0]} ) (List (If (Com {[LIT_CHARS p4]} {[LIT_CHARS info]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (List (= scope= flags=0 words=[] bindings=[('ready', {[LIT_CHARS true]})]) (Com {[LIT_CHARS break]} ) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS kill]} {[LIT_CHARS -0]} {[VarSub pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS break]} ) ) (Com {[LIT_CHARS echo]} {[LIT_CHARS waiting]} {[LIT_CHARS for]} {[LIT_CHARS p4d]} {[LIT_CHARS to]} {[LIT_CHARS start]} ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) (= scope= flags=0 words=[] bindings=[('i', {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub i]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]})]) ) ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub ready]]} ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [VarSub cli]]} ) (Com {[LIT_CHARS p4]} {[LIT_CHARS client]} {[LIT_CHARS -i]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "Client: client\n"][LIT_CHARS "Description: client\n"][LIT_CHARS "Root: "][VarSub cli][LIT_CHARS "\n"][LIT_CHARS "View: //depot/... //client/...\n"]]} 0), > ) ) ) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]} ) ) ) (FunctionDef kill_p4d [] (List (= scope= flags=0 words=[] bindings=[('pid', {[ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub pidfile]]})]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS kill]} {[VarSub pid]} ) (AndOr OP_AND_IF (For i [{[LIT_CHARS 1]}, {[LIT_CHARS 2]}, {[LIT_CHARS 3]}, {[LIT_CHARS 4]}, {[LIT_CHARS 5]}]) (List (AndOr OP_OR_IF (Com {[LIT_CHARS kill]} {[VarSub pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS break]} ) ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_must_fail]} {[LIT_CHARS kill]} {[VarSub pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub db]]} {[DQ [VarSub cli]]} {[DQ [VarSub pidfile]]} ) ) ) ) ) ) (FunctionDef cleanup_git [] (AndOr OP_AND_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub git]]} ) (Com {[LIT_CHARS mkdir]} {[DQ [VarSub git]]} ) ) ) (FunctionDef marshal_dump [] (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('what', {[VarSub 1]})]) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('line', {[VarSub 2 test_op=VS_TEST_COLON_HYPHEN {[LIT_CHARS 1]}]})]) (AndOr OP_AND_IF (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub TRASH_DIRECTORY][LIT_CHARS /marshal-dump.py]]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "import marshal\n"][LIT_CHARS "import sys\n"][LIT_CHARS "for i in range("][VarSub line][LIT_CHARS "):\n"][LIT_CHARS " d = marshal.load(sys.stdin)\n"][LIT_CHARS "print d['"][VarSub what][LIT_CHARS "']\n"]]} 0), > ) (Com {[DQ [VarSub PYTHON_PATH]]} {[DQ [VarSub TRASH_DIRECTORY][LIT_CHARS /marshal-dump.py]]} ) ) ) ) ) (FunctionDef client_view [] (Pipeline (Subshell (AndOr OP_AND_IF (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "Client: client\n"][LIT_CHARS "Description: client\n"][LIT_CHARS "Root: "][VarSub cli][LIT_CHARS "\n"][LIT_CHARS "View:\n"]]} 0), > ) (For arg do_arg_iter) (Com {[LIT_CHARS printf]} {[DQ [\ LIT_ESCAPED_CHAR "\\t"][VarSub arg][\ LIT_ESCAPED_CHAR "\\n"]]} ) ) ) ) (Com {[LIT_CHARS p4]} {[LIT_CHARS client]} {[LIT_CHARS -i]} ) ) ) )