(command.CommandList children: [ (command.ShFunction name_tok: <usage> name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'usage: etcupdate [-npBF] [-d workdir] [-r | -s source | -t tarball]\n'> <' [-A patterns] [-D destdir] [-I patterns] [-L logfile]\n'> <' [-M options]\n'> < ' etcupdate build [-B] [-d workdir] [-s source] [-L logfile] [-M options]\n' > <' <tarball>\n'> < ' etcupdate diff [-d workdir] [-D destdir] [-I patterns] [-L logfile]\n' > < ' etcupdate extract [-B] [-d workdir] [-s source | -t tarball] [-L logfile]\n' > <' [-M options]\n'> <' etcupdate resolve [-p] [-d workdir] [-D destdir] [-L logfile]\n'> <' etcupdate status [-d workdir] [-D destdir]\n'> ] ) ) ] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <log> name: log body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'>>>'>)} {(DQ ($ Id.VSub_At '@'))}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>})] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <panic> name: panic body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'PANIC:'>)} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<10>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <warn> name: warn body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' '>)}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WARNINGS)} ) ] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ ($ Id.VSub_At '@'))}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WARNINGS)} ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <rule> name: rule body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <jot> more_env: [] words: [{<jot>} {<-b>} {(DQ ($ Id.VSub_Number 1))} {<-s>} {(DQ )} {<67>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <file_type> name: file_type body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Pipeline children: [ (command.Simple blame_tok: <stat> more_env: [] words: [{<stat>} {<-f>} {(DQ <'%HT'>)} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <tr> more_env: [] words: [{<tr>} {(DQ <'[:upper:]'>)} {(DQ <'[:lower:]'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <exists> name: exists body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-e>} {($ Id.VSub_Number 1)} {<-o>} {<-L>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <ignore> name: ignore body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<pattern>} {<->}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [pattern] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName IGNORE_FILES)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_Number 1)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$pattern'> pattern: (pat.Words words:[{($ Id.VSub_DollarName pattern)}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_Number 1)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <'/.cshrc'> pattern: (pat.Words words:[{<'/.cshrc'>} {<'/.profile'>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {<-ef>} {(${ Id.VSub_Name DESTDIR) <'/root'> ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [517 537] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <always_install> name: always_install body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<pattern>} {<->}] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) (command.ForEach keyword: <Id.KW_For for> iter_names: [pattern] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName ALWAYS_INSTALL)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_Number 1)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$pattern'> pattern: (pat.Words words:[{($ Id.VSub_DollarName pattern)}]) middle: <Id.Right_CasePat _> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <build_tree> name: build_tree body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<destdir>} {<dir>} {<file>} {<make>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'make='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'make='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'make='> name:make) op: assign_op.Equal rhs: {(DQ <'make '> ($ Id.VSub_DollarName MAKE_OPTIONS) <' -DNO_FILEMON'>)} ) ] redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'Building tree at '> ($ Id.VSub_Number 1) <' with '> ($ Id.VSub_DollarName make)) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_Number 1) <'/usr/obj'>}] redirects: [ (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>}) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'destdir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'destdir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'destdir='> name:destdir) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <realpath> more_env: [] words: [{<realpath>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName PREWORLD_FILES)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <dirname> more_env: [] words: [{<dirname>} {<'/'> ($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <mkdir> more_env: [] words: [ {<mkdir>} {<-p>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName dir)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <cp> more_env: [] words: [ {<cp>} {<-p>} {($ Id.VSub_DollarName SRCDIR) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] spids: [735 748] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName nobuild))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.AndOr children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName SRCDIR)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.AndOr children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$make'> more_env: [] words: [ {($ Id.VSub_DollarName make)} {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)} {<distrib-dirs>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$make'> more_env: [ (EnvPair left: <Id.Lit_VarLike 'MAKEOBJDIRPREFIX='> name: MAKEOBJDIRPREFIX val: {($ Id.VSub_DollarName destdir) <'/usr/obj'>} ) ] words: [ {($ Id.VSub_DollarName make)} {<_obj>} {<Id.Lit_VarLike 'SUBDIR_OVERRIDE='> <etc>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$make'> more_env: [ (EnvPair left: <Id.Lit_VarLike 'MAKEOBJDIRPREFIX='> name: MAKEOBJDIRPREFIX val: {($ Id.VSub_DollarName destdir) <'/usr/obj'>} ) ] words: [ {($ Id.VSub_DollarName make)} {<everything>} {<Id.Lit_VarLike 'SUBDIR_OVERRIDE='> <etc>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$make'> more_env: [ (EnvPair left: <Id.Lit_VarLike 'MAKEOBJDIRPREFIX='> name: MAKEOBJDIRPREFIX val: {($ Id.VSub_DollarName destdir) <'/usr/obj'>} ) ] words: [ {($ Id.VSub_DollarName make)} {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)} {<distribution>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>] ) ] ) right: <Id.Right_Subshell _> redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) ] spids: [825 840] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.AndOr children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName SRCDIR)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.AndOr children: [ (command.Simple blame_tok: <Id.VSub_DollarName '$make'> more_env: [] words: [ {($ Id.VSub_DollarName make)} {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)} {<distrib-dirs>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.VSub_DollarName '$make'> more_env: [] words: [ {($ Id.VSub_DollarName make)} {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)} {<distribution>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) ] ) right: <Id.Right_Subshell _> redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.AndOr children: [ (command.Simple blame_tok: <chflags> more_env: [] words: [{<chflags>} {<-R>} {<noschg>} {($ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {($ Id.VSub_Number 1) <'/usr/obj'>}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <rm> more_env: [] words: [ {<rm>} {<-f>} {($ Id.VSub_Number 1) <'/etc/'> <Id.Lit_Star '*'> <.db>} {($ Id.VSub_Number 1) <'/etc/passwd'>} {($ Id.VSub_Number 1) <'/var/db/services.db'>} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {($ Id.VSub_Number 1)} {<-type>} {<f>} {<-size>} {<0>} {<-delete>}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.AndOr children: [ (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<-d>} {($ Id.VSub_Number 1)} {<-type>} {<d>} {<-empty>} {<-delete>}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ops: [<Id.Op_DPipe _>] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <extract_tree> name: extract_tree body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<files>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName tarball))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'files='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'files='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'files='> name:files) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'files='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'files='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'files='> name:files) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName PREWORLD_FILES))} ) ] redirects: [] ) ] spids: [1153 1166] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.AndOr children: [ (command.Simple blame_tok: <mkdir> more_env: [] words: [ {<mkdir>} {<-p>} {($ Id.VSub_DollarName NEWTREE)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <tar> more_env: [] words: [ {<tar>} {<xf>} {($ Id.VSub_DollarName tarball)} {<-C>} {($ Id.VSub_DollarName NEWTREE)} {($ Id.VSub_DollarName files)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) right: <Id.Right_Subshell _> redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Failed to extract new tree.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName NEWTREE)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1178 1213] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1134 1147] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <build_tree> more_env: [] words: [{<build_tree>} {($ Id.VSub_DollarName NEWTREE)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Failed to build new tree.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName NEWTREE)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1239 1248] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <remove_tree> name: remove_tree body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {($ Id.VSub_Number 1)}] redirects: [ (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>}) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-e>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <chflags> more_env: [] words: [{<chflags>} {<-R>} {<noschg>} {($ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-rf>} {($ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [1306 1317] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'COMPARE_EQUAL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMPARE_EQUAL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_EQUAL='> name:COMPARE_EQUAL) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'COMPARE_ONLYFIRST='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMPARE_ONLYFIRST='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_ONLYFIRST='> name:COMPARE_ONLYFIRST) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'COMPARE_ONLYSECOND='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMPARE_ONLYSECOND='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_ONLYSECOND='> name:COMPARE_ONLYSECOND) op: assign_op.Equal rhs: {<2>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'COMPARE_DIFFTYPE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMPARE_DIFFTYPE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_DIFFTYPE='> name:COMPARE_DIFFTYPE) op: assign_op.Equal rhs: {<3>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'COMPARE_DIFFLINKS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMPARE_DIFFLINKS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_DIFFLINKS='> name:COMPARE_DIFFLINKS) op: assign_op.Equal rhs: {<4>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'COMPARE_DIFFFILES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'COMPARE_DIFFFILES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_DIFFFILES='> name:COMPARE_DIFFFILES) op: assign_op.Equal rhs: {<5>} ) ] redirects: [] ) (command.ShFunction name_tok: <compare> name: compare body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<first>} {<second>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <exists> more_env: [] words: [{<exists>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <exists> more_env: [] words: [{<exists>} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_ONLYSECOND)} ) ] spids: [1458 1465] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1446 1455] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <exists> more_env: [] words: [{<exists>} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_ONLYFIRST)} ) ] spids: [1484 1493] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'first='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'first='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <stat> more_env: [] words: [{<stat>} {<-f>} {(DQ <'%Hp'>)} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'second='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'second='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <stat> more_env: [] words: [{<stat>} {<-f>} {(DQ <'%Hp'>)} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName first))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName second))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_DIFFTYPE)} ) ] spids: [1541 1559] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-L>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'first='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'first='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [{<readlink>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'second='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'second='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [{<readlink>} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName first))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName second))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)} ) ] spids: [1609 1626] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_DIFFLINKS)} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1575 1586] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <cmp> more_env: [] words: [ {<cmp>} {<-s>} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)} ) ] spids: [1667 1678] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_DIFFFILES)} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [1653 1664] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <fbsdid_only> name: fbsdid_only body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <diff> more_env: [] words: [ {<diff>} {<-qI>} {(SQ <'\\$FreeBSD.*\\$'>)} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <compare_fbsdid> name: compare_fbsdid body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<cmp>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <compare> more_env: [] words: [{<compare>} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cmp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cmp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmp='> name:cmp) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName FREEBSD_ID))} {<-a>} {(DQ ($ Id.VSub_DollarName cmp))} {<-eq>} {($ Id.VSub_DollarName COMPARE_DIFFFILES)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <fbsdid_only> more_env: [] words: [{<fbsdid_only>} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)} ) ] spids: [1806 1839] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName cmp)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <empty_dir> name: empty_dir body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<contents>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'contents='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'contents='> name:contents) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {<-A>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName contents))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <dir_subset> name: dir_subset body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<contents>} {<file>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_Number 1)} {<-a>} {<-d>} {($ Id.VSub_Number 2)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [1941 1960] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'contents='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'contents='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'contents='> name:contents) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <ls> more_env: [] words: [{<ls>} {<-A>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName contents)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <compare> more_env: [] words: [ {<compare>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [2004 2019] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <dir_subset> more_env: [] words: [ {<dir_subset>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file) } {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [2047 2062] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2031 2044] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <empty_destdir> name: empty_destdir body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <dir_subset> more_env: [] words: [ {<dir_subset>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [2115 2128] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <empty_dir> more_env: [] words: [{<empty_dir>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <diffnode> name: diffnode body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<first>} {<second>} {<file>} {<old>} {<new>} {<diffargs>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName FREEBSD_ID))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'diffargs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'diffargs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'diffargs='> name:diffargs) op: assign_op.Equal rhs: { (DQ <'-I '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'FreeBSD.*'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') ) } ) ] redirects: [] ) ] spids: [2211 2224] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'diffargs='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'diffargs='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'diffargs='> name:diffargs) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <compare_fbsdid> more_env: [] words: [ {<compare_fbsdid>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 3)} {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_Number 3)} ] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_QMark '?')}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_EQUAL'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_EQUAL)}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_ONLYFIRST'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYFIRST)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Removed: '> ($ Id.VSub_Number 3))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_ONLYSECOND'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYSECOND)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Added: '> ($ Id.VSub_Number 3))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'first='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'first='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 3)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'second='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'second='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_Number 3)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'Node changed from a '> ($ Id.VSub_DollarName first) <' to a '> ($ Id.VSub_DollarName second) <': '> ($ Id.VSub_Number 3) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'first='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'first='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'second='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'second='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Link changed: '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rule> more_env: [] words: [{<rule>} {(DQ <'='>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <-> ($ Id.VSub_DollarName first))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'+'> ($ Id.VSub_DollarName second))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Index: '> ($ Id.VSub_Number 3))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rule> more_env: [] words: [{<rule>} {(DQ <'='>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <diff> more_env: [] words: [ {<diff>} {<-u>} {($ Id.VSub_DollarName diffargs)} {<-L>} {(DQ ($ Id.VSub_Number 3) <' ('> ($ Id.VSub_Number 4) <')'>)} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 3)} {<-L>} {(DQ ($ Id.VSub_Number 3) <' ('> ($ Id.VSub_Number 5) <')'>)} {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_Number 3)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <post_update> name: post_update body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<args>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [2520 2533] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(${ Id.VSub_Name DESTDIR) <'/etc/localtime'>} {<-a>} {<Id.KW_Bang '!'>} {<-L>} {(${ Id.VSub_Name DESTDIR) <'/etc/localtime'>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(${ Id.VSub_Name DESTDIR) <'/var/db/zoneinfo'>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ (${ Id.VSub_Name DESTDIR))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'args='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'args='> name: args ) op: assign_op.Equal rhs: {(DQ <'-C '> (${ Id.VSub_Name DESTDIR))} ) ] redirects: [] ) ] spids: [2598 2613] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args) op: assign_op.Equal rhs: {(DQ )} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'tzsetup -r '> (${ Id.VSub_Name args))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <tzsetup> more_env: [] words: [{<tzsetup>} {<-r>} {(${ Id.VSub_Name args)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [2646 2659] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2581 2595] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} {(DQ <'Needs update: /etc/localtime (required'>)} {(DQ <'manual update via tzsetup(8))'>)} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2551 2578] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <install_dirs> name: install_dirs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<args>} {<dir>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <dirname> more_env: [] words: [{<dirname>} {($ Id.VSub_Number 3)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [2763 2777] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <exists> more_env: [] words: [{<exists>} {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<-a>} {(DQ ($ Id.VSub_Number 2))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName DESTDIR))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <compare> more_env: [] words: [ {<compare>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName dir) } {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName dir) } ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [2854 2867] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [2826 2851] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Directory mismatch: '> (${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir) <' ('> ($ Id.VSub_DollarName args) <')'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [2797 2807] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <install_dirs> more_env: [] words: [ {<install_dirs>} {($ Id.VSub_Number 1)} {(DQ ($ Id.VSub_Number 2))} {($ Id.VSub_DollarName dir)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [2926 2941] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'args='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'args='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <stat> more_env: [] words: [ {<stat>} {<-f>} {(DQ <'-o %Su -g %Sg -m %0Mp%0Lp'>)} {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName dir)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'install -d '> ($ Id.VSub_DollarName args) <' '> (${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <install> more_env: [] words: [ {<install>} {<-d>} {($ Id.VSub_DollarName args)} {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [2993 3006] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <post_install_file> name: post_install_file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_Number 1)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <'/etc/mail/aliases'> pattern: (pat.Words words:[{<'/etc/mail/aliases'>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName DESTDIR))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <newaliases>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <newaliases> more_env: [] words: [{<newaliases>}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3094 3107] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [3071 3084] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'NEWALIAS_WARN='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEWALIAS_WARN='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'NEWALIAS_WARN='> name: NEWALIAS_WARN ) op: assign_op.Equal rhs: {<yes>} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/etc/login.conf'> pattern: (pat.Words words:[{<'/etc/login.conf'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} {(DQ <'cap_mkdb '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cap_mkdb> more_env: [] words: [{<cap_mkdb>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3150 3163] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/etc/master.passwd'> pattern: (pat.Words words:[{<'/etc/master.passwd'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'pwd_mkdb -p -d '> ($ Id.VSub_DollarName DESTDIR) <'/etc '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <pwd_mkdb> more_env: [] words: [ {<pwd_mkdb>} {<-p>} {<-d>} {($ Id.VSub_DollarName DESTDIR) <'/etc'>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3203 3216] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/etc/motd'> pattern: (pat.Words words:[{<'/etc/motd'>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName DESTDIR))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'sh /etc/rc.d/motd start'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <sh> more_env: [] words: [{<sh>} {<'/etc/rc.d/motd'>} {<start>}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3287 3300] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [3264 3277] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <'/etc/services'> pattern: (pat.Words words:[{<'/etc/services'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'services_mkdb -q -o '> ($ Id.VSub_DollarName DESTDIR) <'/var/db/services.db'> ) } {(DQ (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <services_mkdb> more_env: [] words: [ {<services_mkdb>} {<-q>} {<-o>} {($ Id.VSub_DollarName DESTDIR) <'/var/db/services.db'>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3347 3360] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <install_new> name: install_new body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <install_dirs> more_env: [] words: [ {<install_dirs>} {($ Id.VSub_DollarName NEWTREE)} {(DQ ($ Id.VSub_DollarName DESTDIR))} {($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [3417 3432] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'cp -Rp '> (${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1) <' '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cp> more_env: [] words: [ {<cp>} {<-Rp>} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3459 3472] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <post_install_file> more_env: [] words: [{<post_install_file>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <install_resolved> name: install_resolved body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <install_dirs> more_env: [] words: [ {<install_dirs>} {($ Id.VSub_DollarName NEWTREE)} {(DQ ($ Id.VSub_DollarName DESTDIR))} {($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [3543 3558] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'cp -Rp '> (${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1) <' '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <cp> more_env: [] words: [ {<cp>} {<-Rp>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>}) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.Simple blame_tok: <post_install_file> more_env: [] words: [{<post_install_file>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <new_conflict> name: new_conflict body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [3639 3652] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <install_dirs> more_env: [] words: [ {<install_dirs>} {($ Id.VSub_DollarName NEWTREE)} {($ Id.VSub_DollarName CONFLICTS)} {($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <diff> more_env: [] words: [ {<diff>} {<--changed-group-format> <Id.Lit_Equals '='> (SQ <'<<<<<<< (local)\n'> <'%<=======\n'> <'%>>>>>>>> (stock)\n'>) } {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName CONFLICTS) <'/'> ($ Id.VSub_Number 1)} ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <remove_old> name: remove_old body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'rm -f '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3725 3738] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' D '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <update_unmodified> name: update_unmodified body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<new>} {<old>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <empty_destdir> more_env: [] words: [{<empty_destdir>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} {(DQ <'rmdir '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rmdir> more_env: [] words: [ {<rmdir>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3851 3864] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [3830 3837] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [3814 3827] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-f>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {<-a>} {<-f>} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'rm -f '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [3947 3960] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [3908 3933] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_Number 1)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <empty_dir> more_env: [] words: [ {<empty_dir>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' D '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) ] spids: [4018 4027] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' U '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [4002 4015] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <install_new> more_env: [] words: [{<install_new>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' U '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) ] spids: [4052 4059] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <update_freebsdid> name: update_freebsdid body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<new>} {<dest>} {<file>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-c>} {(SQ <'$FreeBSD.*$'>)} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-c>} {(SQ <'$FreeBSD.*$'>)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName dest))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [4175 4190] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName dest))} {<-ne>} {<1>} {<-o>} {(DQ ($ Id.VSub_DollarName dest))} {<-ne>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})] spids: [4201 4226] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {(SQ <'$FreeBSD.*$'>)} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {(SQ <'$FreeBSD.*$'>)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName new))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName dest))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [4288 4305] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <mktemp> more_env: [] words: [{<mktemp>} {($ Id.VSub_DollarName WORKDIR) <'/etcupdate-XXXXXXX'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} {(SQ <'/\\$FreeBSD.*\\$/ { exit } { print }'>)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName file)} ) ] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} {(SQ <'/\\$FreeBSD.*\\$/ { print }'>)} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName file)} ) ] do_fork: T ) (command.Simple blame_tok: <awk> more_env: [] words: [ {<awk>} {(SQ <'/\\$FreeBSD.*\\$/ { ok = 1; next } { if (ok) print }'>)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName file)} ) ] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <fbsdid_only> more_env: [] words: [ {<fbsdid_only>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [4411 4425] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'cp '> ($ Id.VSub_DollarName file) <' '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cp> more_env: [] words: [ {<cp>} {($ Id.VSub_DollarName file)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [4457 4470] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <post_install_file> more_env: [] words: [{<post_install_file>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' M '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <merge_file> name: merge_file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<res>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <diff3> more_env: [] words: [ {<diff3>} {<-E>} {<-m>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<3>}) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'res='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'res='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName res)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'diff3 -E -m '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) <' '> (${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1) <' '> (${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'temp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'temp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'temp='> name:temp) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <mktemp> more_env: [] words: [{<mktemp>} {<-t>} {<etcupdate>}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <diff3> more_env: [] words: [ {<diff3>} {<-E>} {<-m>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name temp)} ) ] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(${ Id.VSub_Name temp)}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} ) ] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {(${ Id.VSub_Name temp)}] redirects: [] do_fork: T ) ] spids: [4627 4640] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <post_install_file> more_env: [] words: [{<post_install_file>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' M '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <1> pattern: (pat.Words words:[{<1>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <install_dirs> more_env: [] words: [ {<install_dirs>} {($ Id.VSub_DollarName NEWTREE)} {($ Id.VSub_DollarName CONFLICTS)} {($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'diff3 -m -A '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) <' '> (${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1) ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <diff3> more_env: [] words: [ {<diff3>} {<-m>} {<-A>} {<-L>} {(DQ <yours>)} {<-L>} {(DQ <original>)} {<-L>} {(DQ <new>)} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)} ) ] do_fork: T ) ] spids: [4739 4752] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' C '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'merge failed with status '> ($ Id.VSub_DollarName res))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <has_conflicts> name: has_conflicts body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <egrep> more_env: [] words: [ {<egrep>} {<-q>} {(SQ <'^(<{7}|\\|{7}|={7}|>{7}) '>)} {($ Id.VSub_DollarName CONFLICTS) <'/'> ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <resolve_conflict> name: resolve_conflict body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<command>} {<junk>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Resolving conflict in \''> ($ Id.VSub_Number 1) <'\':'>)}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'edit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'edit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'edit='> name:edit) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <true> more_env: [] words: [{<true>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <'Select: (p) postpone, (df) diff-full, (e) edit,'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <has_conflicts> more_env: [] words: [{<has_conflicts>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' (r) resolved,'>)}] redirects: [] do_fork: T ) ] spids: [4974 4983] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<-n>} {(DQ <' (h) help for more options: '>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<command>}] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName command)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <df> pattern: (pat.Words words:[{<df>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <diff> more_env: [] words: [ {<diff>} {<-u>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <e> pattern: (pat.Words words:[{<e>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <Id.VSub_DollarName '$EDITOR'> more_env: [] words: [ {($ Id.VSub_DollarName EDITOR)} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <h> pattern: (pat.Words words:[{<h>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <' (p) postpone - ignore this conflict for now\n'> < ' (df) diff-full - show all changes made to merged file\n' > <' (e) edit - change merged file in an editor\n'> <' (r) resolved - accept merged version of file\n'> < ' (mf) mine-full - accept local version of entire file (ignore new changes)\n' > < ' (tf) theirs-full - accept new version of entire file (lose local changes)\n' > <' (h) help - show this list\n'> ] ) ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <mf> pattern: (pat.Words words:[{<mf>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <p> pattern: (pat.Words words:[{<p>}]) middle: <Id.Right_CasePat _> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] right: <Id.Op_DSemi _> ) (CaseArm left: <r> pattern: (pat.Words words:[{<r>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <has_conflicts> more_env: [] words: [{<has_conflicts>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'File \''> ($ Id.VSub_Number 1) <'\' still has conflicts,'> ) } {(DQ <'are you sure? (y/n) '>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<junk>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName junk))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <y>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] spids: [5163 5181] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [5133 5140] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <install_resolved> more_env: [] words: [{<install_resolved>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [ {<panic>} {(DQ <'Unable to install merged'>)} {(DQ <'version of '> ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) ] spids: [5194 5203] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <tf> pattern: (pat.Words words:[{<tf>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <install_new> more_env: [] words: [{<install_new>} {($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [ {<panic>} {(DQ <'Unable to install new'>)} {(DQ <'version of '> ($ Id.VSub_Number 1))} ] redirects: [] do_fork: T ) ] spids: [5253 5262] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Invalid command.'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <handle_removed_file> name: handle_removed_file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<dest>} {<file>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <ignore> more_env: [] words: [{<ignore>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'IGNORE: removed file '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [5373 5380] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <compare_fbsdid> more_env: [] words: [ {<compare_fbsdid>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_QMark '?')}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_EQUAL'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_EQUAL)}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <remove_old> more_env: [] words: [{<remove_old>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] spids: [5420 5435] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_ONLYFIRST'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYFIRST)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'Removed file now missing'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_ONLYSECOND'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYSECOND)}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'> pattern: (pat.Words words: [ {($ Id.VSub_DollarName COMPARE_DIFFTYPE)} {($ Id.VSub_DollarName COMPARE_DIFFLINKS)} {($ Id.VSub_DollarName COMPARE_DIFFFILES)} ] ) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Modified '> ($ Id.VSub_DollarName dest) <' remains: '> ($ Id.VSub_DollarName file) ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <handle_removed_directory> name: handle_removed_directory body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<dir>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <ignore> more_env: [] words: [{<ignore>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'IGNORE: removed dir '> ($ Id.VSub_DollarName dir))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [5541 5548] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName dir)} {<-a>} {<-d>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName dir)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <empty_destdir> more_env: [] words: [{<empty_destdir>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} {(DQ <'rmdir '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_DollarName dir))} ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rmdir> more_env: [] words: [ {<rmdir>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_DollarName dir)} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [5611 5624] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' D '> ($ Id.VSub_DollarName dir))}] redirects: [] do_fork: T ) ] spids: [5590 5597] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} {(DQ <'Non-empty directory remains: '> ($ Id.VSub_DollarName dir))} ] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [5566 5587] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <handle_modified_file> name: handle_modified_file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<cmp>} {<dest>} {<file>} {<new>} {<newdestcmp>} {<old>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <ignore> more_env: [] words: [{<ignore>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'IGNORE: modified file '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [5725 5732] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <compare> more_env: [] words: [ {<compare>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cmp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cmp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmp='> name:cmp) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName cmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_EQUAL)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [5765 5778] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName cmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_ONLYFIRST)} {<-o>} {($ Id.VSub_DollarName cmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_ONLYSECOND)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'Changed file now missing'>)}] redirects: [] do_fork: T ) ] spids: [5788 5809] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <compare> more_env: [] words: [ {<compare>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'newdestcmp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'newdestcmp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'newdestcmp='> name:newdestcmp) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName newdestcmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_EQUAL)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [5838 5851] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName FREEBSD_ID))} {<-a>} {($ Id.VSub_DollarName newdestcmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_DIFFFILES)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <fbsdid_only> more_env: [] words: [ {<fbsdid_only>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <update_unmodified> more_env: [] words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [5911 5918] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'Updating FreeBSD ID string failed'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [5873 5908] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <compare_fbsdid> more_env: [] words: [ {<compare_fbsdid>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <update_unmodified> more_env: [] words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [5969 5976] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [5953 5966] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName newdestcmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_ONLYFIRST)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <always_install> more_env: [] words: [{<always_install>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'ALWAYS: adding '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <install_new> more_env: [] words: [ {<install_new>} {($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <' A '> ($ Id.VSub_DollarName file))} ] redirects: [] do_fork: T ) ] spids: [6053 6060] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6035 6050] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] spids: [6017 6024] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName FREEBSD_ID))} {<-a>} {($ Id.VSub_DollarName cmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_DIFFFILES)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <fbsdid_only> more_env: [] words: [ {<fbsdid_only>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file) } {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [6096 6131] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'old='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'old='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Remove mismatch: '> ($ Id.VSub_DollarName file) <' ('> ($ Id.VSub_DollarName old) <' became '> ($ Id.VSub_DollarName new) <')'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'old='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'old='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Removed link changed: '> ($ Id.VSub_DollarName file) <' ('> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName old) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' became '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ($ Id.VSub_DollarName new) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <')'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} {(DQ <'Removed file changed: '> ($ Id.VSub_DollarName file))} ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [5993 6006] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <always_install> more_env: [] words: [{<always_install>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'ALWAYS: updating '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <update_unmodified> more_env: [] words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [6301 6308] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6283 6290] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName FREEBSD_ID))} {<-a>} {($ Id.VSub_DollarName cmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_DIFFFILES)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <fbsdid_only> more_env: [] words: [ {<fbsdid_only>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <update_freebsdid> more_env: [] words: [{<update_freebsdid>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Continue continue>)] spids: [6371 6378] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6333 6368] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName cmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_DIFFTYPE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName newdestcmp)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'New link conflict: '> ($ Id.VSub_DollarName file) <' ('> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName new) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' vs '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName dest) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <')'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <new_conflict> more_env: [] words: [{<new_conflict>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' C '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [6407 6420] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName newdestcmp)} {<-eq>} {($ Id.VSub_DollarName COMPARE_DIFFTYPE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Modified mismatch: '> ($ Id.VSub_DollarName file) <' ('> ($ Id.VSub_DollarName new) <' vs '> ($ Id.VSub_DollarName dest) <')'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] spids: [6524 6537] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'old='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'old='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Modified '> ($ Id.VSub_DollarName dest) <' changed: '> ($ Id.VSub_DollarName file) <' ('> ($ Id.VSub_DollarName old) <' became '> ($ Id.VSub_DollarName new) <')'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'old='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'old='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'Modified link changed: '> ($ Id.VSub_DollarName file) <' ('> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName old) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' became '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ($ Id.VSub_DollarName new) (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) <')'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <merge_file> more_env: [] words: [{<merge_file>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <handle_added_file> name: handle_added_file body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<cmp>} {<dest>} {<file>} {<new>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'file='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'file='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <ignore> more_env: [] words: [{<ignore>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'IGNORE: added file '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] spids: [6763 6770] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <compare> more_env: [] words: [ {<compare>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'cmp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cmp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmp='> name:cmp) op: assign_op.Equal rhs: {($ Id.VSub_QMark '?')} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_EQUAL'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_EQUAL)}]) middle: <Id.Right_CasePat _> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_ONLYFIRST'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYFIRST)}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'Added file now missing'>)}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_ONLYSECOND'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYSECOND)}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <install_new> more_env: [] words: [{<install_new>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' A '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) ] spids: [6868 6875] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6850 6865] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <always_install> more_env: [] words: [{<always_install>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'ALWAYS: updating '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <update_unmodified> more_env: [] words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [6937 6944] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [6919 6926] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <file_type> more_env: [] words: [ {<file_type>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'New file mismatch: '> ($ Id.VSub_DollarName file) <' ('> ($ Id.VSub_DollarName new) <' vs '> ($ Id.VSub_DollarName dest) <')'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'new='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dest='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dest='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <readlink> more_env: [] words: [ {<readlink>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} { (DQ <'New link conflict: '> ($ Id.VSub_DollarName file) <' ('> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName new) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' vs '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ch: '"' ) ($ Id.VSub_DollarName dest) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <')'> ) } ] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'> pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName FREEBSD_ID))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <fbsdid_only> more_env: [] words: [ {<fbsdid_only>} {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file) } {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <update_unmodified> more_env: [] words: [ {<update_unmodified>} {($ Id.VSub_DollarName file)} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ControlFlow keyword: <Id.ControlFlow_Return return> ) ] spids: [7106 7113] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'Updating FreeBSD ID string failed'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7076 7103] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <new_conflict> more_env: [] words: [{<new_conflict>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' C '> ($ Id.VSub_DollarName file))}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <build_cmd> name: build_cmd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<dir>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<1>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Missing required tarball.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [7179 7192] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'build command: '> ($ Id.VSub_Number 1))}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <mktemp> more_env: [] words: [ {<mktemp>} {<-d>} {($ Id.VSub_DollarName WORKDIR) <'/etcupdate-XXXXXXX'>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unable to create temporary directory.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [7238 7251] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <build_tree> more_env: [] words: [{<build_tree>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Failed to build tree.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [7269 7278] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <tar> more_env: [] words: [ {<tar>} {<cfj>} {($ Id.VSub_Number 1)} {<-C>} {($ Id.VSub_DollarName dir)} {<.>} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Failed to create tarball.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [7301 7324] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <diff_cmd> name: diff_cmd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<file>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [7376 7389] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Reference tree to diff against unavailable.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [7403 7416] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName NEWTREE)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<.>}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <ignore> more_env: [] words: [{<ignore>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Continue continue>)] spids: [7480 7487] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <diffnode> more_env: [] words: [ {<diffnode>} {($ Id.VSub_DollarName NEWTREE)} {(DQ ($ Id.VSub_DollarName DESTDIR))} {($ Id.VSub_DollarName file)} {(DQ <stock>)} {(DQ <local>)} ] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <extract_cmd> name: extract_cmd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [7550 7563] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'extract command: tarball='> ($ Id.VSub_DollarName tarball))}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName NEWTREE)}] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unable to remove current tree.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [7596 7605] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [7582 7593] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <extract_tree> more_env: [] words: [{<extract_tree>}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <resolve_cmd> name: resolve_cmd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<conflicts>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [7648 7661] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName CONFLICTS)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)] spids: [7671 7684] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'The current tree is not present to resolve conflicts.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [7694 7707] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'conflicts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'conflicts='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conflicts='> name:conflicts) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName CONFLICTS)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<.>} {<Id.KW_Bang '!'>} {<-type>} {<d>}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName conflicts)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <resolve_conflict> more_env: [] words: [{<resolve_conflict>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName NEWALIAS_WARN))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} {(DQ <'Needs update: /etc/mail/aliases.db'>)} {(DQ <'(requires manual update via newaliases(1))'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Warnings:'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <' Needs update: /etc/mail/aliases.db'>)} {(DQ <'(requires manual update via newaliases(1))'>)} ] redirects: [] do_fork: T ) ] spids: [7782 7795] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <status_cmd> name: status_cmd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [7856 7869] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName CONFLICTS)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName CONFLICTS)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<.>} {<Id.KW_Bang '!'>} {<-type>} {<d>}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/^\\./ C /'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) ] spids: [7879 7890] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-s>} {($ Id.VSub_DollarName WARNINGS)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Warnings:'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName WARNINGS)}] redirects: [] do_fork: T ) ] spids: [7924 7935] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <update_cmd> name: update_cmd body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<dir>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [7977 7990] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <log> more_env: [] words: [ {<log>} { (DQ <'update command: rerun='> ($ Id.VSub_DollarName rerun) <' tarball='> ($ Id.VSub_DollarName tarball) <' preworld='> ($ Id.VSub_DollarName preworld) ) } ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <id> more_env: [] words: [{<id>} {<-u>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Must be root to update a tree.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8013 8032] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <umask> more_env: [] words: [{<umask>} {<022>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-e>} {($ Id.VSub_DollarName CONFLICTS)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <find> more_env: [] words: [ {<find>} {<-d>} {($ Id.VSub_DollarName CONFLICTS)} {<-type>} {<d>} {<-empty>} {<-delete>} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) (command.Simple blame_tok: <rmdir> more_env: [] words: [{<rmdir>} {($ Id.VSub_DollarName CONFLICTS)}] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] spids: [8074 8085] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName CONFLICTS)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Conflicts remain from previous update, aborting.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8123 8134] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName rerun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <mktemp> more_env: [] words: [ {<mktemp>} {<-d>} {($ Id.VSub_DollarName WORKDIR) <'/etcupdate-XXXXXXX'>} ] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '?')} {<-ne>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unable to create temporary directory.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8210 8223] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OLDTREE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OLDTREE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'OLDTREE='> name: OLDTREE ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName NEWTREE)} ) ] redirects: [] ) ] spids: [8250 8263] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEWTREE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEWTREE='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'NEWTREE='> name: NEWTREE ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName dir)} ) ] redirects: [] ) ] spids: [8181 8194] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <remove_tree> more_env: [] words: [ {<remove_tree>} {($ Id.VSub_DollarName NEWTREE)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unable to remove pre-world tree.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8302 8311] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [8286 8299] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName NEWTREE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <remove_tree> more_env: [] words: [ {<remove_tree>} {($ Id.VSub_DollarName OLDTREE)} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unable to remove old tree.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8352 8361] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <mv> more_env: [] words: [ {<mv>} {($ Id.VSub_DollarName NEWTREE)} {($ Id.VSub_DollarName OLDTREE)} ] redirects: [ (Redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<3>} ) (Redir op: <Id.Redir_GreatAnd '2>&'> loc: (redir_loc.Fd fd:2) arg: {<1>} ) ] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Unable to rename current stock tree.'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8384 8401] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [8334 8345] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName OLDTREE)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ < 'No previous tree to compare against, a sane comparison is not possible.\n' > ] ) ) ] do_fork: T ) (command.Simple blame_tok: <log> more_env: [] words: [{<log>} {(DQ <'No previous tree to compare against.'>)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dir))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <rmdir> more_env: [] words: [{<rmdir>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) ] spids: [8455 8468] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [8423 8436] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <extract_tree> more_env: [] words: [{<extract_tree>}] redirects: [] do_fork: T ) ] spids: [8153 8166] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName OLDTREE)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<.>}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sort> more_env: [] words: [{<sort>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WORKDIR) <'/old.files'>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) (command.Pipeline children: [ (command.Subshell left: <Id.Op_LParen _> child: (command.CommandList children: [ (command.Sentence child: (command.Simple blame_tok: <cd> more_env: [] words: [{<cd>} {($ Id.VSub_DollarName NEWTREE)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <find> more_env: [] words: [{<find>} {<.>}] redirects: [] do_fork: T ) ] ) right: <Id.Right_Subshell _> redirects: [] ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sort> more_env: [] words: [{<sort>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WORKDIR) <'/new.files'>} ) ] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) (command.Simple blame_tok: <comm> more_env: [] words: [ {<comm>} {<-23>} {($ Id.VSub_DollarName WORKDIR) <'/old.files'>} {($ Id.VSub_DollarName WORKDIR) <'/new.files'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>} ) ] do_fork: T ) (command.Simple blame_tok: <comm> more_env: [] words: [ {<comm>} {<-13>} {($ Id.VSub_DollarName WORKDIR) <'/old.files'>} {($ Id.VSub_DollarName WORKDIR) <'/new.files'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WORKDIR) <'/added.files'>} ) ] do_fork: T ) (command.Simple blame_tok: <comm> more_env: [] words: [ {<comm>} {<-12>} {($ Id.VSub_DollarName WORKDIR) <'/old.files'>} {($ Id.VSub_DollarName WORKDIR) <'/new.files'>} ] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WORKDIR) <'/both.files'>} ) ] do_fork: T ) (command.Simple blame_tok: <rm> more_env: [] words: [{<rm>} {<-f>} {($ Id.VSub_DollarName WARNINGS)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName CONFLICTS)}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <Id.Redir_Great '>'> more_env: [] words: [] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>} ) ] do_fork: F ) ] spids: [8646 8659] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <handle_removed_file> more_env: [] words: [{<handle_removed_file>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <sort> more_env: [] words: [{<sort>} {<-r>} {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <handle_removed_directory> more_env: [] words: [{<handle_removed_directory>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName WORKDIR) <'/both.files'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <handle_modified_file> more_env: [] words: [{<handle_modified_file>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [file] iterable: (for_iter.Words words: [ { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName WORKDIR) <'/added.files'>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ] ) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <handle_added_file> more_env: [] words: [{<handle_added_file>} {($ Id.VSub_DollarName file)}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName NEWALIAS_WARN))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <warn> more_env: [] words: [ {<warn>} {(DQ <'Needs update: /etc/mail/aliases.db'>)} {(DQ <'(requires manual update via newaliases(1))'>)} ] redirects: [] do_fork: T ) ] spids: [8844 8857] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <post_update> more_env: [] words: [{<post_update>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-s>} {($ Id.VSub_DollarName WARNINGS)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Warnings:'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {($ Id.VSub_DollarName WARNINGS)}] redirects: [] do_fork: T ) ] spids: [8885 8896] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dir))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName dryrun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName rerun))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <panic> more_env: [] words: [{<panic>} {(DQ <'Should not have a temporary directory'>)}] redirects: [] do_fork: T ) ] spids: [8931 8952] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <remove_tree> more_env: [] words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}] redirects: [] do_fork: T ) ] spids: [8915 8928] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'command='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'command='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command) op: assign_op.Equal rhs: {(DQ <update>)} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <build> pattern: (pat.Words words:[{<build>} {<diff>} {<extract>} {<status>} {<resolve>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'command='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'command='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 1))} ) ] redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <-> pattern: (pat.Words words:[{<-> <Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] spids: [8991 9004] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'SRCDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SRCDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SRCDIR='> name:SRCDIR) op: assign_op.Equal rhs: {<'/usr/src'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'DESTDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DESTDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DESTDIR='> name:DESTDIR) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FREEBSD_ID='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FREEBSD_ID='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FREEBSD_ID='> name:FREEBSD_ID) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ALWAYS_INSTALL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ALWAYS_INSTALL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ALWAYS_INSTALL='> name:ALWAYS_INSTALL) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'IGNORE_FILES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IGNORE_FILES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IGNORE_FILES='> name:IGNORE_FILES) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'MAKE_OPTIONS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'MAKE_OPTIONS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'MAKE_OPTIONS='> name:MAKE_OPTIONS) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-r>} {<'/etc/etcupdate.conf'>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <.> more_env: [] words: [{<.>} {<'/etc/etcupdate.conf'>}] redirects: [] do_fork: T ) ] spids: [9148 9159] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'tarball='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tarball='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tarball='> name:tarball) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'rerun='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rerun='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rerun='> name:rerun) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'always='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'always='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'always='> name:always) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'dryrun='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dryrun='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dryrun='> name:dryrun) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'ignore='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ignore='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ignore='> name:ignore) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'nobuild='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'nobuild='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nobuild='> name:nobuild) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'preworld='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'preworld='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'preworld='> name:preworld) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <getopts> more_env: [] words: [{<getopts>} {(DQ <'d:nprs:t:A:BD:FI:L:M:'>)} {<option>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName option))}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <d> pattern: (pat.Words words:[{<d>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'WORKDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WORKDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WORKDIR='> name:WORKDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <n> pattern: (pat.Words words:[{<n>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'dryrun='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'dryrun='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dryrun='> name:dryrun) op: assign_op.Equal rhs: {<YES>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <p> pattern: (pat.Words words:[{<p>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'preworld='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'preworld='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'preworld='> name:preworld) op: assign_op.Equal rhs: {<YES>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <r> pattern: (pat.Words words:[{<r>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'rerun='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rerun='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rerun='> name:rerun) op: assign_op.Equal rhs: {<YES>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <s> pattern: (pat.Words words:[{<s>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'SRCDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'SRCDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SRCDIR='> name:SRCDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <t> pattern: (pat.Words words:[{<t>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'tarball='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tarball='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tarball='> name:tarball) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <A> pattern: (pat.Words words:[{<A>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'always='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'always='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'always='> name:always) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName always) <' '> ($ Id.VSub_DollarName OPTARG))} ) ] redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <B> pattern: (pat.Words words:[{<B>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'nobuild='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'nobuild='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nobuild='> name:nobuild) op: assign_op.Equal rhs: {<YES>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <D> pattern: (pat.Words words:[{<D>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'DESTDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DESTDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DESTDIR='> name:DESTDIR) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <F> pattern: (pat.Words words:[{<F>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'FREEBSD_ID='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FREEBSD_ID='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FREEBSD_ID='> name:FREEBSD_ID) op: assign_op.Equal rhs: {<YES>} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <I> pattern: (pat.Words words:[{<I>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'ignore='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ignore='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ignore='> name:ignore) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ignore) <' '> ($ Id.VSub_DollarName OPTARG))} ) ] redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <L> pattern: (pat.Words words:[{<L>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'LOGFILE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LOGFILE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LOGFILE='> name:LOGFILE) op: assign_op.Equal rhs: {($ Id.VSub_DollarName OPTARG)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <M> pattern: (pat.Words words:[{<M>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'MAKE_OPTIONS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'MAKE_OPTIONS='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'MAKE_OPTIONS='> name: MAKE_OPTIONS ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName OPTARG))} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <shift> more_env: [] words: [ {<shift>} { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: ($ Id.Lit_ArithVarLike OPTIND) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-o>} {<noglob>}] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName always))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'ALWAYS_INSTALL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'ALWAYS_INSTALL='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ALWAYS_INSTALL='> name:ALWAYS_INSTALL) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName always))} ) ] redirects: [] ) ] spids: [9481 9494] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName ignore))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'IGNORE_FILES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IGNORE_FILES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IGNORE_FILES='> name:IGNORE_FILES) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName ignore))} ) ] redirects: [] ) ] spids: [9511 9524] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'WORKDIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WORKDIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WORKDIR='> name:WORKDIR) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name WORKDIR> var_name: WORKDIR suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName DESTDIR) <Id.Lit_Slash '/'> <var> <Id.Lit_Slash '/'> <db> <Id.Lit_Slash '/'> <etcupdate> } ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LOGFILE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LOGFILE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LOGFILE='> name:LOGFILE) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name LOGFILE> var_name: LOGFILE suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {($ Id.VSub_DollarName WORKDIR) <Id.Lit_Slash '/'> <log>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'OLDTREE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OLDTREE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OLDTREE='> name:OLDTREE) op: assign_op.Equal rhs: {($ Id.VSub_DollarName WORKDIR) <'/old'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEWTREE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEWTREE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEWTREE='> name:NEWTREE) op: assign_op.Equal rhs: {($ Id.VSub_DollarName WORKDIR) <'/current'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CONFLICTS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CONFLICTS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CONFLICTS='> name:CONFLICTS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName WORKDIR) <'/conflicts'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'WARNINGS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'WARNINGS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WARNINGS='> name:WARNINGS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName WORKDIR) <'/warnings'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'EDITOR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'EDITOR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EDITOR='> name:EDITOR) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name EDITOR> var_name: EDITOR suffix_op: (suffix_op.Unary op: <Id.VTest_ColonHyphen _> arg_word: {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <bin> <Id.Lit_Slash '/'> <vi>} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'PREWORLD_FILES='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'PREWORLD_FILES='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PREWORLD_FILES='> name:PREWORLD_FILES) op: assign_op.Equal rhs: {(DQ <'etc/master.passwd etc/group'>)} ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName command)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <update> pattern: (pat.Words words:[{<update>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName rerun))} {<-a>} {<-n>} {(DQ ($ Id.VSub_DollarName tarball))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Only one of -r or -t can be specified.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [9655 9676] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName rerun))} {<-a>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Only one of -p or -r can be specified.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [9695 9716] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <build> pattern: (pat.Words words:[{<build>} {<diff>} {<status>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName rerun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName tarball))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [9746 9785] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <resolve> pattern: (pat.Words words:[{<resolve>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName rerun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName tarball))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [9801 9830] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <extract> pattern: (pat.Words words:[{<extract>}]) middle: <Id.Right_CasePat _> action: [ (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName dryrun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName rerun))} {<-o>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) ] spids: [9846 9875] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName preworld))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'OLDTREE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'OLDTREE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OLDTREE='> name:OLDTREE) op: assign_op.Equal rhs: {($ Id.VSub_DollarName NEWTREE)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'NEWTREE='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'NEWTREE='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEWTREE='> name:NEWTREE) op: assign_op.Equal rhs: {($ Id.VSub_DollarName WORKDIR) <'/preworld'>} ) ] redirects: [] ) ] spids: [9901 9914] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName WORKDIR)}] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'Failed to create work directory '> ($ Id.VSub_DollarName WORKDIR))} ] redirects: [] do_fork: T ) ] spids: [9934 9948] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName command)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <diff> pattern: (pat.Words words:[{<diff>} {<resolve>} {<status>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <exec> more_env: [] words: [{<exec>}] redirects: [ (Redir op: <Id.Redir_DGreat '3>>'> loc: (redir_loc.Fd fd:3) arg: {($ Id.VSub_DollarName LOGFILE)} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Simple blame_tok: <exec> more_env: [] words: [{<exec>}] redirects: [ (Redir op: <Id.Redir_Great '3>'> loc: (redir_loc.Fd fd:3) arg: {($ Id.VSub_DollarName LOGFILE)} ) ] do_fork: T ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Simple blame_tok: <Id.Left_DollarBrace '${'> more_env: [] words: [{(${ Id.VSub_Name command) <_cmd>} {(DQ ($ Id.VSub_At '@'))}] redirects: [] do_fork: T ) ] )