(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TEST_NO_CREATE_REPO spids:[16]) op: Equal rhs: {(NoThanks)} spids: [16] ) ] spids: [16] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RETRY_TIMEOUT spids:[26]) op: Equal rhs: {(60)} spids: [26] ) ] spids: [26] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4D_TIMEOUT spids:[36]) op:Equal rhs:{(300)} spids:[36])] spids: [36] ) (C {(.)} {(./test-lib.sh)}) (If arms: [ (if_arm cond: [(Pipeline children:[(C {(test_have_prereq)} {(PYTHON)})] negated:T)] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:skip_all spids:[56]) op: Equal rhs: {(SQ <'skipping git p4 tests; python not available'>)} spids: [56] ) ] spids: [56] ) (C {(test_done)}) ] spids: [16777215 53] ) ] spids: [16777215 64] ) (AndOr ops: [Op_DPipe] children: [ (Subshell child: (AndOr ops:[Op_DAmp] children:[(C {(p4)} {(-h)}) (C {(p4d)} {(-h)})]) redirects: [ (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)}) (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)}) ] spids: [66 78] ) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:skip_all spids:[91]) op: Equal rhs: {(SQ <'skipping git p4 tests; no p4 or p4d'>)} spids: [91] ) ] spids: [91] ) (C {(test_done)}) ] spids: [88] ) ] ) (FuncDef name: native_path body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DAmp] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:path spids:[131]) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [131] ) ] spids: [131] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (C {(test_have_prereq)} {(CYGWIN)}) (Pipeline children: [(C {(p4)} {(-V)}) (C {(grep)} {(-q)} {(CYGWIN)})] negated: T ) ] ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:path spids:[165]) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(cygpath)} {(--windows)} {(DQ ($ VSub_Name '$path'))}) ] ) left_token: <Left_CommandSub '$('> spids: [166 174] ) } spids: [165] ) ] spids: [165] ) ] spids: [16777215 162] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:path spids:[180]) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(test-path-utils)} {(real_path)} {(DQ ($ VSub_Name '$path'))}) ] ) left_token: <Left_CommandSub '$('> spids: [181 189] ) } spids: [180] ) ] spids: [180] ) ] spids: [177 192] ) (C {(echo)} {(DQ ($ VSub_Name '$path'))}) ] ) ] spids: [128] ) spids: [123 127] ) (FuncDef name: time_in_seconds body: (BraceGroup children: [ (Subshell child: (AndOr ops: [Op_DAmp] children: [ (C {(cd)} {(/)}) (C {(DQ ($ VSub_Name '$PYTHON_PATH'))} {(-c)} {(SQ <'import time; print(int(time.time()))'>)} ) ] ) spids: [229 245] ) ] spids: [226] ) spids: [221 225] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:testid spids:[265]) op: Equal rhs: { (BracedVarSub token: <VSub_Name this_test> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{(t)}) spids: [266 270] ) } spids: [265] ) ] spids: [265] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:git_p4_test_start spids:[272]) op: Equal rhs: {(9800)} spids: [272] ) ] spids: [272] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:P4DPORT spids:[275]) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{(Lit_Digits 10669)}) right: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name '$testid')}) right: (ArithWord w:{($ VSub_Name '$git_p4_test_start')}) ) ) spids: [276 289] ) } spids: [275] ) ] spids: [275] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:P4PORT spids:[292]) op: Equal rhs: {(localhost) (Lit_Other ':') ($ VSub_Name '$P4DPORT')} spids: [292] ) ] spids: [292] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:P4CLIENT spids:[297]) op: Equal rhs: {(client)} spids: [297] ) ] spids: [297] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4USER spids:[300]) op:Equal rhs:{(author)} spids:[300])] spids: [300] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4EDITOR spids:[303]) op:Equal rhs:{(true)} spids:[303])] spids: [303] ) (C {(unset)} {(P4CHARSET)}) (C {(export)} {(P4PORT)} {(P4CLIENT)} {(P4USER)} {(P4EDITOR)} {(P4CHARSET)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:db spids:[323]) op: Equal rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/db))} spids: [323] ) ] spids: [323] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cli spids:[329]) op: Equal rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/cli))} spids: [329] ) ] spids: [329] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:git spids:[335]) op: Equal rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/git))} spids: [335] ) ] spids: [335] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pidfile spids:[341]) op: Equal rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/p4d.pid))} spids: [341] ) ] spids: [341] ) (FuncDef name: cleanup body: (BraceGroup children: [ (If arms: [ (if_arm cond: [(C {(test)} {(-f)} {(DQ ($ VSub_Name '$pidfile'))})] action: [ (AndOr ops: [Op_DAmp] children: [ (SimpleCommand words: [ {(kill)} {(-9)} { (CommandSubPart command_list: (CommandList children: [(C {(cat)} {(DQ ($ VSub_Name '$pidfile'))})] ) left_token: <Left_CommandSub '$('> spids: [377 383] ) } ] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (ControlFlow token: <ControlFlow_Exit exit> arg_word: {(255)} ) ] ) ] spids: [16777215 370] ) ] spids: [16777215 395] ) ] spids: [356] ) spids: [351 355] ) (C {(trap)} {(cleanup)} {(EXIT)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TMPDIR spids:[415]) op: Equal rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY'))} spids: [415] ) ] spids: [415] ) (C {(export)} {(TMPDIR)}) (FuncDef name: start_p4d body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DAmp Op_DAmp] children: [ (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$db'))} {(DQ ($ VSub_Name '$cli'))} {(DQ ($ VSub_Name '$git'))} ) (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$pidfile'))}) (Subshell child: (AndOr ops: [Op_DAmp] children: [ (C {(cd)} {(DQ ($ VSub_Name '$db'))}) (BraceGroup children: [ (Sentence child: (C {(p4d)} {(-q)} {(-p)} {($ VSub_Name '$P4DPORT')} {(DQ ($ VSub_At '$@'))}) terminator: <Op_Amp '&'> ) (SimpleCommand words: [{(echo)} {($ VSub_Bang '$!')}] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_Name '$pidfile'))} ) ] ) ] spids: [475] ) ] ) spids: [463 506] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i spids:[532]) op: Equal rhs: { (BracedVarSub token: <VSub_Name P4D_START_PATIENCE> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(300)}) spids: [533 537] ) } spids: [532] ) ] spids: [532] ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid spids:[540]) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(cat)} {(DQ ($ VSub_Name '$pidfile'))})] ) left_token: <Left_CommandSub '$('> spids: [541 547] ) } spids: [540] ) ] spids: [540] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeout spids:[551]) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w: { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub '$('> spids: [553 555] ) } ) right: (ArithWord w:{($ VSub_Name '$P4D_TIMEOUT')}) ) spids: [552 561] ) } spids: [551] ) ] spids: [551] ) (Sentence child: (WhileUntil keyword: <KW_While while> cond: [(C {(true)})] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (C {(test)} { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub '$('> spids: [576 578] ) } {(-gt)} {($ VSub_Name '$timeout')} ) ] action: [ (C {(kill)} {(-9)} {($ VSub_Name '$pid')}) (ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] spids: [16777215 585] ) ] spids: [16777215 600] ) (C {(sleep)} {(1)}) ] spids: [569 608] ) ) terminator: <Op_Amp '&'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:watchdog_pid spids:[613]) op: Equal rhs: {($ VSub_Bang '$!')} spids: [613] ) ] spids: [613] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ready spids:[618]) op: Equal rhs: (EmptyWord) spids: [618] ) ] spids: [618] ) (WhileUntil keyword: <KW_While while> cond: [(C {(test)} {($ VSub_Name '$i')} {(-gt)} {(0)})] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (SimpleCommand words: [{(p4)} {(info)}] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) (Redir op: <Redir_GreatAnd '2>&'> fd: 2 arg_word: {(1)} ) ] ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ready spids:[655]) op: Equal rhs: {(true)} spids: [655] ) ] spids: [655] ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [16777215 652] ) ] spids: [16777215 662] ) (AndOr ops: [Op_DPipe] children: [ (SimpleCommand words: [{(kill)} {(-0)} {($ VSub_Name '$pid')}] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (ControlFlow token:<ControlFlow_Break break>) ] ) (C {(echo)} {(waiting)} {(KW_For for)} {(p4d)} {(to)} {(start)}) (C {(sleep)} {(1)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i spids:[701]) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name '$i')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [702 711] ) } spids: [701] ) ] spids: [701] ) ] spids: [632 714] ) ) (If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$ready'))})] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [16777215 729] ) ] spids: [16777215 741] ) (C {(p4_add_user)} {(author)}) (AndOr ops: [Op_DAmp] children: [ (C {(client_view)} {(DQ ('//depot/... //client/...'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] ) ] spids: [430] ) spids: [425 429] ) (FuncDef name: p4_add_user body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:name spids:[784]) op: Equal rhs: {($ VSub_Number '$1')} spids: [784] ) ] spids: [784] ) (SimpleCommand words: [{(p4)} {(user)} {(-f)} {(-i)}] redirects: [ (HereDoc op: <Redir_DLessDash '<<-'> fd: 16777215 here_begin: {(EOF)} here_end_span_id: 811 stdin_parts: [ ('User: ') ($ VSub_Name '$name') ('\n') ('Email: ') ($ VSub_Name '$name') ('@example.com\n') ('FullName: Dr. ') ($ VSub_Name '$name') ('\n') ] ) ] ) ] ) ] spids: [781] ) spids: [776 780] ) (FuncDef name: p4_add_job body: (BraceGroup children: [ (SimpleCommand words: [{(p4)} {(job)} {(-f)} {(-i)}] redirects: [ (HereDoc op: <Redir_DLessDash '<<-'> fd: 16777215 here_begin: {(EOF)} here_end_span_id: 841 stdin_parts: [ ('Job: ') ($ VSub_Number '$1') ('\n') ('Status: open\n') ('User: dummy\n') ('Description:\n') ] ) ] ) ] spids: [820] ) spids: [815 819] ) (FuncDef name: retry_until_success body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeout spids:[853]) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w: { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub '$('> spids: [855 857] ) } ) right: (ArithWord w:{($ VSub_Name '$RETRY_TIMEOUT')}) ) spids: [854 863] ) } spids: [853] ) ] spids: [853] ) (WhileUntil keyword: <KW_Until until> cond: [ (AndOr ops: [Op_DPipe] children: [ (SimpleCommand words: [{(DQ ($ VSub_At '$@'))}] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (C {(test)} { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub '$('> spids: [879 881] ) } {(-gt)} {($ VSub_Name '$timeout')} ) ] ) ] body: (DoGroup children:[(C {(sleep)} {(1)})] spids:[888 896]) ) ] spids: [850] ) spids: [845 849] ) (FuncDef name: retry_until_fail body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeout spids:[909]) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w: { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub '$('> spids: [911 913] ) } ) right: (ArithWord w:{($ VSub_Name '$RETRY_TIMEOUT')}) ) spids: [910 919] ) } spids: [909] ) ] spids: [909] ) (WhileUntil keyword: <KW_Until until> cond: [ (AndOr ops: [Op_DPipe] children: [ (Pipeline children: [ (SimpleCommand words: [{(DQ ($ VSub_At '$@'))}] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) ] negated: T ) (C {(test)} { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub '$('> spids: [937 939] ) } {(-gt)} {($ VSub_Name '$timeout')} ) ] ) ] body: (DoGroup children:[(C {(sleep)} {(1)})] spids:[946 954]) ) ] spids: [906] ) spids: [901 905] ) (FuncDef name: kill_p4d body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid spids:[967]) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(cat)} {(DQ ($ VSub_Name '$pidfile'))})] ) left_token: <Left_CommandSub '$('> spids: [968 974] ) } spids: [967] ) ] spids: [967] ) (C {(retry_until_fail)} {(kill)} {($ VSub_Name '$pid')}) (C {(retry_until_fail)} {(kill)} {(-9)} {($ VSub_Name '$pid')}) (AndOr ops: [Op_DAmp Op_DAmp] children: [ (SimpleCommand words: [{(test_must_fail)} {(kill)} {($ VSub_Name '$pid')}] redirects: [ (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)}) (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)}) ] ) (C {(rm)} {(-rf)} {(DQ ($ VSub_Name '$db'))} {(DQ ($ VSub_Name '$cli'))} {(DQ ($ VSub_Name '$pidfile'))} ) (C {(retry_until_fail)} {(kill)} {(-9)} {($ VSub_Name '$watchdog_pid')}) ] ) ] spids: [964] ) spids: [959 963] ) (FuncDef name: cleanup_git body: (BraceGroup children: [ (C {(retry_until_success)} {(rm)} {(-r)} {(DQ ($ VSub_Name '$git'))}) (AndOr ops: [Op_DAmp] children: [ (C {(test_must_fail)} {(test)} {(-d)} {(DQ ($ VSub_Name '$git'))}) (C {(retry_until_success)} {(mkdir)} {(DQ ($ VSub_Name '$git'))}) ] ) ] spids: [1047] ) spids: [1042 1046] ) (FuncDef name: marshal_dump body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DAmp Op_DAmp] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:what spids:[1093]) op: Equal rhs: {($ VSub_Number '$1')} spids: [1093] ) ] spids: [1093] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:line spids:[1099]) op: Equal rhs: { (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)}) spids: [1100 1104] ) } spids: [1099] ) ] spids: [1099] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/marshal-dump.py))} ) (HereDoc op: <Redir_DLessDash '<<-'> fd: 16777215 here_begin: {(EOF)} here_end_span_id: 1133 stdin_parts: [ ('import marshal\n') ('import sys\n') ("instream = getattr(sys.stdin, 'buffer', sys.stdin)\n") ('for i in range(') ($ VSub_Name '$line') ('):\n') (' d = marshal.load(instream)\n') ("print(d[b'") ($ VSub_Name '$what') ("'].decode('utf-8'))\n") ] ) ] ) (C {(DQ ($ VSub_Name '$PYTHON_PATH'))} {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/marshal-dump.py))} ) ] ) ] spids: [1090] ) spids: [1085 1089] ) (FuncDef name: client_view body: (BraceGroup children: [ (Pipeline children: [ (Subshell child: (AndOr ops: [Op_DAmp] children: [ (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op: <Redir_DLessDash '<<-'> fd: 16777215 here_begin: {(EOF)} here_end_span_id: 1195 stdin_parts: [ ('Client: ') ($ VSub_Name '$P4CLIENT') ('\n') ('Description: ') ($ VSub_Name '$P4CLIENT') ('\n') ('Root: ') ($ VSub_Name '$cli') ('\n') ('AltRoots: ') (CommandSubPart command_list: (CommandList children: [(C {(native_path)} {(DQ ($ VSub_Name '$cli'))})] ) left_token: <Left_CommandSub '$('> spids: [1184 1190] ) ('\n') ('LineEnd: unix\n') ('View:\n') ] ) ] ) (C {(printf)} {(DQ (Lit_Other '\\') ('t%s') (Lit_Other '\\') (n))} {(DQ ($ VSub_At '$@'))} ) ] ) spids: [1164 1211] ) (C {(p4)} {(client)} {(-i)}) ] negated: F ) ] spids: [1161] ) spids: [1156 1160] ) (FuncDef name: is_cli_file_writeable body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:file spids:[1240]) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [1240] ) ] spids: [1240] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (C {(test_have_prereq)} {(CYGWIN)}) (Pipeline children: [(C {(p4)} {(-V)}) (C {(grep)} {(-q)} {(CYGWIN)})] negated: F ) ] ) ] action: [ (AndOr ops: [Op_DAmp] children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stat spids:[1272]) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(stat)} {(--format) (Lit_Other '=') (Lit_Other '%') (a)} {(DQ ($ VSub_Name '$file'))} ) ] ) left_token: <Left_CommandSub '$('> spids: [1273 1284] ) } spids: [1272] ) ] spids: [1272] ) (C {(test)} {($ VSub_Name '$stat')} {(Lit_Other '=')} {(644)}) ] ) ] spids: [16777215 1269] ) ] else_action: [(C {(test)} {(-w)} {(DQ ($ VSub_Name '$file'))})] spids: [1298 1310] ) ] ) ] spids: [1229] ) spids: [1224 1228] ) ] )