(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: ignore.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:[250])] spids: [248] ) (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')}) (ForEach iter_name: i iter_words: [{($ VSub_Name '$OLD')} {($ VSub_Name '$NEW')} {($ VSub_Name '$TEST')}] do_arg_iter: F body: (DoGroup children: [(C {(mkdir)} {(-p)} {($ VSub_Name '$i') (/tree)})] spids: [292 303] ) spids: [284 290] ) (SimpleCommand words: [{(echo)} {(DQ (foo))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$NEW') (/tree/add)} spids: [321] ) ] ) (ForEach iter_name: i iter_words: [{($ VSub_Name '$OLD')} {($ VSub_Name '$TEST')}] do_arg_iter: F body: (DoGroup children: [ (SimpleCommand words: [{(echo)} {(DQ (old))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$i') (/tree/modify)} spids: [347] ) ] ) ] spids: [338 353] ) spids: [332 336] ) (SimpleCommand words: [{(echo)} {(DQ (new))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$NEW') (/tree/modify)} spids: [362] ) ] ) (ForEach iter_name: i iter_words: [{($ VSub_Name '$OLD')} {($ VSub_Name '$TEST')}] do_arg_iter: F body: (DoGroup children: [ (SimpleCommand words: [{(echo)} {(DQ (old))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$i') (/tree/remove)} spids: [388] ) ] ) ] spids: [379 394] ) spids: [373 377] ) (ForEach iter_name: i iter_words: [{($ VSub_Name '$OLD')} {($ VSub_Name '$TEST')}] do_arg_iter: F body: (DoGroup children: [ (C {(mkdir)} {($ VSub_Name '$i') (/rmdir)}) (SimpleCommand words: [{(echo)} {(DQ (foo))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$i') (/rmdir/file)} spids: [428] ) ] ) ] spids: [413 434] ) spids: [407 411] ) ] spids: [245] ) spids: [241 244] ) (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: [482] ) ] spids: [482] ) ] spids: [16777215 470] ) ] spids: [16777215 486] ) ] spids: [446] ) spids: [442 445] ) (FuncDef name: present body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(Lit_Other '[')} {(-e)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(-o)} {(-L)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' should be present'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [536] ) ] spids: [536] ) ] spids: [16777215 524] ) ] spids: [16777215 540] ) ] spids: [498] ) spids: [494 497] ) (FuncDef name: dir body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(Lit_Other '[')} {(-d)} {($ VSub_Name '$TEST') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' should be a directory'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [582] ) ] spids: [582] ) ] spids: [16777215 570] ) ] spids: [16777215 586] ) ] spids: [552] ) spids: [548 551] ) (FuncDef name: file body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:contents) op:Equal spids:[609]) (assign_pair lhs:(LhsName name:sum) op:Equal spids:[611]) ] spids: [607] ) (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: [642] ) ] spids: [642] ) ] spids: [16777215 630] ) (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: [663 669] ) } spids: [662] ) ] spids: [662] ) (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: [702] ) ] spids: [702] ) ] spids: [16777215 690] ) ] spids: [16777215 706] ) ] spids: [646 659] ) (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: [726 734] ) } spids: [725] ) ] spids: [725] ) (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: [767] ) ] spids: [767] ) ] spids: [16777215 755] ) ] spids: [16777215 771] ) ] spids: [709 722] ) ] spids: [16777215 774] ) ] spids: [604] ) spids: [600 603] ) (FuncDef name: conflict body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:sum) op:Equal spids:[794])] spids: [792] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(Lit_Other '[')} {(-f)} {($ VSub_Name '$CONFLICTS') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' missing conflict'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [825] ) ] spids: [825] ) ] spids: [16777215 813] ) (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:sum) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(md5)} {(-q)} {($ VSub_Name '$CONFLICTS') (/) ($ VSub_Number '$1')} ) ] ) left_token: <Left_Backtick '`'> spids: [846 854] ) } spids: [845] ) ] spids: [845] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$sum'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Number '$2'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Conflict ') ($ VSub_Number '$1') (' has wrong contents'))} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [887] ) ] spids: [887] ) ] spids: [16777215 875] ) ] spids: [16777215 891] ) ] spids: [829 842] ) ] spids: [16777215 894] ) ] spids: [789] ) spids: [785 788] ) (FuncDef name: noconflict body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-f)} {($ VSub_Name '$CONFLICTS') (/) ($ VSub_Number '$1')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('File ') ($ VSub_Number '$1') (' should not have a conflict'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FAILED) op: Equal rhs: {(yes)} spids: [934] ) ] spids: [934] ) ] spids: [16777215 922] ) ] spids: [16777215 938] ) ] spids: [906] ) spids: [902 905] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} { (CommandSubPart command_list: (CommandList children:[(C {(id)} {(-u)})]) left_token: <Left_Backtick '`'> spids: [947 951] ) } {(-ne)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('must be root'))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)}) ] spids: [16777215 960] ) ] spids: [16777215 974] ) (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 988] ) ] spids: [16777215 997] ) (C {(build_trees)}) (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: [1019] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct.out)} spids: [1027] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: { (DQ (' D /rmdir/file\n') (' D /tree/remove\n') (' D /rmdir\n') (' U /tree/modify\n') (' A /tree/add\n') ) } do_expansion: True here_end: EOF was_filled: T spids: [1032] ) ] ) (C {(echo)} {(DQ ('Differences for regular:'))}) (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:[1074])] spids: [1074] ) ] ) (C {(missing)} {(/tree/remove)}) (C {(file)} {(/tree/modify)} {(DQ (new))}) (C {(file)} {(/tree/add)} {(DQ (foo))}) (C {(missing)} {(/rmdir/file)}) (C {(missing)} {(/rmdir)}) (C {(build_trees)}) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-I)} {(SQ <'/tree/*'>)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test1.out)} spids: [1132] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct1.out)} spids: [1140] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ (' D /rmdir/file\n') (' D /rmdir\n'))} do_expansion: True here_end: EOF was_filled: T spids: [1145] ) ] ) (C {(echo)} {(DQ ("Differences for -I '/tree/*':"))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct1.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test1.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1184])] spids: [1184] ) ] ) (C {(file)} {(/tree/remove)} {(DQ (old))}) (C {(file)} {(/tree/modify)} {(DQ (old))}) (C {(missing)} {(/tree/add)}) (C {(missing)} {(/rmdir/file)}) (C {(missing)} {(/rmdir)}) (C {(build_trees)}) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-I)} {(SQ <'/tree/*'>)} {(-I)} {(SQ <'/rmdir*'>)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test2.out)} spids: [1248] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct2.out)} spids: [1258] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ )} do_expansion: True here_end: EOF was_filled: T spids: [1263] ) ] ) (C {(echo)} {(DQ ("Differences for -I '/tree/*' -I '/rmdir*':"))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct2.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test2.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1301])] spids: [1301] ) ] ) (C {(file)} {(/tree/remove)} {(DQ (old))}) (C {(file)} {(/tree/modify)} {(DQ (old))}) (C {(missing)} {(/tree/add)}) (C {(file)} {(/rmdir/file)} {(DQ (foo))}) (C {(build_trees)}) (SimpleCommand words: [ {($ VSub_Name '$COMMAND')} {(-r)} {(-I)} {(SQ <'/tree/* /rmdir/*'>)} {(-d)} {($ VSub_Name '$WORKDIR')} {(-D)} {($ VSub_Name '$TEST')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/test3.out)} spids: [1365] ) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {($ VSub_Name '$WORKDIR') (/correct3.out)} spids: [1375] ) (HereDoc op_id: Redir_DLess fd: 16777215 body: {(DQ ('Warnings:\n') (' Non-empty directory remains: /rmdir\n'))} do_expansion: True here_end: EOF was_filled: T spids: [1380] ) ] ) (C {(echo)} {(DQ ("Differences for -I '/tree/* /rmdir/*':"))}) (AndOr ops: [Op_DPipe] children: [ (C {(diff)} {(-u)} {(-L)} {(DQ (correct))} {($ VSub_Name '$WORKDIR') (/correct3.out)} {(-L)} {(DQ (test))} {($ VSub_Name '$WORKDIR') (/test3.out)} ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:FAILED) op:Equal rhs:{(yes)} spids:[1420])] spids: [1420] ) ] ) (C {(file)} {(/tree/remove)} {(DQ (old))}) (C {(file)} {(/tree/modify)} {(DQ (old))}) (C {(missing)} {(/tree/add)}) (C {(file)} {(/rmdir/file)} {(DQ (foo))}) (C {(dir)} {(/rmdir)}) (C {(Lit_Other '[')} {(DQ (${ VSub_Name FAILED))} {(Lit_Other '=')} {(no)} {(Lit_Other ']')}) ] )