(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<no>} spids: [89] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:WORKDIR) op: assign_op.Equal rhs: {<work>} spids: [92] ) ] ) (command.ShFunction name: usage body: (BraceGroup children: [ (C {<echo>} {(DQ <'Usage: tests.sh [-s script] [-w workdir]'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMAND) op: assign_op.Equal rhs: {<etcupdate>} spids: [120] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<getopts>} {(DQ <'s:w:'>)} {<option>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$option')} arms: [ (case_arm pat_list: [{<s>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMAND) op: assign_op.Equal rhs: {(DQ <'sh '> ($ Id.VSub_DollarName '$OPTARG'))} spids: [148] ) ] ) ] spids: [144 145 155 -1] ) (case_arm pat_list: [{<w>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:WORKDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$OPTARG')} spids: [162] ) ] ) ] spids: [158 159 166 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<echo>}) (C {<usage>})] spids: [169 170 179 -1] ) ] ) ] ) ) (C {<shift>} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: <Id.Lit_ArithVarLike OPTIND> right: {<Id.Lit_Digits 1>} ) ) } ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<usage>})] spids: [197 210] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONFLICTS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/conflicts'>} spids: [218] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OLD) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/old'>} spids: [222] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NEW) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/current'>} spids: [226] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$WORKDIR') <'/test'>} spids: [230] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:states) op: assign_op.Equal rhs: {(DQ <'equal first second difftype difflinks difffiles'>)} spids: [238] ) ] ) (command.ShFunction name: build_trees body: (BraceGroup children: [ (C {<local>} {<i>} {<j>} {<k>}) (C {<rm>} {<-rf>} {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')} {($ Id.VSub_DollarName '$CONFLICTS')} ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD') <'/etc'>} {($ Id.VSub_DollarName '$NEW') <'/etc'>} {($ Id.VSub_DollarName '$TEST') <'/etc'>} ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$states')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ForEach iter_name: j iter_words: [{($ Id.VSub_DollarName '$states')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ForEach iter_name: k iter_words: [{($ Id.VSub_DollarName '$states')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD') <'/'> ($ Id.VSub_DollarName '$i') <'/'> ($ Id.VSub_DollarName '$j') <'/'> ($ Id.VSub_DollarName '$k') } {($ Id.VSub_DollarName '$NEW') <'/'> ($ Id.VSub_DollarName '$i') <'/'> ($ Id.VSub_DollarName '$j') <'/'> ($ Id.VSub_DollarName '$k') } {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_DollarName '$i') <'/'> ($ Id.VSub_DollarName '$j') <'/'> ($ Id.VSub_DollarName '$k') } ) ] ) ) ] ) ) ] ) ) (command.ForEach iter_name: i iter_words: [ {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')} ] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/equal/equal/equal/fifo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/equal/equal/equal/file'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/equal/equal/equal/dir'>}) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$i') <'/equal/equal/equal/link'>} ) ] ) ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/equal/first/first/fifo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/equal/first/first/file'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/equal/first/first/dir'>}) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$i') <'/equal/first/first/link'>} ) ] ) ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/equal/difftype/difftype/fifo'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/equal/difftype/difftype/fromdir'>}) ] ) ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/equal/difftype/difftype/fifo'>} ) ] do_fork: T ) (C {<ln>} {<-s>} {(DQ <test>)} {($ Id.VSub_DollarName '$TEST') <'/equal/difftype/difftype/fromdir'>} ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<ln>} {<-s>} {(DQ <foo>)} {($ Id.VSub_DollarName '$i') <'/equal/difflinks/difflinks/link'>} ) ] ) ) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$TEST') <'/equal/difflinks/difflinks/link'>} ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/equal/difffiles/difffiles/file'>} ) ] do_fork: T ) ] ) ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/equal/difffiles/difffiles/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/first/equal/second/fifo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/first/equal/second/file'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/first/equal/second/emptydir'>}) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$i') <'/first/equal/second/link'>} ) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/first/equal/second/fulldir'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/first/equal/second/fulldir/file'>} ) ] do_fork: T ) ] ) ) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/first/first/equal/fifo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/first/first/equal/file'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$OLD') <'/first/first/equal/dir'>}) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$OLD') <'/first/first/equal/link'>}) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/first/difftype/second/fifo'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$TEST') <'/first/difftype/second/fifo'>}) (C {<ln>} {<-s>} {(DQ <'old link'>)} {($ Id.VSub_DollarName '$OLD') <'/first/difflinks/second/link'>} ) (C {<ln>} {<-s>} {(DQ <'test link'>)} {($ Id.VSub_DollarName '$TEST') <'/first/difflinks/second/link'>} ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/first/difffiles/second/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/first/difffiles/second/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/second/equal/first/file'>} ) ] do_fork: T ) (C {<mkfifo>} {($ Id.VSub_DollarName '$NEW') <'/second/equal/first/fifo'>}) (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$NEW') <'/second/equal/first/link'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/second/equal/first/emptydir'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/second/equal/first/fulldir'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/second/equal/first/fulldir/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/second/second/equal/fifo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/second/second/equal/file'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/second/second/equal/dir'>}) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$i') <'/second/second/equal/link'>} ) ] ) ) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/second/second/difftype/dir'>}) (C {<mkfifo>} {($ Id.VSub_DollarName '$TEST') <'/second/second/difftype/dir'>}) (C {<ln>} {<-s>} {(DQ <'new link'>)} {($ Id.VSub_DollarName '$NEW') <'/second/second/difflinks/link'>} ) (C {<ln>} {<-s>} {(DQ <'test link'>)} {($ Id.VSub_DollarName '$TEST') <'/second/second/difflinks/link'>} ) (command.Simple words: [{<echo>} {(DQ <new>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/second/second/difffiles/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <test>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/second/second/difffiles/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/difftype/equal/difftype/file'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/difftype/equal/difftype/fromdir'>}) (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$i') <'/difftype/equal/difftype/todir'>} ) ] ) ) (C {<ln>} {<-s>} {(DQ <test>)} {($ Id.VSub_DollarName '$NEW') <'/difftype/equal/difftype/file'>} ) (C {<mkfifo>} {($ Id.VSub_DollarName '$NEW') <'/difftype/equal/difftype/fromdir'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/difftype/equal/difftype/todir'>}) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/difftype/first/first/fifo'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/difftype/first/first/fifo'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/difftype/difftype/equal/fifo'>} ) ] do_fork: T ) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/difftype/difftype/equal/file'>}) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/difftype/difftype/equal/fifo'>}) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/difftype/difftype/equal/file'>} ) ] do_fork: T ) ] ) ) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/difftype/difftype/difftype/one'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/difftype/difftype/difftype/one'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/difftype/difftype/difftype/one'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$OLD') <'/difftype/difftype/difftype/two'>}) (command.Simple words: [{<echo>} {(DQ <baz>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difftype/difftype/difftype/two'>} ) ] do_fork: T ) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$TEST') <'/difftype/difftype/difftype/two'>} ) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/difftype/difftype/difflinks/link'>}) (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$NEW') <'/difftype/difftype/difflinks/link'>} ) (C {<ln>} {<-s>} {(DQ <test>)} {($ Id.VSub_DollarName '$TEST') <'/difftype/difftype/difflinks/link'>} ) (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$OLD') <'/difftype/difftype/difffiles/file'>} ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difftype/difftype/difffiles/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/difftype/difftype/difffiles/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$i') <'/difflinks/equal/difflinks/link'>} ) ] ) ) (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$NEW') <'/difflinks/equal/difflinks/link'>} ) (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$OLD') <'/difflinks/first/first/link'>}) (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$NEW') <'/difflinks/first/first/link'>}) (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$OLD') <'/difflinks/difftype/difftype/link'>} ) (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$NEW') <'/difflinks/difftype/difftype/link'>} ) (command.Simple words: [{<echo>} {(DQ <test>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/difflinks/difftype/difftype/link'>} ) ] do_fork: T ) (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$OLD') <'/difflinks/difflinks/equal/link'>} ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$i') <'/difflinks/difflinks/equal/link'>} ) ] ) ) (C {<ln>} {<-s>} {(DQ <old>)} {($ Id.VSub_DollarName '$OLD') <'/difflinks/difflinks/difflinks/link'>} ) (C {<ln>} {<-s>} {(DQ <new>)} {($ Id.VSub_DollarName '$NEW') <'/difflinks/difflinks/difflinks/link'>} ) (C {<ln>} {<-s>} {(DQ <test>)} {($ Id.VSub_DollarName '$TEST') <'/difflinks/difflinks/difflinks/link'>} ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/difffiles/equal/difffiles/file'>} ) ] do_fork: T ) ] ) ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difffiles/equal/difffiles/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/difffiles/first/first/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difffiles/first/first/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <old>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/difffiles/difftype/difftype/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <new>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difffiles/difftype/difftype/file'>} ) ] do_fork: T ) (C {<mkfifo>} {($ Id.VSub_DollarName '$TEST') <'/difffiles/difftype/difftype/file'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/difffiles/difffiles/equal/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/difffiles/difffiles/equal/file'>} ) ] do_fork: T ) ] ) ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/difffiles/difffiles/difffiles/simple'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2262 stdin_parts: [<'this is an old line\n'> <'\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difffiles/difffiles/difffiles/simple'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2277 stdin_parts: [<'this is a new line\n'> <'\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/difffiles/difffiles/difffiles/simple'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2293 stdin_parts: [<'this is an old line\n'> <'\n'> <'this is a local line\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/difffiles/difffiles/difffiles/conflict'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2307 stdin_parts: [<'this is an old file\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/difffiles/difffiles/difffiles/conflict'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2321 stdin_parts: [<'this is a new file\n'>] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/difffiles/difffiles/difffiles/conflict'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 2335 stdin_parts: [<'this is a test file\n'>] ) ) ] do_fork: T ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD') <'/adddir'>} {($ Id.VSub_DollarName '$NEW') <'/adddir'>} {($ Id.VSub_DollarName '$TEST') <'/adddir'>} ) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/adddir/conflict'>}) (C {<touch>} {($ Id.VSub_DollarName '$NEW') <'/adddir/conflict/newfile'>}) (C {<touch>} {($ Id.VSub_DollarName '$TEST') <'/adddir/conflict'>}) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [(C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/adddir/partial'>})] ) ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/adddir/partial/file'>} ) ] do_fork: T ) (C {<mkfifo>} {($ Id.VSub_DollarName '$TEST') <'/adddir/partial/fifo'>}) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD') <'/rmdir'>} {($ Id.VSub_DollarName '$NEW') <'/rmdir'>} {($ Id.VSub_DollarName '$TEST') <'/rmdir'>} ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [(C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/rmdir/extra'>})] ) ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/rmdir/extra/localfile.txt'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [(C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/rmdir/conflict'>})] ) ) (C {<mkfifo>} {($ Id.VSub_DollarName '$OLD') <'/rmdir/conflict/difftype'>}) (C {<mkdir>} {($ Id.VSub_DollarName '$TEST') <'/rmdir/conflict/difftype'>}) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$i') <'/rmdir/partial/subdir'>}) (C {<mkfifo>} {($ Id.VSub_DollarName '$i') <'/rmdir/partial/subdir/fifo'>}) ] ) ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/rmdir/partial/subdir/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [ {($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')} ] do_arg_iter: F body: (command.DoGroup children: [ (command.ForEach iter_name: j iter_words: [{<already>} {<old>} {<fromdir>} {<todir>}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$i') <'/dirchange/'> ($ Id.VSub_DollarName '$j')} ) ] ) ) ] ) ) (C {<mkdir>} {($ Id.VSub_DollarName '$OLD') <'/dirchange/already/fromdir'>}) (command.Simple words: [{<echo>} {(DQ <blah>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/dirchange/already/fromdir/somefile'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/dirchange/already/fromdir'>} ) ] do_fork: T ) ] ) ) (command.Simple words: [{<echo>} {(DQ <baz>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/dirchange/already/todir'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$NEW')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/dirchange/already/todir'>}) (command.Simple words: [{<echo>} {(DQ <blah>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/dirchange/already/todir/somefile'>} ) ] do_fork: T ) ] ) ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/dirchange/old/fromdir'>}) (command.Simple words: [{<echo>} {(DQ <blah>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/dirchange/old/fromdir/somefile'>} ) ] do_fork: T ) ] ) ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/dirchange/old/fromdir'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/dirchange/old/todir'>} ) ] do_fork: T ) ] ) ) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/dirchange/old/todir'>}) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/dirchange/old/todir/file'>} ) ] do_fork: T ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/dirchange/fromdir/extradir'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$i') <'/dirchange/fromdir/extradir/file'>} ) ] do_fork: T ) ] ) ) (C {<mkfifo>} {($ Id.VSub_DollarName '$TEST') <'/dirchange/fromdir/extradir/fifo'>}) (C {<ln>} {<-s>} {(DQ <bar>)} {($ Id.VSub_DollarName '$NEW') <'/dirchange/fromdir/extradir'>}) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$OLD')} {($ Id.VSub_DollarName '$TEST')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<mkdir>} {($ Id.VSub_DollarName '$i') <'/dirchange/fromdir/conflict'>}) ] ) ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/dirchange/fromdir/conflict/somefile'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/dirchange/fromdir/conflict/somefile'>} ) ] do_fork: T ) (C {<mkfifo>} {($ Id.VSub_DollarName '$NEW') <'/dirchange/fromdir/conflict'>}) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/dirchange/todir/difffile'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/dirchange/todir/difffile'>}) (command.Simple words: [{<echo>} {(DQ <baz>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/dirchange/todir/difffile/file'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <bar>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/dirchange/todir/difffile'>} ) ] do_fork: T ) (command.Simple words: [{<echo>} {(DQ <foo>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/dirchange/todir/difftype'>} ) ] do_fork: T ) (C {<mkdir>} {($ Id.VSub_DollarName '$NEW') <'/dirchange/todir/difftype'>}) (command.Simple words: [{<echo>} {(DQ <baz>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/dirchange/todir/difftype/file'>} ) ] do_fork: T ) (C {<mkfifo>} {($ Id.VSub_DollarName '$TEST') <'/dirchange/todir/difftype'>}) (command.Simple words: [{<echo>} {(DQ <'foo:*:16000:100::0:0:& user:/home/foo:/bin/tcsh'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/etc/master.passwd'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/etc/login.conf'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3191 stdin_parts: [ <'default:'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ) <'\n'> <'\t:passwd_format=md5:\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/etc/login.conf'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3211 stdin_parts: [ <'default:'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ) <'\n'> <'\t:passwd_format=md5:'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ) <'\n'> <'\t:copyright=/etc/COPYRIGHT\n'> ] ) ) ] do_fork: T ) (C {<cp>} {($ Id.VSub_DollarName '$OLD') <'/etc/login.conf'>} {($ Id.VSub_DollarName '$TEST') <'/etc/login.conf'>} ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$OLD') <'/etc/mail'>} {($ Id.VSub_DollarName '$NEW') <'/etc/mail'>} {($ Id.VSub_DollarName '$TEST') <'/etc/mail'>} ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/etc/mail/aliases'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3261 stdin_parts: [ <'# root: me@my.domain\n'> <'\n'> <'# Basic system aliases -- these MUST be present\n'> <'MAILER-DAEMON: postmaster\n'> <'postmaster: root\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/etc/mail/aliases'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3283 stdin_parts: [ <'# root: me@my.domain\n'> <'\n'> <'# Basic system aliases -- these MUST be present\n'> <'MAILER-DAEMON: postmaster\n'> <'postmaster: root\n'> <'\n'> <'# General redirections for pseudo accounts\n'> <'_dhcp: root\n'> <'_pflogd: root\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$TEST') <'/etc/mail/aliases'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3301 stdin_parts: [ <'root: someone@example.com\n'> <'\n'> <'# Basic system aliases -- these MUST be present\n'> <'MAILER-DAEMON: postmaster\n'> <'postmaster: root\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$OLD') <'/etc/services'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3326 stdin_parts: [ <'rtmp\t\t 1/ddp\t #Routing Table Maintenance Protocol\n'> <'tcpmux\t\t 1/tcp\t #TCP Port Service Multiplexer\n'> <'tcpmux\t\t 1/udp\t #TCP Port Service Multiplexer\n'> ] ) ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$NEW') <'/etc/services'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 3345 stdin_parts: [ <'rtmp\t\t 1/ddp\t #Routing Table Maintenance Protocol\n'> <'tcpmux\t\t 1/tcp\t #TCP Port Service Multiplexer\n'> <'tcpmux\t\t 1/udp\t #TCP Port Service Multiplexer\n'> <'nbp\t\t 2/ddp\t #Name Binding Protocol\n'> <'compressnet\t 2/tcp\t #Management Utility\n'> <'compressnet\t 2/udp\t #Management Utility\n'> ] ) ) ] do_fork: T ) (C {<cp>} {($ Id.VSub_DollarName '$OLD') <'/etc/services'>} {($ Id.VSub_DollarName '$TEST') <'/etc/services'>} ) (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/var/db'>}) ] ) ) (command.ShFunction name: missing body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-e>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<-o>} {<-L>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be missing'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3409] ) ] ) ] spids: [3376 3397] ) ] ) ] ) ) (command.ShFunction name: present body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-e>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<-o>} {<-L>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be present'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3463] ) ] ) ] spids: [3428 3451] ) ] ) ] ) ) (command.ShFunction name: fifo body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-p>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a FIFO'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3509] ) ] ) ] spids: [3482 3497] ) ] ) ] ) ) (command.ShFunction name: dir body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a directory'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3555] ) ] ) ] spids: [3528 3543] ) ] ) ] ) ) (command.ShFunction name: link body: (BraceGroup children: [ (C {<local>} {<val>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a link'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3610] ) ] ) ] spids: [3583 3598] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:val) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<readlink>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [3630] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$val'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} { (DQ <'Link '> ($ Id.VSub_Number '$1') <' should link to '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_Number '$2') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3675] ) ] ) ] spids: [3642 3660] ) ] ) ] spids: [3614 3627] ) ] ) ] ) ) (command.ShFunction name: file body: (BraceGroup children: [ (C {<local>} {<contents>} {<sum>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' should be a regular file'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3738] ) ] ) ] spids: [3711 3726] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<2>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:contents) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<cat>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [3758] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$contents'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' has wrong contents'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3800] ) ] ) ] spids: [3770 3788] ) ] ) ] spids: [3742 3755] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sum) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<md5>} {<-q>} {($ Id.VSub_DollarName '$TEST') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [3823] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$sum'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$3'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' has wrong contents'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3867] ) ] ) ] spids: [3837 3855] ) ] ) ] spids: [3807 3820] ) ] ) ] ) ) (command.ShFunction name: conflict body: (BraceGroup children: [ (C {<local>} {<sum>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$CONFLICTS') <'/'> ($ Id.VSub_Number '$1')} {<Id.Lit_RBracket ']'>} ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'File '> ($ Id.VSub_Number '$1') <' missing conflict'>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3925] ) ] ) ] spids: [3898 3913] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-gt>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sum) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<md5>} {<-q>} {($ Id.VSub_DollarName '$CONFLICTS') <'/'> ($ Id.VSub_Number '$1')} ) ) } spids: [3945] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$sum'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$2'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'Conflict '> ($ Id.VSub_Number '$1') <' has wrong contents'>)} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAILED) op: assign_op.Equal rhs: {<yes>} spids: [3989] ) ] ) ] spids: [3959 3977] ) ] ) ] spids: [3929 3942] ) ] ) ] ) ) (command.ShFunction name: check_trees body: (BraceGroup children: [ (C {<echo>} {(DQ <'Checking tree for correct results:'>)}) (C {<fifo>} {<'/equal/equal/equal/fifo'>}) (C {<file>} {<'/equal/equal/equal/file'>} {(DQ <foo>)}) (C {<dir>} {<'/equal/equal/equal/dir'>}) (C {<link>} {<'/equal/equal/equal/link'>} {(DQ <bar>)}) (C {<missing>} {<'/equal/first/first/fifo'>}) (C {<missing>} {<'/equal/first/first/file'>}) (C {<missing>} {<'/equal/first/first/dir'>}) (C {<missing>} {<'/equal/first/first/link'>}) (C {<file>} {<'/equal/difftype/difftype/fifo'>} {(DQ <bar>)}) (C {<link>} {<'/equal/difftype/difftype/fromdir'>} {(DQ <test>)}) (C {<link>} {<'/equal/difflinks/difflinks/link'>} {(DQ <bar>)}) (C {<file>} {<'/equal/difffiles/difffiles/file'>} {(DQ <bar>)}) (C {<missing>} {<'/first/equal/second/fifo'>}) (C {<missing>} {<'/first/equal/second/file'>}) (C {<missing>} {<'/first/equal/second/emptydir'>}) (C {<missing>} {<'/first/equal/second/link'>}) (C {<missing>} {<'/first/equal/second/fulldir'>}) (C {<missing>} {<'/first/first/equal/fifo'>}) (C {<missing>} {<'/first/first/equal/file'>}) (C {<missing>} {<'/first/first/equal/dir'>}) (C {<missing>} {<'/first/first/equal/link'>}) (C {<present>} {<'/first/difftype/second/fifo'>}) (C {<link>} {<'/first/difflinks/second/link'>} {(DQ <'test link'>)}) (C {<file>} {<'/first/difffiles/second/file'>} {(DQ <bar>)}) (C {<file>} {<'/second/equal/first/file'>} {(DQ <bar>)}) (C {<fifo>} {<'/second/equal/first/fifo'>}) (C {<link>} {<'/second/equal/first/link'>} {(DQ <new>)}) (C {<missing>} {<'/second/equal/first/emptydir'>}) (C {<file>} {<'/second/equal/first/fulldir/file'>} {(DQ <foo>)}) (C {<fifo>} {<'/second/second/equal/fifo'>}) (C {<file>} {<'/second/second/equal/file'>} {(DQ <foo>)}) (C {<dir>} {<'/second/second/equal/dir'>}) (C {<link>} {<'/second/second/equal/link'>} {(DQ <bar>)}) (C {<fifo>} {<'/second/second/difftype/dir'>}) (C {<link>} {<'/second/second/difflinks/link'>} {(DQ <'test link'>)}) (C {<file>} {<'/second/second/difffiles/file'>} {(DQ <test>)}) (C {<conflict>} {<'/second/second/difffiles/file'>} {<4f2ee8620a251fd53f06bb6112eb6ffa>}) (C {<link>} {<'/difftype/equal/difftype/file'>} {(DQ <test>)}) (C {<fifo>} {<'/difftype/equal/difftype/fromdir'>}) (C {<missing>} {<'/difftype/equal/difftype/todir'>}) (C {<missing>} {<'/difftype/first/first/fifo'>}) (C {<fifo>} {<'/difftype/difftype/equal/fifo'>}) (C {<file>} {<'/difftype/difftype/equal/file'>} {(DQ <bar>)}) (C {<file>} {<'/difftype/difftype/difftype/one'>} {(DQ <foo>)}) (C {<link>} {<'/difftype/difftype/difftype/two'>} {(DQ <bar>)}) (C {<link>} {<'/difftype/difftype/difflinks/link'>} {(DQ <test>)}) (C {<conflict>} {<'/difftype/difftype/difffiles/file'>} {<117f2bcd1f6491f6044e79e5a57a9229>}) (C {<link>} {<'/difflinks/equal/difflinks/link'>} {(DQ <new>)}) (C {<missing>} {<'/difflinks/first/first/link'>}) (C {<file>} {<'/difflinks/difftype/difftype/link'>} {(DQ <test>)}) (C {<link>} {<'/difflinks/difflinks/equal/link'>} {(DQ <new>)}) (C {<link>} {<'/difflinks/difflinks/difflinks/link'>} {(DQ <test>)}) (C {<file>} {<'/difffiles/equal/difffiles/file'>} {(DQ <bar>)}) (C {<missing>} {<'/difffiles/first/first/file'>}) (C {<fifo>} {<'/difffiles/difftype/difftype/file'>}) (C {<file>} {<'/difffiles/difffiles/equal/file'>} {(DQ <bar>)}) (C {<file>} {<'/difffiles/difffiles/difffiles/simple'>} {(DQ )} {<cabc7e5e80b0946d79edd555e9648486>} ) (C {<file>} {<'/difffiles/difffiles/difffiles/conflict'>} {(DQ <'this is a test file'>)}) (C {<conflict>} {<'/difffiles/difffiles/difffiles/conflict'>} {<8261cfdd89280c4a6c26e4ac86541fe9>} ) (C {<file>} {<'/adddir/conflict'>}) (C {<file>} {<'/adddir/partial/file'>} {(DQ <foo>)}) (C {<fifo>} {<'/adddir/partial/fifo'>}) (C {<dir>} {<'/rmdir/extra'>}) (C {<file>} {<'/rmdir/extra/localfile.txt'>} {(DQ <foo>)}) (C {<dir>} {<'/rmdir/conflict/difftype'>}) (C {<present>} {<'/rmdir/conflict'>}) (C {<missing>} {<'/rmdir/partial'>}) (C {<file>} {<'/dirchange/already/fromdir'>} {(DQ <bar>)}) (C {<file>} {<'/dirchange/already/todir/somefile'>} {(DQ <blah>)}) (C {<file>} {<'/dirchange/old/fromdir'>} {(DQ <bar>)}) (C {<file>} {<'/dirchange/old/todir/file'>} {(DQ <bar>)}) (C {<missing>} {<'/dirchange/fromdir/extradir/file'>}) (C {<fifo>} {<'/dirchange/fromdir/extradir/fifo'>}) (C {<file>} {<'/dirchange/fromdir/conflict/somefile'>} {(DQ <bar>)}) (C {<file>} {<'/dirchange/todir/difffile'>} {(DQ <bar>)}) (C {<fifo>} {<'/dirchange/todir/difftype'>}) (C {<file>} {<'/etc/master.passwd'>}) (C {<file>} {<'/etc/passwd'>}) (C {<file>} {<'/etc/pwd.db'>}) (C {<file>} {<'/etc/spwd.db'>}) (C {<file>} {<'/etc/login.conf'>} {(DQ )} {<7774a0f9a3a372c7c109c32fd31c4b6b>}) (C {<file>} {<'/etc/login.conf.db'>}) (C {<file>} {<'/etc/mail/aliases'>} {(DQ )} {<7d598f89ec040ab56af54011bdb83337>}) (C {<file>} {<'/etc/services'>} {(DQ )} {<37fb6a8d1273f3b78329d431f21d9c7d>}) (C {<file>} {<'/var/db/services.db'>}) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(command_sub left_token:<Id.Left_Backtick '`'> child:(C {<id>} {<-u>}))} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ <'must be root'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] spids: [4840 4859] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-r>} {<'/etc/etcupdate.conf'>} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(DQ <'WARNING: /etc/etcupdate.conf settings may break some tests.'>)})] spids: [4876 4887] ) ] ) (C {<build_trees>}) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-nr>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) ] do_fork: T ) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 5029 stdin_parts: [ <' D /dirchange/fromdir/extradir/file\n'> <' D /dirchange/old/fromdir/somefile\n'> <' D /first/equal/second/fifo\n'> <' D /first/equal/second/file\n'> <' D /first/equal/second/fulldir/file\n'> <' D /first/equal/second/link\n'> <' D /rmdir/partial/subdir/fifo\n'> <' D /rmdir/partial/subdir\n'> <' D /rmdir/partial\n'> <' D /first/equal/second/fulldir\n'> <' D /first/equal/second/emptydir\n'> <' C /difffiles/difffiles/difffiles/conflict\n'> <' M /difffiles/difffiles/difffiles/simple\n'> <' U /difffiles/equal/difffiles/file\n'> <' U /difflinks/equal/difflinks/link\n'> <' C /difftype/difftype/difffiles/file\n'> <' U /difftype/equal/difftype/file\n'> <' U /difftype/equal/difftype/fromdir\n'> <' D /difftype/equal/difftype/todir\n'> <' U /dirchange/old/fromdir\n'> <' U /dirchange/old/todir\n'> <' U /etc/login.conf\n'> <' M /etc/mail/aliases\n'> <' U /etc/services\n'> <' A /adddir/partial/file\n'> <' A /dirchange/old/todir/file\n'> <' A /etc/master.passwd\n'> <' A /second/equal/first/fifo\n'> <' A /second/equal/first/file\n'> <' A /second/equal/first/fulldir/file\n'> <' A /second/equal/first/link\n'> <' C /second/second/difffiles/file\n'> <'Warnings:\n'> <' Modified regular file remains: /dirchange/fromdir/conflict/somefile\n'> <' Modified regular file remains: /first/difffiles/second/file\n'> <' Modified symbolic link remains: /first/difflinks/second/link\n'> <' Modified directory remains: /first/difftype/second/fifo\n'> <' Modified directory remains: /rmdir/conflict/difftype\n'> <' Non-empty directory remains: /rmdir/extra\n'> <' Non-empty directory remains: /rmdir/conflict\n'> < ' Modified mismatch: /difffiles/difftype/difftype/file (regular file vs fifo file)\n' > <' Removed file changed: /difffiles/first/first/file\n'> <' Modified link changed: /difflinks/difflinks/difflinks/link ('> <Id.Right_DoubleQuote '"'> <old> <Id.Right_DoubleQuote '"'> <' became '> <Id.Right_DoubleQuote '"'> <new> <Id.Right_DoubleQuote '"'> <')\n'> < ' Modified mismatch: /difflinks/difftype/difftype/link (symbolic link vs regular file)\n' > <' Removed link changed: /difflinks/first/first/link ('> <Id.Right_DoubleQuote '"'> <old> <Id.Right_DoubleQuote '"'> <' became '> <Id.Right_DoubleQuote '"'> <new> <Id.Right_DoubleQuote '"'> <')\n'> <' New link conflict: /difftype/difftype/difflinks/link ('> <Id.Right_DoubleQuote '"'> <new> <Id.Right_DoubleQuote '"'> <' vs '> <Id.Right_DoubleQuote '"'> <test> <Id.Right_DoubleQuote '"'> <')\n'> < ' Modified regular file changed: /difftype/difftype/difftype/one (fifo file became directory)\n' > < ' Modified symbolic link changed: /difftype/difftype/difftype/two (directory became regular file)\n' > <' Remove mismatch: /difftype/first/first/fifo (fifo file became directory)\n'> < ' Modified directory changed: /dirchange/fromdir/conflict (directory became fifo file)\n' > < ' Modified directory changed: /dirchange/fromdir/extradir (directory became symbolic link)\n' > < ' Modified regular file changed: /dirchange/todir/difffile (regular file became directory)\n' > < ' Modified fifo file changed: /dirchange/todir/difftype (regular file became directory)\n' > <' New file mismatch: /adddir/conflict (directory vs regular file)\n'> <' Directory mismatch: '> ($ Id.VSub_DollarName '$TEST') <'/adddir/conflict (regular file)\n'> <' Directory mismatch: '> ($ Id.VSub_DollarName '$TEST') <'/dirchange/todir/difffile (regular file)\n'> <' Directory mismatch: '> ($ Id.VSub_DollarName '$TEST') <'/dirchange/todir/difftype (fifo file)\n'> <' New link conflict: /second/second/difflinks/link ('> <Id.Right_DoubleQuote '"'> <'new link'> <Id.Right_DoubleQuote '"'> <' vs '> <Id.Right_DoubleQuote '"'> <'test link'> <Id.Right_DoubleQuote '"'> <')\n'> <' New file mismatch: /second/second/difftype/dir (directory vs fifo file)\n'> < ' Needs update: /etc/mail/aliases.db (requires manual update via newaliases(1))\n' > ] ) ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for -n:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/testn.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:failed) op: assign_op.Equal rhs: {<YES>} spids: [5063] ) ] ) ] ) (command.Simple words: [ {($ Id.VSub_DollarName '$COMMAND')} {<-r>} {<-d>} {($ Id.VSub_DollarName '$WORKDIR')} {<-D>} {($ Id.VSub_DollarName '$TEST')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) ] do_fork: T ) (C {<echo>} {(DQ <'Differences for real:'>)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<diff>} {<-u>} {<-L>} {(DQ <correct>)} {($ Id.VSub_DollarName '$WORKDIR') <'/correct.out'>} {<-L>} {(DQ <test>)} {($ Id.VSub_DollarName '$WORKDIR') <'/test.out'>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:failed) op: assign_op.Equal rhs: {<YES>} spids: [5117] ) ] ) ] ) (C {<check_trees>}) (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name FAILED))} {<Id.Lit_Equals '='>} {<no>} {<Id.Lit_RBracket ']'>} ) ] )