(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TEST_NO_CREATE_REPO) op: Equal rhs: {(NoThanks)} spids: [16] ) ] spids: [16] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:RETRY_TIMEOUT) op:Equal rhs:{(60)} spids:[26])] spids: [26] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4D_TIMEOUT) 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:True)] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:skip_all) op: Equal rhs: {(SQ <"skipping git p4 tests; python not available">)} spids: [56] ) ] spids: [56] ) (C {(test_done)}) ] spids: [-1 53] ) ] spids: [-1 64] ) (AndOr children: [ (Subshell child: (AndOr children:[(C {(p4)} {(-h)})(C {(p4d)} {(-h)})] op_id:Op_DAmp) redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[80]) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[83]) ] spids: [66 78] ) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:skip_all) op: Equal rhs: {(SQ <"skipping git p4 tests; no p4 or p4d">)} spids: [91] ) ] spids: [91] ) (C {(test_done)}) ] spids: [88] ) ] op_id: Op_DPipe ) (FuncDef name: native_path body: (BraceGroup children: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:path) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [131] ) ] spids: [131] ) (AndOr children: [ (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test_have_prereq)} {(CYGWIN)}) (Pipeline children: [(C {(p4)} {(-V)}) (C {(grep)} {(-q)} {(CYGWIN)})] negated: True ) ] op_id: Op_DAmp ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:path) 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: [-1 162] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:path) 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"))}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [128] ) spids: [123 127] ) (FuncDef name: time_in_seconds body: (BraceGroup children: [ (Subshell child: (AndOr children: [ (C {(cd)} {(/)}) (C {(DQ ($ VSub_Name "$PYTHON_PATH"))} {(-c)} {(SQ <"import time; print(int(time.time()))">)} ) ] op_id: Op_DAmp ) spids: [229 245] ) ] spids: [226] ) spids: [221 225] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:testid) 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) op:Equal rhs:{(9800)} spids:[272])] spids: [272] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:P4DPORT) 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) op: Equal rhs: {(localhost) (Lit_Other ":") ($ VSub_Name "$P4DPORT")} spids: [292] ) ] spids: [292] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4CLIENT) op:Equal rhs:{(client)} spids:[297])] spids: [297] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4USER) op:Equal rhs:{(author)} spids:[300])] spids: [300] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:P4EDITOR) 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) op: Equal rhs: {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/db))} spids: [323] ) ] spids: [323] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cli) op: Equal rhs: {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/cli))} spids: [329] ) ] spids: [329] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:git) op: Equal rhs: {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/git))} spids: [335] ) ] spids: [335] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pidfile) 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 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_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [385] ) ] ) (C {(exit)} {(255)}) ] op_id: Op_DAmp ) ] spids: [-1 370] ) ] spids: [-1 395] ) ] spids: [356] ) spids: [351 355] ) (C {(trap)} {(cleanup)} {(EXIT)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TMPDIR) op: Equal rhs: {(DQ ($ VSub_Name "$TRASH_DIRECTORY"))} spids: [415] ) ] spids: [415] ) (C {(export)} {(TMPDIR)}) (FuncDef name: start_p4d body: (BraceGroup children: [ (AndOr children: [ (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name "$db"))} {(DQ ($ VSub_Name "$cli"))} {(DQ ($ VSub_Name "$git"))} ) (AndOr children: [ (C {(rm)} {(-f)} {(DQ ($ VSub_Name "$pidfile"))}) (AndOr children: [ (Subshell child: (AndOr 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_id: Redir_Great fd: -1 arg_word: {(DQ ($ VSub_Name "$pidfile"))} spids: [497] ) ] ) ] spids: [475] ) ] op_id: Op_DAmp ) spids: [463 506] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i) 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] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid) 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) 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: (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")}) (C {(exit)} {(1)})] spids: [-1 585] ) ] spids: [-1 600] ) (C {(sleep)} {(1)}) ] spids: [569 608] ) ) terminator: <Op_Amp "&"> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:watchdog_pid) op: Equal rhs: {($ VSub_Bang "$!")} spids: [613] ) ] spids: [613] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ready) op:Equal rhs:{(SQ )} spids:[618])] spids: [618] ) (While cond: [(C {(test)} {($ VSub_Name "$i")} {(-gt)} {(0)})] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (SimpleCommand words: [{(p4)} {(info)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/null)} spids: [645] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [648] ) ] ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ready) op: Equal rhs: {(true)} spids: [655] ) ] spids: [655] ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [-1 652] ) ] spids: [-1 662] ) (AndOr children: [ (SimpleCommand words: [{(kill)} {(-0)} {($ VSub_Name "$pid")}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [675] ) ] ) (ControlFlow token:<ControlFlow_Break break>) ] op_id: Op_DPipe ) (C {(echo)} {(waiting)} {(KW_For for)} {(p4d)} {(to)} {(start)}) (C {(sleep)} {(1)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i) 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: [-1 729] ) ] spids: [-1 741] ) (C {(p4_add_user)} {(author)}) (AndOr children: [ (C {(client_view)} {(DQ ("//depot/... //client/..."))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] op_id: Op_DAmp ) ] spids: [430] ) spids: [425 429] ) (FuncDef name: p4_add_user body: (BraceGroup children: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:name) op: Equal rhs: {($ VSub_Number "$1")} spids: [784] ) ] spids: [784] ) (SimpleCommand words: [{(p4)} {(user)} {(-f)} {(-i)}] redirects: [ (HereDoc op_id: Redir_DLessDash fd: -1 body: { (DQ ("User: ") ($ VSub_Name "$name") ("\n") ("Email: ") ($ VSub_Name "$name") ("@example.com\n") ("FullName: Dr. ") ($ VSub_Name "$name") ("\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [798] ) ] ) ] op_id: Op_DAmp ) ] spids: [781] ) spids: [776 780] ) (FuncDef name: p4_add_job body: (BraceGroup children: [ (SimpleCommand words: [{(p4)} {(job)} {(-f)} {(-i)}] redirects: [ (HereDoc op_id: Redir_DLessDash fd: -1 body: { (DQ ("Job: ") ($ VSub_Number "$1") ("\n") ("Status: open\n") ("User: dummy\n") ("Description:\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [829] ) ] ) ] spids: [818] ) spids: [813 817] ) (FuncDef name: retry_until_success body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeout) 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: [851 853] ) } ) right: (ArithWord w:{($ VSub_Name "$RETRY_TIMEOUT")}) ) spids: [850 859] ) } spids: [849] ) ] spids: [849] ) (Until cond: [ (AndOr children: [ (SimpleCommand words: [{(DQ ($ VSub_At "$@"))}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[868])] ) (C {(test)} { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub "$("> spids: [875 877] ) } {(-gt)} {($ VSub_Name "$timeout")} ) ] op_id: Op_DPipe ) ] body: (DoGroup children:[(C {(sleep)} {(1)})] spids:[884892]) ) ] spids: [846] ) spids: [841 845] ) (FuncDef name: retry_until_fail body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:timeout) 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: [907 909] ) } ) right: (ArithWord w:{($ VSub_Name "$RETRY_TIMEOUT")}) ) spids: [906 915] ) } spids: [905] ) ] spids: [905] ) (Until cond: [ (AndOr children: [ (Pipeline children: [ (SimpleCommand words: [{(DQ ($ VSub_At "$@"))}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [926] ) ] ) ] negated: True ) (C {(test)} { (CommandSubPart command_list: (CommandList children:[(C {(time_in_seconds)})]) left_token: <Left_CommandSub "$("> spids: [933 935] ) } {(-gt)} {($ VSub_Name "$timeout")} ) ] op_id: Op_DPipe ) ] body: (DoGroup children:[(C {(sleep)} {(1)})] spids:[942950]) ) ] spids: [902] ) spids: [897 901] ) (FuncDef name: kill_p4d body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pid) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(cat)} {(DQ ($ VSub_Name "$pidfile"))})] ) left_token: <Left_CommandSub "$("> spids: [964 970] ) } spids: [963] ) ] spids: [963] ) (C {(retry_until_fail)} {(kill)} {($ VSub_Name "$pid")}) (C {(retry_until_fail)} {(kill)} {(-9)} {($ VSub_Name "$pid")}) (AndOr children: [ (SimpleCommand words: [{(test_must_fail)} {(kill)} {($ VSub_Name "$pid")}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/null)} spids: [999] ) (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[1002]) ] ) (AndOr children: [ (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")}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [960] ) spids: [955 959] ) (FuncDef name: cleanup_git body: (BraceGroup children: [ (C {(retry_until_success)} {(rm)} {(-r)} {(DQ ($ VSub_Name "$git"))}) (AndOr children: [ (C {(test_must_fail)} {(test)} {(-d)} {(DQ ($ VSub_Name "$git"))}) (C {(retry_until_success)} {(mkdir)} {(DQ ($ VSub_Name "$git"))}) ] op_id: Op_DAmp ) ] spids: [1043] ) spids: [1038 1042] ) (FuncDef name: marshal_dump body: (BraceGroup children: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:what) op: Equal rhs: {($ VSub_Number "$1")} spids: [1089] ) ] spids: [1089] ) (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:line) op: Equal rhs: { (BracedVarSub token: <VSub_Number 2> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)}) spids: [1096 1100] ) } spids: [1095] ) ] spids: [1095] ) (AndOr children: [ (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/marshal-dump.py))} spids: [1107] ) (HereDoc op_id: Redir_DLessDash fd: -1 body: { (DQ ("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") ) } do_expansion: True here_end: EOF was_filled: True spids: [1113] ) ] ) (C {(DQ ($ VSub_Name "$PYTHON_PATH"))} {(DQ ($ VSub_Name "$TRASH_DIRECTORY") (/marshal-dump.py))} ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [1086] ) spids: [1081 1085] ) (FuncDef name: client_view body: (BraceGroup children: [ (Pipeline children: [ (Subshell child: (AndOr children: [ (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op_id: Redir_DLessDash fd: -1 body: { (DQ ("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: [1178 1184] ) ("\n") ("LineEnd: unix\n") ("View:\n") ) } do_expansion: True here_end: EOF was_filled: True spids: [1163] ) ] ) (C {(printf)} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\t">) ("%s") (EscapedLiteralPart token: <Lit_EscapedChar "\\n"> ) ) } {(DQ ($ VSub_At "$@"))} ) ] op_id: Op_DAmp ) spids: [1158 1202] ) (C {(p4)} {(client)} {(-i)}) ] negated: False ) ] spids: [1155] ) spids: [1150 1154] ) (FuncDef name: is_cli_file_writeable body: (BraceGroup children: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:file) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [1231] ) ] spids: [1231] ) (If arms: [ (if_arm cond: [ (AndOr children: [ (C {(test_have_prereq)} {(CYGWIN)}) (Pipeline children: [(C {(p4)} {(-V)}) (C {(grep)} {(-q)} {(CYGWIN)})] negated: False ) ] op_id: Op_DAmp ) ] action: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:stat) 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: [1264 1275] ) } spids: [1263] ) ] spids: [1263] ) (C {(test)} {($ VSub_Name "$stat")} {(Lit_Other "=")} {(644)}) ] op_id: Op_DAmp ) ] spids: [-1 1260] ) ] else_action: [(C {(test)} {(-w)} {(DQ ($ VSub_Name "$file"))})] spids: [1289 1301] ) ] op_id: Op_DAmp ) ] spids: [1220] ) spids: [1215 1219] ) ] )