(CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(no)} spids:[89])] spids: [89] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:WORKDIR) op:Equal rhs:{(work)} spids:[92])] spids: [92] ) (FuncDef name: usage body: (BraceGroup children: [ (C {(echo)} {(DQ ('Usage: tzsetup.sh [-s script] [-w workdir]'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [100] ) spids: [96 99] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:COMMAND) op:Equal rhs:{(etcupdate)} spids:[120])] spids: [120] ) (While cond: [(Sentence child:(C {(getopts)} {(DQ ('s:w:'))} {(option)}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$option')} arms: [ (case_arm pat_list: [{(s)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:COMMAND) op: Equal rhs: {(DQ ('sh ') ($ VSub_Name '$OPTARG'))} spids: [148] ) ] spids: [148] ) ] spids: [144 145 155 16777215] ) (case_arm pat_list: [{(w)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:WORKDIR) op: Equal rhs: {($ VSub_Name '$OPTARG')} spids: [162] ) ] spids: [162] ) ] spids: [158 159 166 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(C {(echo)}) (C {(usage)})] spids: [169 170 179 16777215] ) ] spids: [137 141 182] ) ] spids: [134 184] ) ) (C {(shift)} { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithVarRef name:OPTIND) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [188 195] ) } ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-ne)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(usage)})] spids: [16777215 210] ) ] spids: [16777215 215] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CONFLICTS) op: Equal rhs: {($ VSub_Name '$WORKDIR') (/conflicts)} spids: [218] ) ] spids: [218] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:OLD) op: Equal rhs: {($ VSub_Name '$WORKDIR') (/old)} spids: [222] ) ] spids: [222] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:NEW) op: Equal rhs: {($ VSub_Name '$WORKDIR') (/current)} spids: [226] ) ] spids: [226] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TEST) op: Equal rhs: {($ VSub_Name '$WORKDIR') (/test)} spids: [230] ) ] spids: [230] ) (FuncDef name: build_trees body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:i) op:Equal spids:[249]) (assign_pair lhs:(LhsName name:j) op:Equal spids:[251]) (assign_pair lhs:(LhsName name:k) op:Equal spids:[253]) ] spids: [247] ) (C {(rm)} {(-rf)} {($ VSub_Name '$OLD')} {($ VSub_Name '$NEW')} {($ VSub_Name '$TEST')} {($ VSub_Name '$CONFLICTS')} ) (C {(mkdir)} {(-p)} {($ VSub_Name '$OLD')} {($ VSub_Name '$NEW')} {($ VSub_Name '$TEST')}) (C {(mkdir)} {(-p)} {($ VSub_Name '$TEST') (/etc)}) (C {(mkdir)} {(-p)} {($ VSub_Name '$TEST') (/var/db)}) (C {(mkdir)} {(-p)} {($ VSub_Name '$TEST') (/usr/share/zoneinfo)}) (SimpleCommand words: [{(echo)} {(DQ (foo))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$TEST') (/usr/share/zoneinfo/foo)} spids: [316] ) ] ) ] spids: [239] ) spids: [235 238] ) (FuncDef name: missing body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-e)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(-o)} {(-L)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' should be missing'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [368] ) ] spids: [368] ) ] spids: [16777215 356] ) ] spids: [16777215 372] ) ] spids: [332] ) spids: [328 331] ) (FuncDef name: link body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:val) op:Equal spids:[392])] spids: [390] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(Lit_Other '[')} {(-L)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' should be a link'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [423] ) ] spids: [423] ) ] spids: [16777215 411] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-gt)} {(1)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:val) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(readlink)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')}) ] ) left_token: <Left_Backtick '`'> spids: [444 450] ) } spids: [443] ) ] spids: [443] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$val'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Number '$2'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Link ') ($ VSub_Number '$1') (' should link to ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Number '$2') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [486] ) ] spids: [486] ) ] spids: [16777215 471] ) ] spids: [16777215 490] ) ] spids: [427 440] ) ] spids: [16777215 493] ) ] spids: [387] ) spids: [383 386] ) (FuncDef name: file body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:contents) op:Equal spids:[516]) (assign_pair lhs:(LhsName name:sum) op:Equal spids:[518]) ] spids: [514] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(Lit_Other '[')} {(-f)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' should be a regular file'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [549] ) ] spids: [549] ) ] spids: [16777215 537] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-eq)} {(2)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:contents) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(cat)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')}) ] ) left_token: <Left_Backtick '`'> spids: [570 576] ) } spids: [569] ) ] spids: [569] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$contents'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Number '$2'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' has wrong contents'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [609] ) ] spids: [609] ) ] spids: [16777215 597] ) ] spids: [16777215 613] ) ] spids: [553 566] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-eq)} {(3)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sum) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(md5)} {(-q)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')}) ] ) left_token: <Left_Backtick '`'> spids: [633 641] ) } spids: [632] ) ] spids: [632] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$sum'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Number '$3'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' has wrong contents'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [674] ) ] spids: [674] ) ] spids: [16777215 662] ) ] spids: [16777215 678] ) ] spids: [616 629] ) ] spids: [16777215 681] ) ] spids: [511] ) spids: [507 510] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} { (CommandSubPart command_list: (CommandList children:[(C {(id)} {(-u)})]) left_token: <Left_Backtick '`'> spids: [690 694] ) } {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('must be root'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)}) ] spids: [16777215 703] ) ] spids: [16777215 717] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-r)} {(/etc/etcupdate.conf)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ ('WARNING: /etc/etcupdate.conf settings may break some tests.'))})] spids: [16777215 731] ) ] spids: [16777215 740] ) (C {(build_trees)}) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-nr)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/testn.out)} spids: [762] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct.out)} spids: [770] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ )} do_expansion: True here_end: EOF was_filled: T spids: [775] ) ] ) (C {(echo)} {(DQ ('Differences for no /etc/localtime with -n:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/testn.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[812])] spids: [812] ) ] ) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test.out)} spids: [828] ) ] ) (C {(echo)} {(DQ ('Differences for no /etc/localtime:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[866])] spids: [866] ) ] ) (C {(missing)} {(/etc/localtime)}) (C {(missing)} {(/var/db/zoneinfo)}) (C {(build_trees)}) (C {(ln)} {(-s)} {(/dev/null)} {($ VSub_Name '$TEST') (/etc/localtime)}) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-nr)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/testn.out)} spids: [907] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct.out)} spids: [915] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ )} do_expansion: True here_end: EOF was_filled: T spids: [920] ) ] ) (C {(echo)} {(DQ ('Differences for symlinked /etc/localtime with -n:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/testn.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[957])] spids: [957] ) ] ) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test.out)} spids: [973] ) ] ) (C {(echo)} {(DQ ('Differences for symlinked /etc/localtime:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1011])] spids: [1011] ) ] ) (C {(link)} {(/etc/localtime)} {(DQ (/dev/null))}) (C {(missing)} {(/var/db/zoneinfo)}) (C {(build_trees)}) (SimpleCommand words: [{(echo)} {(DQ (bar))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$TEST') (/etc/localtime)} spids: [1040] ) ] ) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-nr)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/testn.out)} spids: [1058] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct.out)} spids: [1066] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ ('Warnings:\n') (' Needs update: /etc/localtime (required manual update via tzsetup(8))\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [1071] ) ] ) (C {(echo)} {(DQ ('Differences for missing /var/db/zoneinfo with -n:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/testn.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1110])] spids: [1110] ) ] ) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test.out)} spids: [1126] ) ] ) (C {(echo)} {(DQ ('Differences for missing /var/db/zoneinfo:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1164])] spids: [1164] ) ] ) (C {(file)} {(/etc/localtime)} {(DQ (bar))}) (C {(missing)} {(/var/db/zoneinfo)}) (C {(build_trees)}) (SimpleCommand words: [{(echo)} {(DQ (bar))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$TEST') (/etc/localtime)} spids: [1193] ) ] ) (SimpleCommand words: [{(echo)} {(DQ (foo))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$TEST') (/var/db/zoneinfo)} spids: [1204] ) ] ) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-nr)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/testn.out)} spids: [1222] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct.out)} spids: [1230] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ )} do_expansion: True here_end: EOF was_filled: T spids: [1235] ) ] ) (C {(echo)} {(DQ ('Differences for real update with -n:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/testn.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1272])] spids: [1272] ) ] ) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test.out)} spids: [1288] ) ] ) (C {(echo)} {(DQ ('Differences for real update:'))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1326])] spids: [1326] ) ] ) (C {(file)} {(/etc/localtime)} {(DQ (foo))}) (C {(file)} {(/var/db/zoneinfo)} {(DQ (foo))}) (C {(Lit_Other '[')} {(DQ (${ VSub_Name FAILED))} {(Lit_Other '=')} {(no)} {(Lit_Other ']')}) ] )