(command.CommandList children: [ (command.ShFunction name: usage body: (command.BraceGroup children: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:104) fd: -1 here_begin: {(EOF)} here_end_span_id: 148 stdin_parts: [ ('usage: ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:108) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (' [options] command ... [path]\n') ('\n') ('Options:\n') (' -b basedir -- Operate on a system mounted at basedir\n') (' (default: /)\n') (' -d workdir -- Store working files in workdir\n') (' (default: /var/db/freebsd-update/)\n') (' -f conffile -- Read configuration options from conffile\n') (' (default: /etc/freebsd-update.conf)\n') (' -F -- Force a fetch operation to proceed\n') (' -k KEY -- Trust an RSA key with SHA256 hash of KEY\n') (' -r release -- Target for upgrade (e.g., 11.1-RELEASE)\n') (' -s server -- Server from which to fetch updates\n') (' (default: update.FreeBSD.org)\n') (' -t address -- Mail output of cron command, if any, to address\n') (' (default: root)\n') (' --not-running-from-cron\n') (' -- Run without a tty, for use by automated tools\n') (' --currently-running release\n') (' -- Update as if currently running this release\n') ('Commands:\n') (' fetch -- Fetch updates from server\n') (' cron -- Sleep rand(3600) seconds, fetch updates, and send an\n') (' email if updates were found\n') ( ' upgrade -- Fetch upgrades to FreeBSD version specified via -r option\n' ) (' install -- Install downloaded updates or upgrades\n') (' rollback -- Uninstall most recently installed updates\n') (' IDS -- Compare the system against an index of ') (Id.Right_DoubleQuote '"') ('known good') (Id.Right_DoubleQuote '"') (' files.\n') ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:150) arg_word: {(0)} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONFIGOPTIONS) op: assign_op.Equal rhs: { (DQ ('KEYPRINT WORKDIR SERVERNAME MAILTO ALLOWADD ALLOWDELETE\n') (' KEEPMODIFIEDMETADATA COMPONENTS IGNOREPATHS UPDATEIFUNMODIFIED\n') (' BASEDIR VERBOSELEVEL TARGETRELEASE STRICTCOMPONENTS MERGECHANGES\n') (' IDSIGNOREPATHS BACKUPKERNEL BACKUPKERNELDIR BACKUPKERNELSYMBOLFILES') ) } spids: [225] ) ] ) (command.ShFunction name: nullconfig body: (command.BraceGroup children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name CONFIGOPTIONS)}] do_arg_iter: F body: (command.DoGroup children: [(C {(eval)} {(${ Id.VSub_Name X) (Id.Lit_Equals '=') (DQ )})] ) ) ] ) ) (command.ShFunction name: saveconfig body: (command.BraceGroup children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name CONFIGOPTIONS)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(eval)} {(${ Id.VSub_Name X) (Id.Lit_VarLike '_saved=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:305) ) (${ Id.VSub_Name X) } ) ] ) ) ] ) ) (command.ShFunction name: mergeconfig body: (command.BraceGroup children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name CONFIGOPTIONS)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(eval)} {(Id.Lit_VarLike '_=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:344) ) (${ Id.VSub_Name X) (_saved) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name _))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:366) ) ] action: [ (C {(eval)} {(${ Id.VSub_Name X) (Id.Lit_Equals '=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:377) ) (${ Id.VSub_Name X) (_saved) } ) ] spids: [351 368] ) ] ) ] ) ) ] ) ) (command.ShFunction name: config_KeyPrint body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name KEYPRINT)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:414) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KEYPRINT) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [419] ) ] ) ] spids: [403 416] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:426) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_WorkDir body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name WORKDIR)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:458) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:WORKDIR) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [463] ) ] ) ] spids: [447 460] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:470) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_ServerName body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name SERVERNAME)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:502) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SERVERNAME) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [507] ) ] ) ] spids: [491 504] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:514) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_MailTo body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name MAILTO)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:546) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MAILTO) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [551] ) ] ) ] spids: [535 548] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:558) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_AllowAdd body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name ALLOWADD)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:593) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ALLOWADD) op: assign_op.Equal rhs: {(yes)} spids: [617] ) ] ) ] spids: [605 614 621 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ALLOWADD) op: assign_op.Equal rhs: {(no)} spids: [633] ) ] ) ] spids: [624 630 637 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:644) arg_word: {(1)} ) ] spids: [640 641 649 -1] ) ] ) ] spids: [582 595] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:658) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_AllowDelete body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name ALLOWDELETE)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:690) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ALLOWDELETE) op: assign_op.Equal rhs: {(yes)} spids: [714] ) ] ) ] spids: [702 711 718 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ALLOWDELETE) op: assign_op.Equal rhs: {(no)} spids: [730] ) ] ) ] spids: [721 727 734 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:741) arg_word: {(1)} ) ] spids: [737 738 746 -1] ) ] ) ] spids: [679 692] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:755) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_KeepModifiedMetadata body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name KEEPMODIFIEDMETADATA)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:793) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KEEPMODIFIEDMETADATA) op: assign_op.Equal rhs: {(yes)} spids: [817] ) ] ) ] spids: [805 814 821 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KEEPMODIFIEDMETADATA) op: assign_op.Equal rhs: {(no)} spids: [833] ) ] ) ] spids: [824 830 837 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:844) arg_word: {(1)} ) ] spids: [840 841 849 -1] ) ] ) ] spids: [782 795] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:858) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_Components body: (command.BraceGroup children: [ (command.ForEach iter_name: C iter_words: [{($ Id.VSub_At '$@')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$C'))} {(Id.Lit_Equals '=')} {(DQ (src))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:906) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-e)} {(/usr/src/COPYRIGHT)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:920) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENTS) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name COMPONENTS) (' ') (${ Id.VSub_Name C) ) } spids: [925] ) ] ) ] spids: [911 922] ) ] else_action: [(C {(echo)} {(DQ ('src component not installed, skipped'))})] ) ] spids: [891 908] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENTS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name COMPONENTS) (' ') (${ Id.VSub_Name C))} spids: [953] ) ] ) ] ) ] ) ) ] ) ) (command.ShFunction name: config_IgnorePaths body: (command.BraceGroup children: [ (command.ForEach iter_name: C iter_words: [{($ Id.VSub_At '$@')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IGNOREPATHS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name IGNOREPATHS) (' ') (${ Id.VSub_Name C))} spids: [996] ) ] ) ] ) ) ] ) ) (command.ShFunction name: config_IDSIgnorePaths body: (command.BraceGroup children: [ (command.ForEach iter_name: C iter_words: [{($ Id.VSub_At '$@')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IDSIGNOREPATHS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name IDSIGNOREPATHS) (' ') (${ Id.VSub_Name C))} spids: [1036] ) ] ) ] ) ) ] ) ) (command.ShFunction name: config_UpdateIfUnmodified body: (command.BraceGroup children: [ (command.ForEach iter_name: C iter_words: [{($ Id.VSub_At '$@')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UPDATEIFUNMODIFIED) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name UPDATEIFUNMODIFIED) (' ') (${ Id.VSub_Name C))} spids: [1079] ) ] ) ] ) ) ] ) ) (command.ShFunction name: config_MergeChanges body: (command.BraceGroup children: [ (command.ForEach iter_name: C iter_words: [{($ Id.VSub_At '$@')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MERGECHANGES) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name MERGECHANGES) (' ') (${ Id.VSub_Name C))} spids: [1122] ) ] ) ] ) ) ] ) ) (command.ShFunction name: config_BaseDir body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BASEDIR)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1161) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BASEDIR) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1166] ) ] ) ] spids: [1150 1163] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1173) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_StrictComponents body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name STRICTCOMPONENTS)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1211) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STRICTCOMPONENTS) op: assign_op.Equal rhs: {(yes)} spids: [1235] ) ] ) ] spids: [1223 1232 1239 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STRICTCOMPONENTS) op: assign_op.Equal rhs: {(no)} spids: [1251] ) ] ) ] spids: [1242 1248 1255 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1262) arg_word: {(1)} ) ] spids: [1258 1259 1267 -1] ) ] ) ] spids: [1200 1213] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1276) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_TargetRelease body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name TARGETRELEASE)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1308) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TARGETRELEASE) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1313] ) ] ) ] spids: [1297 1310] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1320) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name TARGETRELEASE)}) (C {(grep)} {(-qE)} {(SQ (Token id:Id.Lit_Chars val:'^[0-9.]+$' span_id:1343))} ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:1345) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TARGETRELEASE) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name TARGETRELEASE) (-RELEASE))} spids: [1350] ) ] ) ] spids: [1328 1347] ) ] ) ] ) ) (command.ShFunction name: config_VerboseLevel body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name VERBOSELEVEL)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1386) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Dd) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Bb) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Uu) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Gg) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERBOSELEVEL) op: assign_op.Equal rhs: {(debug)} spids: [1416] ) ] ) ] spids: [1398 1413 1420 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Aa) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERBOSELEVEL) op: assign_op.Equal rhs: {(nostats)} spids: [1447] ) ] ) ] spids: [1423 1444 1451 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Aa) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Tt) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERBOSELEVEL) op: assign_op.Equal rhs: {(stats)} spids: [1472] ) ] ) ] spids: [1454 1469 1476 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1483) arg_word: {(1)} ) ] spids: [1479 1480 1488 -1] ) ] ) ] spids: [1375 1388] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1497) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_BackupKernel body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BACKUPKERNEL)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1526) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNEL) op: assign_op.Equal rhs: {(yes)} spids: [1550] ) ] ) ] spids: [1538 1547 1554 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNEL) op: assign_op.Equal rhs: {(no)} spids: [1566] ) ] ) ] spids: [1557 1563 1570 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1577) arg_word: {(1)} ) ] spids: [1573 1574 1582 -1] ) ] ) ] spids: [1515 1528] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1591) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_BackupKernelDir body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BACKUPKERNELDIR)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1620) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1636) ) ] action: [ (C {(echo)} {(DQ ('BackupKernelDir set to empty dir'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1648) arg_word: {(1)} ) ] spids: [1625 1638] ) ] ) (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(/)} {(/bin)} {(/boot)} {(/etc)} {(/lib)} {(/libexec)} {(/sbin)} {(/usr)} {(/var)} ] action: [ (C {(echo)} {(DQ ('BackupKernelDir set to invalid path ') ($ Id.VSub_Number '$1'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1704) arg_word: {(1)} ) ] spids: [1676 1693 1709 -1] ) (case_arm pat_list: [{(/) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNELDIR) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1717] ) ] ) ] spids: [1712 1714 1721 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(echo)} { (DQ ('BackupKernelDir (') ($ Id.VSub_Number '$1') (') is not an absolute path') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1737) arg_word: {(1)} ) ] spids: [1724 1725 1742 -1] ) ] ) ] spids: [1609 1622] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1751) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: config_BackupKernelSymbolFiles body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(${ Id.VSub_Name BACKUPKERNELSYMBOLFILES)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1780) ) ] action: [ (command.Case to_match: {($ Id.VSub_Number '$1')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNELSYMBOLFILES) op: assign_op.Equal rhs: {(yes)} spids: [1804] ) ] ) ] spids: [1792 1801 1808 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNELSYMBOLFILES) op: assign_op.Equal rhs: {(no)} spids: [1820] ) ] ) ] spids: [1811 1817 1824 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1831) arg_word: {(1)} ) ] spids: [1827 1828 1836 -1] ) ] ) ] spids: [1769 1782] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1845) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: configline body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1877) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1882) ) ] spids: [1866 1879] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPT) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [1889] ) ] ) (C {(shift)}) (C {(config_) (${ Id.VSub_Name OPT)} {($ Id.VSub_At '$@')}) ] ) ) (command.ShFunction name: init_params body: (command.BraceGroup children: [ (C {(nullconfig)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONFFILE) op: assign_op.Equal rhs: {(DQ )} spids: [1936] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMANDS) op: assign_op.Equal rhs: {(DQ )} spids: [1946] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FORCEFETCH) op: assign_op.Equal rhs: {(0)} spids: [1956] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NOTTYOK) op: assign_op.Equal rhs: {(0)} spids: [1965] ) ] ) ] ) ) (command.ShFunction name: parse_cmdline body: (command.BraceGroup children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:1982) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1993) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(-f)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2026) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2031) ) ] spids: [2015 2028] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2051) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2056) ) ] spids: [2036 2053] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2062) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONFFILE) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2064] ) ] ) ] spids: [2011 2012 2070 -1] ) (case_arm pat_list: [{(-F)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FORCEFETCH) op: assign_op.Equal rhs: {(1)} spids: [2077] ) ] ) ] spids: [2073 2074 2081 -1] ) (case_arm pat_list: [{(--not-running-from-cron)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NOTTYOK) op: assign_op.Equal rhs: {(1)} spids: [2088] ) ] ) ] spids: [2084 2085 2092 -1] ) (case_arm pat_list: [{(--currently-running)}] action: [ (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2100) ) (C {(export)} {(Id.Lit_VarLike 'UNAME_r=') (DQ ($ Id.VSub_Number '$1'))}) ] spids: [2095 2096 2110 -1] ) (case_arm pat_list: [{(-b)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2133) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2138) ) ] spids: [2122 2135] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2141) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {(config_BaseDir)} {($ Id.VSub_Number '$1')}) (C {(usage)})] ) ] spids: [2118 2119 2155 -1] ) (case_arm pat_list: [{(-d)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2173) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2178) ) ] spids: [2162 2175] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2181) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {(config_WorkDir)} {($ Id.VSub_Number '$1')}) (C {(usage)})] ) ] spids: [2158 2159 2195 -1] ) (case_arm pat_list: [{(-k)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2213) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2218) ) ] spids: [2202 2215] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2221) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {(config_KeyPrint)} {($ Id.VSub_Number '$1')}) (C {(usage)})] ) ] spids: [2198 2199 2235 -1] ) (case_arm pat_list: [{(-s)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2253) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2258) ) ] spids: [2242 2255] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2261) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(config_ServerName)} {($ Id.VSub_Number '$1')}) (C {(usage)}) ] ) ] spids: [2238 2239 2275 -1] ) (case_arm pat_list: [{(-r)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2293) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2298) ) ] spids: [2282 2295] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2301) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(config_TargetRelease)} {($ Id.VSub_Number '$1')}) (C {(usage)}) ] ) ] spids: [2278 2279 2315 -1] ) (case_arm pat_list: [{(-t)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2333) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2338) ) ] spids: [2322 2335] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2341) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [(C {(config_MailTo)} {($ Id.VSub_Number '$1')}) (C {(usage)})] ) ] spids: [2318 2319 2355 -1] ) (case_arm pat_list: [{(-v)}] action: [ (command.Sentence child: (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2373) ) ] action: [ (command.Sentence child: (C {(usage)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2378) ) ] spids: [2362 2375] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2381) ) (C {(shift)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(config_VerboseLevel)} {($ Id.VSub_Number '$1')}) (C {(usage)}) ] ) ] spids: [2358 2359 2395 -1] ) (case_arm pat_list: [{(--debug)}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [(C {(config_VerboseLevel)} {(debug)}) (C {(usage)})] ) ] spids: [2403 2404 2416 -1] ) (case_arm pat_list: [{(--no-stats)}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [(C {(config_VerboseLevel)} {(nostats)}) (C {(usage)})] ) ] spids: [2419 2420 2432 -1] ) (case_arm pat_list: [{(cron)} {(fetch)} {(upgrade)} {(install)} {(rollback)} {(IDS)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMANDS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name COMMANDS) (' ') ($ Id.VSub_Number '$1'))} spids: [2464] ) ] ) ] spids: [2440 2461 2474 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [(C {(usage)})] spids: [2482 2483 2489 -1] ) ] ) (C {(shift)}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name COMMANDS))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2519) ) ] action: [(C {(usage)})] spids: [2506 2521] ) ] ) ] ) ) (command.ShFunction name: parse_conffile body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-r)} {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2582) ) ] action: [ (C {(echo)} {(-n)} {(DQ ('File does not exist '))}) (C {(echo)} {(-n)} {(DQ ('or is not readable: '))}) (C {(echo)} {(${ Id.VSub_Name CONFFILE)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2612) arg_word: {(1)} ) ] spids: [2551 2584] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2646) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CONFFILE) op: assign_op.Equal rhs: {(DQ (/etc/freebsd-update.conf))} spids: [2651] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-r)} {(DQ (${ Id.VSub_Name CONFFILE))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2672) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2677) ) ] spids: [2657 2674] ) ] ) ] spids: [2633 2648] ) ] ) (C {(saveconfig)}) (C {(nullconfig)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:L) op: assign_op.Equal rhs: {(0)} spids: [2710] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:2714) cond: [ (command.Sentence child: (C {(read)} {(LINE)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2719) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:L) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$L')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [2724] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LINEX) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2736) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name LINE))}) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'#' span_id:2758))} ) ] negated: F ) ] ) ) } spids: [2735] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(configline)} {(${ Id.VSub_Name LINEX)})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:2772) ) ] action: [ (C {(echo)} { (DQ ('Error processing configuration file, line ') ($ Id.VSub_DollarName '$L') (':') ) } ) (C {(echo)} {(DQ ('==> ') (${ Id.VSub_Name LINE))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:2796) arg_word: {(1)} ) ] spids: [2763 2774] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:2806) fd: -1 arg_word: {(${ Id.VSub_Name CONFFILE)} ) ] ) (C {(mergeconfig)}) ] ) ) (command.ShFunction name: default_params body: (command.BraceGroup children: [ (C {(saveconfig)}) (C {(nullconfig)}) (C {(config_WorkDir)} {(/var/db/freebsd-update)}) (C {(config_MailTo)} {(root)}) (C {(config_AllowAdd)} {(yes)}) (C {(config_AllowDelete)} {(yes)}) (C {(config_KeepModifiedMetadata)} {(yes)}) (C {(config_BaseDir)} {(/)}) (C {(config_VerboseLevel)} {(stats)}) (C {(config_StrictComponents)} {(no)}) (C {(config_BackupKernel)} {(yes)}) (C {(config_BackupKernelDir)} {(/boot/kernel.old)}) (C {(config_BackupKernelSymbolFiles)} {(no)}) (C {(mergeconfig)}) ] ) ) (command.ShFunction name: fetch_setup_verboselevel body: (command.BraceGroup children: [ (command.Case to_match: {(${ Id.VSub_Name VERBOSELEVEL)} arms: [ (case_arm pat_list: [{(debug)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUIETREDIR) op: assign_op.Equal rhs: {(DQ (/dev/stderr))} spids: [2942] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUIETFLAG) op: assign_op.Equal rhs: {(DQ (' '))} spids: [2948] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STATSREDIR) op: assign_op.Equal rhs: {(DQ (/dev/stderr))} spids: [2954] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DDSTATS) op: assign_op.Equal rhs: {(DQ (..))} spids: [2960] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:XARGST) op: assign_op.Equal rhs: {(DQ (-t))} spids: [2966] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NDEBUG) op: assign_op.Equal rhs: {(DQ (' '))} spids: [2972] ) ] ) ] spids: [2938 2939 2978 -1] ) (case_arm pat_list: [{(nostats)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUIETREDIR) op: assign_op.Equal rhs: {(DQ )} spids: [2985] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUIETFLAG) op: assign_op.Equal rhs: {(DQ )} spids: [2990] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STATSREDIR) op: assign_op.Equal rhs: {(DQ (/dev/null))} spids: [2995] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DDSTATS) op: assign_op.Equal rhs: {(DQ (..))} spids: [3001] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:XARGST) op: assign_op.Equal rhs: {(DQ )} spids: [3007] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NDEBUG) op: assign_op.Equal rhs: {(DQ )} spids: [3012] ) ] ) ] spids: [2981 2982 3017 -1] ) (case_arm pat_list: [{(stats)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUIETREDIR) op: assign_op.Equal rhs: {(DQ (/dev/null))} spids: [3024] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:QUIETFLAG) op: assign_op.Equal rhs: {(DQ (-q))} spids: [3030] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:STATSREDIR) op: assign_op.Equal rhs: {(DQ (/dev/stdout))} spids: [3036] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DDSTATS) op: assign_op.Equal rhs: {(DQ )} spids: [3042] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:XARGST) op: assign_op.Equal rhs: {(DQ )} spids: [3047] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NDEBUG) op: assign_op.Equal rhs: {(DQ (-n))} spids: [3052] ) ] ) ] spids: [3020 3021 3058 -1] ) ] ) ] ) ) (command.ShFunction name: fetchupgrade_check_params body: (command.BraceGroup children: [ (C {(export)} {(Id.Lit_VarLike 'HTTP_USER_AGENT=') (DQ ('freebsd-update (') (${ Id.VSub_Name COMMAND) (', ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3101) command_list: (command.CommandList children:[(C {(uname)} {(-r)})]) ) (')') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_SERVERNAME_z) op: assign_op.Equal rhs: {(DQ ('SERVERNAME must be given via command line or configuration file.'))} spids: [3113] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_KEYPRINT_z) op: assign_op.Equal rhs: {(DQ ('Key must be given via -k option or configuration file.'))} spids: [3120] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_KEYPRINT_bad) op: assign_op.Equal rhs: {(DQ ('Invalid key fingerprint: '))} spids: [3126] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_WORKDIR_bad) op: assign_op.Equal rhs: {(DQ ('Directory does not exist or is not writable: '))} spids: [3132] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_WORKDIR_bad2) op: assign_op.Equal rhs: {(DQ ('Directory is not on a persistent filesystem: '))} spids: [3138] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name SERVERNAME))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3158) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3168) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(DQ (${ Id.VSub_Name _SERVERNAME_z))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3188) arg_word: {(1)} ) ] spids: [3145 3160] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name KEYPRINT))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3209) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3219) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(DQ (${ Id.VSub_Name _KEYPRINT_z))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3239) arg_word: {(1)} ) ] spids: [3196 3211] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name KEYPRINT))}) (C {(grep)} {(-qE)} {(DQ ('^[0-9a-f]{64}') (Id.Lit_Other '$'))}) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:3269) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3279) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _KEYPRINT_bad))}) (C {(echo)} {(${ Id.VSub_Name KEYPRINT)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3308) arg_word: {(1)} ) ] spids: [3247 3271] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:3341) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3351) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))}) (C {(echo)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3380) arg_word: {(1)} ) ] spids: [3316 3343] ) ] ) (command.Case to_match: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3390) command_list: (command.CommandList children: [(C {(df)} {(-T)} {(${ Id.VSub_Name WORKDIR)})] ) ) } arms: [ (case_arm pat_list: [ {(Id.Lit_Star '*') (/dev/md) (Id.Lit_LBracket '[') (0-9) (Id.Lit_RBracket ']') (Id.Lit_Star '*') } {(Id.Lit_Star '*') (tmpfs) (Id.Lit_Star '*')} ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3424) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad2))}) (C {(echo)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3453) arg_word: {(1)} ) ] spids: [3404 3416 3458 -1] ) ] ) (C {(chmod)} {(700)} {(${ Id.VSub_Name WORKDIR)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(cd)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3481) arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELNUM) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3504) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(uname)} {(-r)}) (C {(sed)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'s,-p[0-9]+,,' span_id:3521))} ) (C {(sed)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: 's,-SECURITY,-RELEASE,' span_id: 3532 ) ) } ) ] negated: F ) ] ) ) } spids: [3503] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ARCH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3538) command_list: (command.CommandList children:[(C {(uname)} {(-m)})]) ) } spids: [3537] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FETCHDIR) op: assign_op.Equal rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH)} spids: [3547] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATCHDIR) op: assign_op.Equal rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH) (/bp)} spids: [3557] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BOOTFILE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3574) command_list: (command.CommandList children: [(C {(sysctl)} {(-n)} {(kern.bootfile)})] ) ) } spids: [3573] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNELDIR) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:BOOTFILE span_id:3587) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(Id.Lit_Slash /) (kernel)} ) ) } spids: [3585] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name KERNELDIR)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:3607) ) ] action: [ (C {(echo)} {(DQ ('Cannot identify running kernel'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3619) arg_word: {(1)} ) ] spids: [3594 3609] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNCONF) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3661) command_list: (command.CommandList children:[(C {(uname)} {(-i)})]) ) } spids: [3660] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} {(Id.Lit_Equals '=')} {(DQ (SMP-GENERIC))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3685) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNCONF) op: assign_op.Equal rhs: {(SMP)} spids: [3690] ) ] ) ] spids: [3670 3687] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} {(Id.Lit_Equals '=')} {(DQ (GENERIC))} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ARCH)} {(Id.Lit_Equals '=')} {(DQ (amd64))} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:3728) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(sysctl)} {(kern.version)}) (C {(grep)} {(-qE)} {(SQ (Token id:Id.Lit_Chars val:'/SMP$' span_id:3746))} ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:3748) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNCONF) op: assign_op.Equal rhs: {(SMP)} spids: [3753] ) ] ) ] spids: [3733 3750] ) ] ) ] spids: [3697 3730] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BSPATCH) op: assign_op.Equal rhs: {(/usr/bin/bspatch)} spids: [3768] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SHA256) op: assign_op.Equal rhs: {(/sbin/sha256)} spids: [3772] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PHTTPGET) op: assign_op.Equal rhs: {(/usr/libexec/phttpget)} spids: [3776] ) ] ) (C {(fetch_setup_verboselevel)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BDHASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3794) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name BASEDIR)}) (C {(sha256)} {(-q)}) ] negated: F ) ] ) ) } spids: [3793] ) ] ) ] ) ) (command.ShFunction name: fetch_check_params body: (command.BraceGroup children: [ (C {(fetchupgrade_check_params)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name TARGETRELEASE))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:3843) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3853) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ ("-r option is meaningless with 'fetch' command. "))}) (C {(echo)} {(DQ ("(Did you mean 'upgrade' instead?)"))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3880) arg_word: {(1)} ) ] spids: [3828 3845] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-install/kerneldone)} {(-a)} {($ Id.VSub_DollarName '$FORCEFETCH')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3913) ) ] action: [ (C {(echo)} {(DQ ('You have a partially completed upgrade pending'))}) (C {(echo)} {(DQ ("Run '") ($ Id.VSub_Number '$0') (" install' first."))}) (C {(echo)} {(DQ ("Run '") ($ Id.VSub_Number '$0') (" fetch -F' to proceed anyway."))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:3943) arg_word: {(1)} ) ] spids: [3893 3915] ) ] ) ] ) ) (command.ShFunction name: upgrade_check_params body: (command.BraceGroup children: [ (C {(fetchupgrade_check_params)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NKERNCONF) op: assign_op.Equal rhs: {(${ Id.VSub_Name KERNCONF)} spids: [3972] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_TARGETRELEASE_z) op: assign_op.Equal rhs: {(DQ ('Release target must be specified via -r option.'))} spids: [3983] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name TARGETRELEASE))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4002) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4012) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(DQ (${ Id.VSub_Name _TARGETRELEASE_z))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4032) arg_word: {(1)} ) ] spids: [3989 4004] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TARGETRELEASE))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name RELNUM))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4064) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4074) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(DQ ('Cannot upgrade from ') (${ Id.VSub_Name RELNUM) (' to itself'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4096) arg_word: {(1)} ) ] spids: [4045 4066] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name ALLOWADD))} {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4126) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4136) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} { (DQ ('WARNING: ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:4153) ) ('AllowAdd no') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:4155)) (' is a bad idea ') ) } ) (C {(echo)} {(DQ ('when upgrading between releases.'))}) (C {(echo)}) ] spids: [4109 4128] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name ALLOWDELETE))} {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4190) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4200) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} { (DQ ('WARNING: ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:4217) ) ('AllowDelete no') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:4219) ) (' is a bad idea ') ) } ) (C {(echo)} {(DQ ('when upgrading between releases.'))}) (C {(echo)}) ] spids: [4173 4192] ) ] ) (C {(Id.Lit_Other ':')} { (braced_var_sub token: (Token id:Id.VSub_Name val:EDITOR span_id:4245) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(SQ (Token id:Id.Lit_Chars val:/usr/bin/vi span_id:4248))} ) ) } ) ] ) ) (command.ShFunction name: install_check_params body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4277) command_list: (command.CommandList children:[(C {(id)} {(-u)})]) ) } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4291) ) ] action: [ (C {(echo)} {(DQ ('You must be root to run this.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4303) arg_word: {(1)} ) ] spids: [4273 4293] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4320) command_list: (command.CommandList children: [(C {(sysctl)} {(-n)} {(kern.securelevel)})] ) ) } {(-gt)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4335) ) ] action: [ (C {(echo)} {(DQ ('Updates cannot be installed when the system securelevel'))}) (C {(echo)} {(DQ ('is greater than zero.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4354) arg_word: {(1)} ) ] spids: [4316 4337] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_WORKDIR_bad) op: assign_op.Equal rhs: {(DQ ('Directory does not exist or is not writable: '))} spids: [4367] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4398) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4408) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))}) (C {(echo)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4437) arg_word: {(1)} ) ] spids: [4373 4400] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(cd)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4453) arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BDHASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4464) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name BASEDIR)}) (C {(sha256)} {(-q)}) ] negated: F ) ] ) ) } spids: [4463] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-install)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4500) ) ] action: [ (C {(echo)} {(DQ ('No updates are available to install.'))}) (C {(echo)} {(DQ ("Run '") ($ Id.VSub_Number '$0') (" fetch' first."))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4521) arg_word: {(1)} ) ] spids: [4486 4502] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-OLD)} {(Id.Lit_RBracket ']')} ) ] negated: T ) (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-NEW)} {(Id.Lit_RBracket ']')} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:4559) ) ] action: [ (C {(echo)} {(DQ ('Update manifest is corrupt -- this should never happen.'))}) (C {(echo)} {(DQ ("Re-run '") ($ Id.VSub_Number '$0') (" fetch'."))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4580) arg_word: {(1)} ) ] spids: [4529 4561] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BOOTFILE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4594) command_list: (command.CommandList children: [(C {(sysctl)} {(-n)} {(kern.bootfile)})] ) ) } spids: [4593] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNELDIR) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:BOOTFILE span_id:4607) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(Id.Lit_Slash /) (kernel)} ) ) } spids: [4605] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name KERNELDIR)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4627) ) ] action: [ (C {(echo)} {(DQ ('Cannot identify running kernel'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4639) arg_word: {(1)} ) ] spids: [4614 4629] ) ] ) ] ) ) (command.ShFunction name: rollback_check_params body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4671) command_list: (command.CommandList children:[(C {(id)} {(-u)})]) ) } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4685) ) ] action: [ (C {(echo)} {(DQ ('You must be root to run this.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4697) arg_word: {(1)} ) ] spids: [4667 4687] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_WORKDIR_bad) op: assign_op.Equal rhs: {(DQ ('Directory does not exist or is not writable: '))} spids: [4710] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4741) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4751) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))}) (C {(echo)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4780) arg_word: {(1)} ) ] spids: [4716 4743] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(cd)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4796) arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BDHASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4807) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name BASEDIR)}) (C {(sha256)} {(-q)}) ] negated: F ) ] ) ) } spids: [4806] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-rollback)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4843) ) ] action: [ (C {(echo)} {(DQ ('No rollback directory found.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4855) arg_word: {(1)} ) ] spids: [4829 4845] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-OLD)} {(Id.Lit_RBracket ']')} ) ] negated: T ) (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-NEW)} {(Id.Lit_RBracket ']')} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:4893) ) ] action: [ (C {(echo)} {(DQ ('Update manifest is corrupt -- this should never happen.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:4905) arg_word: {(1)} ) ] spids: [4863 4895] ) ] ) ] ) ) (command.ShFunction name: IDS_check_params body: (command.BraceGroup children: [ (C {(export)} {(Id.Lit_VarLike 'HTTP_USER_AGENT=') (DQ ('freebsd-update (') (${ Id.VSub_Name COMMAND) (', ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:4953) command_list: (command.CommandList children:[(C {(uname)} {(-r)})]) ) (')') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_SERVERNAME_z) op: assign_op.Equal rhs: {(DQ ('SERVERNAME must be given via command line or configuration file.'))} spids: [4965] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_KEYPRINT_z) op: assign_op.Equal rhs: {(DQ ('Key must be given via -k option or configuration file.'))} spids: [4972] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_KEYPRINT_bad) op: assign_op.Equal rhs: {(DQ ('Invalid key fingerprint: '))} spids: [4978] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_WORKDIR_bad) op: assign_op.Equal rhs: {(DQ ('Directory does not exist or is not writable: '))} spids: [4984] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name SERVERNAME))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5004) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5014) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(DQ (${ Id.VSub_Name _SERVERNAME_z))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5034) arg_word: {(1)} ) ] spids: [4991 5006] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name KEYPRINT))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5055) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5065) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(DQ (${ Id.VSub_Name _KEYPRINT_z))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5085) arg_word: {(1)} ) ] spids: [5042 5057] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name KEYPRINT))}) (C {(grep)} {(-qE)} {(DQ ('^[0-9a-f]{64}') (Id.Lit_Other '$'))}) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:5115) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5125) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _KEYPRINT_bad))}) (C {(echo)} {(${ Id.VSub_Name KEYPRINT)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5154) arg_word: {(1)} ) ] spids: [5093 5117] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ (${ Id.VSub_Name WORKDIR))} {(-a)} {(-w)} {(DQ (${ Id.VSub_Name WORKDIR))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:5187) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5197) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (': ') ) } ) (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name _WORKDIR_bad))}) (C {(echo)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5226) arg_word: {(1)} ) ] spids: [5162 5189] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(cd)} {(${ Id.VSub_Name WORKDIR)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5242) arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELNUM) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5265) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(uname)} {(-r)}) (C {(sed)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'s,-p[0-9]+,,' span_id:5282))} ) (C {(sed)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: 's,-SECURITY,-RELEASE,' span_id: 5293 ) ) } ) ] negated: F ) ] ) ) } spids: [5264] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ARCH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5299) command_list: (command.CommandList children:[(C {(uname)} {(-m)})]) ) } spids: [5298] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FETCHDIR) op: assign_op.Equal rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH)} spids: [5308] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATCHDIR) op: assign_op.Equal rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH) (/bp)} spids: [5318] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BOOTFILE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5335) command_list: (command.CommandList children: [(C {(sysctl)} {(-n)} {(kern.bootfile)})] ) ) } spids: [5334] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNELDIR) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:BOOTFILE span_id:5348) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {(Id.Lit_Slash /) (kernel)} ) ) } spids: [5346] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name KERNELDIR)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:5368) ) ] action: [ (C {(echo)} {(DQ ('Cannot identify running kernel'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5380) arg_word: {(1)} ) ] spids: [5355 5370] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNCONF) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5422) command_list: (command.CommandList children:[(C {(uname)} {(-i)})]) ) } spids: [5421] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} {(Id.Lit_Equals '=')} {(DQ (SMP-GENERIC))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5446) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNCONF) op: assign_op.Equal rhs: {(SMP)} spids: [5451] ) ] ) ] spids: [5431 5448] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KERNCONF)} {(Id.Lit_Equals '=')} {(DQ (GENERIC))} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ARCH)} {(Id.Lit_Equals '=')} {(DQ (amd64))} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:5489) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(sysctl)} {(kern.version)}) (C {(grep)} {(-qE)} {(SQ (Token id:Id.Lit_Chars val:'/SMP$' span_id:5507))} ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:5509) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KERNCONF) op: assign_op.Equal rhs: {(SMP)} spids: [5514] ) ] ) ] spids: [5494 5511] ) ] ) ] spids: [5458 5491] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SHA256) op: assign_op.Equal rhs: {(/sbin/sha256)} spids: [5529] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PHTTPGET) op: assign_op.Equal rhs: {(/usr/libexec/phttpget)} spids: [5533] ) ] ) (C {(fetch_setup_verboselevel)}) ] ) ) (command.ShFunction name: fetch_pick_server_init body: (command.BraceGroup children: [ (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:5598) fd: -1 arg_word: {(serverlist_tried)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children:[(C {(which)} {(-s)} {(host)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:5619) ) ] action: [ (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:5626) fd: -1 arg_word: {(serverlist_full)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:5631) arg_word: {(1)} ) ] spids: [5610 5621] ) ] ) (C {(echo)} {(-n)} {(DQ ('Looking up ') (${ Id.VSub_Name SERVERNAME) (' mirrors... '))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MLIST) op: assign_op.Equal rhs: {(DQ (_http._tcp.) (${ Id.VSub_Name SERVERNAME))} spids: [5663] ) ] ) (command.Pipeline children: [ (C {(host)} {(-t)} {(srv)} {(DQ (${ Id.VSub_Name MLIST))}) (C {(sed)} {(-nE)} {(DQ (s/) (${ Id.VSub_Name MLIST) (' (has SRV record|server selection) //p'))} ) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (4)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:5715))} ) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/\\.$//' span_id:5726))}) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:5734) fd: -1 arg_word: {(serverlist_full)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5747) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:5754) fd: -1 arg_word: {(serverlist_full)} ) ] ) ] ) ) } {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5764) ) ] action: [ (C {(echo)} {(DQ ('none found.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:5776) arg_word: {(1)} ) ] spids: [5743 5766] ) ] ) (C {(echo)} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5790) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:5797) fd: -1 arg_word: {(serverlist_full)} ) ] ) ] ) ) } {(DQ ('mirrors found.'))} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ (${ Id.VSub_Name HTTP_PROXY) (${ Id.VSub_Name http_proxy))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5833) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RANDVALUE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5839) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(sha256)} {(-qs)} { (DQ (${ Id.VSub_Name HTTP_PROXY) (${ Id.VSub_Name http_proxy) ) } ) (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:a-f span_id:5865))} ) (C {(cut)} {(-c)} {(1-9)}) ] negated: F ) ] ) ) } spids: [5838] ) ] ) ] spids: [5817 5835] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RANDVALUE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5883) command_list: (command.CommandList children: [(C {(jot)} {(-r)} {(1)} {(0)} {(999999999)})] ) ) } spids: [5882] ) ] ) ] ) ] ) ) (command.ShFunction name: fetch_pick_server body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(sort)} {(serverlist_tried)}) (command.Simple words: [{(comm)} {(-23)} {(serverlist_full)} {(-)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:5932) fd: -1 arg_word: {(serverlist)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5945) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:5952) fd: -1 arg_word: {(serverlist)} ) ] ) ] ) ) } {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5962) ) ] action: [ (C {(echo)} {(DQ ('No mirrors remaining, giving up.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:5974) arg_word: {(1)} ) ] spids: [5941 5964] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_PRIORITY) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5987) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:5999))} {(serverlist)} ) (C {(sort)} {(-n)}) (C {(head)} {(-1)}) ] negated: F ) ] ) ) } spids: [5986] ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_WSUM) op: assign_op.Equal rhs: {(0)} spids: [6022] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:6024) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:6027) cond: [ (command.Sentence child: (C {(read)} {(X)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6032) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$X'))} arms: [ (case_arm pat_list: [ {(${ Id.VSub_Name SRV_PRIORITY) (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\ ' span_id:6049) ) (Id.Lit_Star '*') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_W) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6055) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$X')}) (C {(cut)} {(-f)} {(2)} {(-d)} { (SQ (Token id: Id.Lit_Chars val: ' ' span_id: 6073 ) ) } ) ] negated: F ) ] ) ) } spids: [6054] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_WSUM) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$SRV_WSUM')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$SRV_W')} ) ) ) } spids: [6078] ) ] ) ] spids: [6046 6051 6089 -1] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:6097) fd: -1 arg_word: {(serverlist)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name SRV_WSUM)} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6119) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_WSUM) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6125) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name SRV_PRIORITY) (' '))} {(serverlist)} ) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } spids: [6124] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_W_ADD) op: assign_op.Equal rhs: {(1)} spids: [6150] ) ] ) ] spids: [6106 6121] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_W_ADD) op: assign_op.Equal rhs: {(0)} spids: [6157] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_RND) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6169) command_list: (command.CommandList children: [ (C {(expr)} {(${ Id.VSub_Name RANDVALUE)} {(Id.Lit_Other '%')} {(${ Id.VSub_Name SRV_WSUM)} ) ] ) ) } spids: [6168] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:6196) cond: [ (command.Sentence child: (C {(read)} {(X)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6201) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$X'))} arms: [ (case_arm pat_list: [ {(${ Id.VSub_Name SRV_PRIORITY) (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\ ' span_id:6218) ) (Id.Lit_Star '*') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_W) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6224) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$X')}) (C {(cut)} {(-f)} {(2)} {(-d)} { (SQ (Token id: Id.Lit_Chars val: ' ' span_id: 6242 ) ) } ) ] negated: F ) ] ) ) } spids: [6223] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_W) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$SRV_W')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$SRV_W_ADD')} ) ) ) } spids: [6247] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$SRV_RND')} {(-lt)} {($ Id.VSub_DollarName '$SRV_W')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6269) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SERVERNAME) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 6275 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$X')}) (C {(cut)} {(-f)} {(3)} {(-d)} { (SQ (Token id: Id.Lit_Chars val: ' ' span_id: 6293 ) ) } ) ] negated: F ) ] ) ) } spids: [6274] ) ] ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$X'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:6304) fd: -1 arg_word: {(serverlist_tried)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:6309) ) ] spids: [6258 6271] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SRV_RND) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$SRV_RND')} ) right: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$SRV_W')} ) ) ) } spids: [6315] ) ] ) ] ) ] spids: [6215 6220 6329 -1] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:6337) fd: -1 arg_word: {(serverlist)} ) ] ) ] ) ) (command.ShFunction name: fetch_make_patchlist body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(grep)} {(-vE)} { (DQ ('^([0-9a-f]{64})') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') (1) (Id.Lit_Other '$') ) } ) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:6377))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:6381))} ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:6387) cond: [ (command.Sentence child: (C {(read)} {(X)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6394) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (files/) (${ Id.VSub_Name X) (.gz))} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:6433) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:6438) ) ] spids: [6399 6435] ) ] ) (C {(echo)} {(DQ (${ Id.VSub_Name X) ('|') (${ Id.VSub_Name Y))}) ] ) ) (C {(uniq)}) ] negated: F ) ] ) ) (command.ShFunction name: fetch_progress body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LNC) op: assign_op.Equal rhs: {(0)} spids: [6477] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:6481) cond: [ (command.Sentence child: (C {(read)} {(x)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6486) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LNC) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$LNC')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [6491] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$LNC')} ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 10)}) ) ) } {(Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6520) ) ] action: [(C {(echo)} {(-n)} {($ Id.VSub_DollarName '$LNC')})] spids: [6502 6522] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$LNC')} ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)}) ) ) } {(Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6550) ) ] action: [(C {(echo)} {(-n)} {(.)})] spids: [6532 6552] ) ] ) ] ) ) (C {(echo)} {(-n)} {(DQ (' '))}) ] ) ) (command.ShFunction name: continuep body: (command.BraceGroup children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:6590) cond: [ (command.Sentence child: (C {(read)} {(-p)} {(DQ ('Does this look reasonable (y/n)? '))} {(CONTINUE)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6601) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ (${ Id.VSub_Name CONTINUE))} arms: [ (case_arm pat_list: [{(y) (Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:6622) arg_word: {(0)} ) ] spids: [6617 6619 6627 -1] ) (case_arm pat_list: [{(n) (Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:6635) arg_word: {(1)} ) ] spids: [6630 6632 6640 -1] ) ] ) ] ) ) ] ) ) (command.ShFunction name: workdir_init body: (command.BraceGroup children: [(C {(mkdir)} {(-p)} {(files)}) (C {(touch)} {(tINDEX.present)})] ) ) (command.ShFunction name: fetch_key body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-r)} {(pub.ssl)} {(Id.Lit_RBracket ']')}) (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6707) command_list: (command.CommandList children: [(C {(${ Id.VSub_Name SHA256)} {(-q)} {(pub.ssl)})] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name KEYPRINT)} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:6726) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:6731) arg_word: {(0)} ) ] spids: [6693 6728] ) ] ) (C {(echo)} {(-n)} {(DQ ('Fetching public key from ') (${ Id.VSub_Name SERVERNAME) ('... '))}) (C {(rm)} {(-f)} {(pub.ssl)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(fetch)} {(${ Id.VSub_Name QUIETFLAG)} {(http) (Id.Lit_Other ':') (//) (${ Id.VSub_Name SERVERNAME) (/) (${ Id.VSub_Name FETCHDIR) (/pub.ssl) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:6780) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) (C {(true)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-r)} {(pub.ssl)} {(Id.Lit_RBracket ']')}) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:6801) ) ] action: [ (C {(echo)} {(DQ (failed.))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:6813) arg_word: {(1)} ) ] spids: [6790 6803] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6827) command_list: (command.CommandList children: [(C {(${ Id.VSub_Name SHA256)} {(-q)} {(pub.ssl)})] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name KEYPRINT)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:6846) ) ] action: [ (C {(echo)} {(DQ ('key has incorrect hash.'))}) (C {(rm)} {(-f)} {(pub.ssl)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:6865) arg_word: {(1)} ) ] spids: [6821 6848] ) ] ) (C {(echo)} {(DQ (done.))}) ] ) ) (command.ShFunction name: fetch_tag body: (command.BraceGroup children: [ (C {(echo)} {(-n)} {(DQ ('Fetching metadata signature '))}) (C {(echo)} {(${ Id.VSub_Name NDEBUG)} { (DQ ('for ') (${ Id.VSub_Name RELNUM) (' from ') (${ Id.VSub_Name SERVERNAME) ('... ')) } ) (C {(rm)} {(-f)} {(latest.ssl)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(fetch)} {(${ Id.VSub_Name QUIETFLAG)} {(http) (Id.Lit_Other ':') (//) (${ Id.VSub_Name SERVERNAME) (/) (${ Id.VSub_Name FETCHDIR) (/latest.ssl) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:6948) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) (C {(true)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-r)} {(latest.ssl)} {(Id.Lit_RBracket ']')}) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:6969) ) ] action: [ (C {(echo)} {(DQ (failed.))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:6981) arg_word: {(1)} ) ] spids: [6958 6971] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(openssl)} {(rsautl)} {(-pubin)} {(-inkey)} {(pub.ssl)} {(-verify)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:7004) fd: -1 arg_word: {(latest.ssl)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:7008) fd: -1 arg_word: {(tag.new)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:7012) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) (C {(true)}) ] ) (C {(rm)} {(latest.ssl)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7034) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:7041) fd: -1 arg_word: {(tag.new)} ) ] ) ] ) ) } {(Id.Lit_Equals '=')} {(1)} {(Id.Lit_RBracket ']')} ) ] negated: T ) (command.Pipeline children: [ (C {(grep)} {(-qE)} { (DQ ('^freebsd-update') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name ARCH) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name RELNUM) (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') ('|[0-9a-f]{64}') (Id.Lit_Other '\\') ('|[0-9]{10}') ) } {(tag.new)} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:7086) ) ] action: [ (C {(echo)} {(DQ ('invalid signature.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7098) arg_word: {(1)} ) ] spids: [7028 7088] ) ] ) (C {(echo)} {(DQ (done.))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELPATCHNUM) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7116) command_list: (command.CommandList children: [ (command.Simple words: [ {(cut)} {(-f)} {(4)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7128))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:7131) fd: -1 arg_word: {(tag.new)} ) ] ) ] ) ) } spids: [7115] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TINDEXHASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7138) command_list: (command.CommandList children: [ (command.Simple words: [ {(cut)} {(-f)} {(5)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7150))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:7153) fd: -1 arg_word: {(tag.new)} ) ] ) ] ) ) } spids: [7137] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:EOLTIME) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7160) command_list: (command.CommandList children: [ (command.Simple words: [ {(cut)} {(-f)} {(6)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7172))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:7175) fd: -1 arg_word: {(tag.new)} ) ] ) ] ) ) } spids: [7159] ) ] ) ] ) ) (command.ShFunction name: fetch_tagsanity body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELPX) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7202) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(uname)} {(-r)}) (C {(sed)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'s,.*-,,' span_id:7216))} ) ] negated: F ) ] ) ) } spids: [7201] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name RELPX)}) (C {(grep)} {(-qE)} {(SQ (Token id:Id.Lit_Chars val:'^p[0-9]+$' span_id:7236))} ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:7238) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELPX) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7244) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name RELPX)}) (C {(cut)} {(-c)} {(2-)}) ] negated: F ) ] ) ) } spids: [7243] ) ] ) ] spids: [7221 7240] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELPX) op: assign_op.Equal rhs: {(0)} spids: [7266] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name RELPATCHNUM))} {(-lt)} {(DQ (${ Id.VSub_Name RELPX))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:7292) ) ] action: [ (C {(echo)}) (C {(echo)} {(-n)} { (DQ ('Files on mirror (') (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (')') ) } ) (C {(echo)} {(DQ (' appear older than what'))}) (C {(echo)} { (DQ ('we are currently running (') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7328) command_list: (command.CommandList children:[(C {(uname)} {(-r)})]) ) (')!') ) } ) (C {(echo)} {(DQ ('Cowardly refusing to proceed any further.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7346) arg_word: {(1)} ) ] spids: [7273 7294] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(tag)} {(Id.Lit_RBracket ']')}) (C {(grep)} {(-qE)} { (DQ ('^freebsd-update') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name ARCH) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name RELNUM) (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') ('|[0-9a-f]{64}') (Id.Lit_Other '\\') ('|[0-9]{10}') ) } {(tag)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:7409) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LASTRELPATCHNUM) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7415) command_list: (command.CommandList children: [ (command.Simple words: [ {(cut)} {(-f)} {(4)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7427))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:7430) fd: -1 arg_word: {(tag)} ) ] ) ] ) ) } spids: [7414] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name RELPATCHNUM))} {(-lt)} {(DQ (${ Id.VSub_Name LASTRELPATCHNUM))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:7456) ) ] action: [ (C {(echo)}) (C {(echo)} {(-n)} { (DQ ('Files on mirror (') (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (')') ) } ) (C {(echo)} {(DQ (' are older than the'))}) (C {(echo)} {(-n)} {(DQ ('most recently seen updates'))}) (C {(echo)} { (DQ (' (') (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name LASTRELPATCHNUM) (').') ) } ) (C {(echo)} {(DQ ('Cowardly refusing to proceed any further.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7519) arg_word: {(1)} ) ] spids: [7437 7458] ) ] ) ] spids: [7367 7411] ) ] ) ] ) ) (command.ShFunction name: fetch_metadata_index body: (command.BraceGroup children: [ (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('Fetching metadata index... '))}) (C {(rm)} {(-f)} {(${ Id.VSub_Name TINDEXHASH)}) (C {(fetch)} {(${ Id.VSub_Name QUIETFLAG)} {(http) (Id.Lit_Other ':') (//) (${ Id.VSub_Name SERVERNAME) (/) (${ Id.VSub_Name FETCHDIR) (/t/) (${ Id.VSub_Name TINDEXHASH) } ) (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:7585) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name TINDEXHASH)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:7604) ) ] action: [ (C {(echo)} {(DQ (failed.))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7616) arg_word: {(1)} ) ] spids: [7591 7606] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:7628) command_list: (command.CommandList children: [ (C {(${ Id.VSub_Name SHA256)} {(-q)} {(${ Id.VSub_Name TINDEXHASH)}) ] ) ) } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(${ Id.VSub_Name TINDEXHASH)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:7650) ) ] action: [ (C {(echo)} {(DQ ('update metadata index corrupt.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7662) arg_word: {(1)} ) ] spids: [7624 7652] ) ] ) (C {(echo)} {(DQ (done.))}) ] ) ) (command.ShFunction name: fetch_metadata_bogus body: (command.BraceGroup children: [ (C {(echo)}) (C {(echo)} {(DQ ('The update metadata') ($ Id.VSub_Number '$1') (' is correctly signed, but'))} ) (C {(echo)} {(DQ ('failed an integrity check.'))}) (C {(echo)} {(DQ ('Cowardly refusing to proceed any further.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7716) arg_word: {(1)} ) ] ) ) (command.ShFunction name: fetch_metadata_index_merge body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.ForEach iter_name: METAFILE iter_words: [{($ Id.VSub_At '$@')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 7753 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(grep)} {(-E)} { (DQ ('^') (${ Id.VSub_Name METAFILE) (Id.Lit_Other '\\') ('|') ) } {(${ Id.VSub_Name TINDEXHASH)} ) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } {(-ne)} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:7789) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ (' index'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7801) arg_word: {(1)} ) ] spids: [7749 7791] ) ] ) (C {(grep)} {(-E)} {(DQ (${ Id.VSub_Name METAFILE) (Id.Lit_Other '\\') ('|'))} {(${ Id.VSub_Name TINDEXHASH)} ) ] ) ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:7834) fd: -1 arg_word: {(tINDEX.wanted)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(tINDEX.present)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:7849) ) ] action: [ (command.Pipeline children: [ (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:7859))} {(-v)} {(2)} {(tINDEX.wanted)} {(tINDEX.present)} ) (command.Simple words: [{(sort)} {(-m)} {(-)} {(tINDEX.wanted)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:7881) fd: -1 arg_word: {(tINDEX.new)} ) ] ) ] negated: F ) (C {(rm)} {(tINDEX.wanted)}) ] spids: [7840 7851] ) ] else_action: [(C {(mv)} {(tINDEX.wanted)} {(tINDEX.new)})] ) ] ) ) (command.ShFunction name: fetch_metadata_index_sanity body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(grep)} {(-qvE)} { (SQ (Token id: Id.Lit_Chars val: '^[0-9A-Z.-]+\\|[0-9a-f]{64}$' span_id: 7933 ) ) } {(tINDEX.new)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:7937) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ (' index'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:7949) arg_word: {(1)} ) ] spids: [7926 7939] ) ] ) ] ) ) (command.ShFunction name: fetch_metadata_sanity body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:P) op: assign_op.Equal rhs: {(DQ ('[-+./:=,%@_[~[:alnum:]]'))} spids: [7982] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:M) op: assign_op.Equal rhs: { (DQ ('[0-9]+') (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') ('|[0-9]+') (Id.Lit_Other '\\') ('|[0-9]+') ) } spids: [7988] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:H) op: assign_op.Equal rhs: {(DQ ('[0-9a-f]{64}'))} spids: [8000] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8017) fd: -1 arg_word: {(files/) ($ Id.VSub_Number '$1') (.gz)} ) ] ) (C {(grep)} {(-qvE)} { (DQ ('^[a-z]+') (Id.Lit_Other '\\') ('|[0-9a-z-]+') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name P) ('+') (Id.Lit_Other '\\') ('|[fdL-]') (Id.Lit_Other '\\') ('|') ) } ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:8045) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ )}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8056) arg_word: {(1)} ) ] spids: [8011 8047] ) ] ) (command.Pipeline children: [ (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8073) fd: -1 arg_word: {(files/) ($ Id.VSub_Number '$1') (.gz)} ) ] ) (command.Simple words: [{(cut)} {(-f)} {(4-)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8091))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8094) fd: -1 arg_word: {(sanitycheck.tmp)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^f' span_id:8111))} {(sanitycheck.tmp)} ) (C {(grep)} {(-qvE)} { (DQ ('^f') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name M) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name H) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name P) ('*') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:8141) ) ) } ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:8143) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ )}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8154) arg_word: {(1)} ) ] spids: [8104 8145] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^d' span_id:8174))} {(sanitycheck.tmp)} ) (C {(grep)} {(-qvE)} { (DQ ('^d') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name M) (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:8197) ) ) } ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:8199) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ )}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8210) arg_word: {(1)} ) ] spids: [8167 8201] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^L' span_id:8230))} {(sanitycheck.tmp)} ) (C {(grep)} {(-qvE)} { (DQ ('^L') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name M) (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name P) ('*') (Id.Lit_Other '\\') ('|') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:8257) ) ) } ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:8259) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ )}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8270) arg_word: {(1)} ) ] spids: [8223 8261] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^-' span_id:8290))} {(sanitycheck.tmp)} ) (C {(grep)} {(-qvE)} { (DQ ('^-') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') (Id.Lit_Other '\\') ('|') ) } ) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:8317) ) ] action: [ (C {(fetch_metadata_bogus)} {(DQ )}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8328) arg_word: {(1)} ) ] spids: [8283 8319] ) ] ) (C {(rm)} {(sanitycheck.tmp)}) ] ) ) (command.ShFunction name: fetch_metadata body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata_index)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8366) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata_index_merge)} {($ Id.VSub_At '$@')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8377) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata_index_sanity)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:8386) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8401))} {(-o)} {(1.2) (Id.Lit_Comma ',') (2.2)} {(tINDEX.present)} {(tINDEX.new)} ) (command.Simple words: [{(fetch_make_patchlist)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8419) fd: -1 arg_word: {(patchlist)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(patchlist)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:8434) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Fetching ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:8449) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8456) fd: -1 arg_word: {(patchlist)} ) ] ) (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:8467))} ) ] negated: F ) ] ) ) (' ') ) } ) (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('metadata patches.') (${ Id.VSub_Name DDSTATS))} ) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8491))} {(SQ (Token id:Id.Lit_Chars val:- span_id:8495))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8498) fd: -1 arg_word: {(patchlist)} ) ] ) (C {(lam)} {(-s)} {(DQ (${ Id.VSub_Name FETCHDIR) (/tp/))} {(-)} {(-s)} {(DQ (.gz))}) (command.Simple words: [ {(xargs)} {(${ Id.VSub_Name XARGST)} {(${ Id.VSub_Name PHTTPGET)} {(${ Id.VSub_Name SERVERNAME)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:8543) fd: 2 arg_word: {(${ Id.VSub_Name STATSREDIR)} ) ] ) (C {(fetch_progress)}) ] negated: F ) (C {(echo)} {(DQ (done.))}) (C {(echo)} {(-n)} {(DQ ('Applying metadata patches... '))}) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8577))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:8581))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8584) fd: -1 arg_word: {(patchlist)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:8591) cond: [ (command.Sentence child: (C {(read)} {(X)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:8598) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:8623) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 8627 ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:8628) ) ] spids: [8603 8625] ) ] ) (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8637) fd: -1 arg_word: {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8648) fd: -1 arg_word: {(diff)} ) ] ) (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8657) fd: -1 arg_word: {(files/) (${ Id.VSub_Name X) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8665) fd: -1 arg_word: {(diff-OLD)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^-' span_id:8680))} {(diff)} ) (C {(cut)} {(-c)} {(2-)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:8697) cond: [ (command.Sentence child: (C {(read)} {(PREFIX)}) terminator: (Token id:Id.Op_Semi val:';' span_id:8702) ) ] body: (command.DoGroup children: [ (C {(look)} {(DQ (${ Id.VSub_Name PREFIX))} {(diff-OLD)}) ] ) ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8725) fd: -1 arg_word: {(diff-rm)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^\\+' span_id:8735))} {(diff)} ) (command.Simple words: [{(cut)} {(-c)} {(2-)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8749) fd: -1 arg_word: {(diff-add)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(comm)} {(-23)} {(diff-OLD)} {(diff-rm)}) (command.Simple words: [{(sort)} {(-)} {(diff-add)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8776) fd: -1 arg_word: {(diff-NEW)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 8786 ) command_list: (command.CommandList children: [ (C {(${ Id.VSub_Name SHA256)} {(-q)} {(diff-NEW)} ) ] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:8805) ) ] action: [ (C {(mv)} {(diff-NEW)} {(files/) (${ Id.VSub_Name Y)}) (C {(gzip)} {(-n)} {(files/) (${ Id.VSub_Name Y)}) ] spids: [8782 8807] ) ] else_action: [(C {(mv)} {(diff-NEW)} {(${ Id.VSub_Name Y) (.bad)})] ) (C {(rm)} {(-f)} {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y) (.gz)} {(diff)} ) (C {(rm)} {(-f)} {(diff-OLD)} {(diff-NEW)} {(diff-add)} {(diff-rm)}) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:8877) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) ] negated: F ) (C {(echo)} {(DQ (done.))}) ] spids: [8425 8436] ) ] ) (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:8907))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:8910) fd: -1 arg_word: {(tINDEX.new)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:8917) cond: [ (command.Sentence child: (C {(read)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:8922) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:8944) ) ] action: [ (command.Sentence child: (C {(echo)} {(${ Id.VSub_Name Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:8954) ) ] spids: [8927 8946] ) ] ) ] ) ) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:8969) fd: -1 arg_word: {(filelist)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(filelist)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:8984) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Fetching ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:8995) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:9002) fd: -1 arg_word: {(filelist)} ) ] ) (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:9013))} ) ] negated: F ) ] ) ) (' ') ) } ) (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('metadata files... '))}) (command.Pipeline children: [ (command.Simple words: [ {(lam)} {(-s)} {(DQ (${ Id.VSub_Name FETCHDIR) (/m/))} {(-)} {(-s)} {(DQ (.gz))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:9050) fd: -1 arg_word: {(filelist)} ) ] ) (command.Simple words: [ {(xargs)} {(${ Id.VSub_Name XARGST)} {(${ Id.VSub_Name PHTTPGET)} {(${ Id.VSub_Name SERVERNAME)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:9073) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:9080) cond: [ (command.Sentence child: (C {(read)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:9085) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name Y) (.gz)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:9104) ) ] action: [ (C {(echo)} {(DQ (failed.))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:9116) arg_word: {(1)} ) ] spids: [9090 9106] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 9128 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id: Id.Redir_Less val: '<' span_id: 9136 ) fd: -1 arg_word: {(${ Id.VSub_Name Y) (.gz)} ) ] ) (C {(${ Id.VSub_Name SHA256)} {(-q)}) ] negated: F ) ] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:9160) ) ] action: [ (C {(mv)} {(${ Id.VSub_Name Y) (.gz)} {(files/) (${ Id.VSub_Name Y) (.gz)} ) ] spids: [9124 9162] ) ] else_action: [ (C {(echo)} {(DQ ('metadata is corrupt.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:9189) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:9199) fd: -1 arg_word: {(filelist)} ) ] ) (C {(echo)} {(DQ (done.))}) ] spids: [8975 8986] ) ] ) (command.Simple words: [ {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9227))} {(tINDEX.new)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9232) fd: -1 arg_word: {(filelist)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:9237) cond: [ (command.Sentence child: (C {(read)} {(X)}) terminator: (Token id:Id.Op_Semi val:';' span_id:9242) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata_sanity)} {(${ Id.VSub_Name X)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:9255) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:9262) fd: -1 arg_word: {(filelist)} ) ] ) (command.Pipeline children: [ (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9280))} {(tINDEX.present)} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9290) fd: -1 arg_word: {(oldfiles)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9304))} {(tINDEX.new)} ) (C {(sort)}) (C {(comm)} {(-13)} {(-)} {(oldfiles)}) (C {(lam)} {(-s)} {(DQ (files/))} {(-)} {(-s)} {(DQ (.gz))}) (C {(xargs)} {(rm)} {(-f)}) ] negated: F ) (C {(rm)} {(patchlist)} {(filelist)} {(oldfiles)}) (C {(rm)} {(${ Id.VSub_Name TINDEXHASH)}) (C {(mv)} {(tINDEX.new)} {(tINDEX.present)}) (C {(mv)} {(tag.new)} {(tag)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:9389) arg_word: {(0)} ) ] ) ) (command.ShFunction name: fetch_filter_metadata_components body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:METAHASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:9411) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(look)} {(DQ ($ Id.VSub_Number '$1') ('|'))} {(tINDEX.present)}) (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9434))} ) ] negated: F ) ] ) ) } spids: [9410] ) ] ) (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:9443) fd: -1 arg_word: {(files/) (${ Id.VSub_Name METAHASH) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9451) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.all)} ) ] ) (command.ForEach iter_name: C iter_words: [{(${ Id.VSub_Name COMPONENTS)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(look)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:9479) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name C)}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:/ span_id:9493))} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9497))} ) ] negated: F ) ] ) ) ('|') ) } {($ Id.VSub_Number '$1') (.all)} ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9509) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (C {(rm)} {($ Id.VSub_Number '$1') (.all)}) ] ) ) (command.ShFunction name: fetch_filter_metadata body: (command.BraceGroup children: [ (C {(fetch_filter_metadata_components)} {($ Id.VSub_Number '$1')}) (command.Pipeline children: [ (C {(cut)} {(-f)} {(3-)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9582))} {($ Id.VSub_Number '$1')} ) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s,/|d|,|d|,' span_id:9595))}) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s,/|-|,|-|,' span_id:9606))}) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9616) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name IGNOREPATHS)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$1') (.tmp)} ) ] ) ) (C {(sort)} {(-u)}) (command.Simple words: [{(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$1') (.tmp)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9677) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) ] negated: F ) (C {(rm)} {($ Id.VSub_Number '$1') (.tmp)}) ] ) ) (command.ShFunction name: fetch_filter_kernel_names body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(grep)} {(Id.Lit_Other '^') (/boot/) ($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$1')} ) (C {(sed)} {(-e)} {(DQ ('s,/boot/') ($ Id.VSub_Number '$2') (',') (${ Id.VSub_Name KERNELDIR) (',g'))} ) (command.Simple words: [{(sort)} {(-)} {($ Id.VSub_Number '$1')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9755) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-d)} {(/boot/) ($ Id.VSub_Number '$2')} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:9782) ) ] action: [ (command.Simple words: [ {(grep)} {(-v)} {(Id.Lit_Other '^') (/boot/) ($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$1')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9797) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) ] spids: [9770 9784] ) ] ) ] ) ) (command.ShFunction name: fetch_inspect_system body: (command.BraceGroup children: [ (C {(rm)} {(-f)} {(.err)}) (C {(echo)} {(-n)} {(DQ ('Inspecting system... '))}) (command.Pipeline children: [ (C {(cat)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$3')}) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:9878))}) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9888) fd: -1 arg_word: {(filelist)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:9906) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:9911) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-e)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:9937) ) ] action: [ (C {(echo)} {(DQ (${ Id.VSub_Name F) ('|-||||||'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:9952) ) ] spids: [9920 9939] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-r)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:9975) ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('Cannot read file: ') (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:9995) fd: -1 arg_word: {(/dev/stderr)} ) ] ) (C {(touch)} {(.err)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:10004) arg_word: {(1)} ) ] spids: [9958 9977] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10032) ) ] action: [ (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name F) ('|L|'))}) (command.Sentence child: (C {(stat)} {(-n)} {(-f)} { (SQ (Token id: Id.Lit_Chars val: '%d-%i|%u|%g|%Mp%Lp|%Of|' span_id: 10056 ) ) } {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10066) ) (command.Sentence child: (C {(readlink)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:10078) ) ] spids: [10017 10034] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10096) ) ] action: [ (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name F) ('|f|'))}) (command.Sentence child: (C {(stat)} {(-n)} {(-f)} { (SQ (Token id: Id.Lit_Chars val: '%d-%i|%u|%g|%Mp%Lp|%Of|' span_id: 10120 ) ) } {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10130) ) (command.Sentence child: (C {(sha256)} {(-q)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10144) ) ] spids: [10081 10098] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-d)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10162) ) ] action: [ (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name F) ('|d|'))}) (command.Sentence child: (C {(stat)} {(-f)} { (SQ (Token id: Id.Lit_Chars val: '%d-%i|%u|%g|%Mp%Lp|%Of|' span_id: 10184 ) ) } {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:10194) ) ] spids: [10147 10164] ) ] else_action: [ (command.Simple words: [ {(echo)} { (DQ ('Unknown file type: ') (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10215) fd: -1 arg_word: {(/dev/stderr)} ) ] ) (C {(touch)} {(.err)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:10224) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:10234) fd: -1 arg_word: {(filelist)} ) ] ) (command.Simple words: [ {(sort)} {(-k)} {(3) (Id.Lit_Comma ',') (3)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10252))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10255) fd: -1 arg_word: {($ Id.VSub_Number '$2') (.tmp)} ) ] ) ] negated: F ) (C {(rm)} {(filelist)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(.err)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:10280) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:10285) arg_word: {(1)} ) ] spids: [10271 10282] ) ] ) (command.Pipeline children: [ (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10317))} {($ Id.VSub_Number '$2') (.tmp)} ) (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10337))} ) (C {(sort)} {(-s)} {(-u)} {(-k)} {(2) (Id.Lit_Comma ',') (2)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10358))} ) (C {(join)} {(-1)} {(2)} {(-2)} {(3)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10377))} {(-)} {($ Id.VSub_Number '$2') (.tmp)} ) (C {(awk)} {(-F)} { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\|' span_id:10392) ) } {(-v)} {(Id.Lit_VarLike 'OFS=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\|' span_id:10397) ) } { (SQ (Token id:Id.Lit_Chars val:'{\n' span_id:10402) (Token id: Id.Lit_Chars val: '\t\t if (($2 == $3) || ($4 == "-"))\n' span_id: 10403 ) (Token id:Id.Lit_Chars val:'\t\t\tprint $3,$4,$5,$6,$7,$8,$9,""\n' span_id:10404) (Token id: Id.Lit_Chars val: '\t\t else\n' span_id: 10405 ) (Token id:Id.Lit_Chars val:'\t\t\tprint $3,$4,$5,$6,$7,$8,$9,$2\n' span_id:10406) (Token id:Id.Lit_Chars val:'\t\t}' span_id:10407) ) } ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10415) fd: -1 arg_word: {($ Id.VSub_Number '$2')} ) ] ) ] negated: F ) (C {(rm)} {($ Id.VSub_Number '$2') (.tmp)}) (C {(echo)} {(DQ (done.))}) ] ) ) (command.ShFunction name: fetch_filter_mergechanges body: (command.BraceGroup children: [ (command.ForEach iter_name: F iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Pipeline children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name MERGECHANGES)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {(${ Id.VSub_Name F)}) ] ) ) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10520))} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10528) fd: -1 arg_word: {(${ Id.VSub_Name F) (-values)} ) ] ) ] negated: F ) ] ) ) (command.Pipeline children: [ (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (-values)} {($ Id.VSub_Number '$2') (-values)} ) (C {(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|f|' span_id:10564))}) (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10579))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10582) fd: -1 arg_word: {($ Id.VSub_Number '$2') (-paths)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:10609) cond: [ (command.Sentence child: (C {(read)} {(X)}) terminator: (Token id:Id.Op_Semi val:';' span_id:10614) ) ] body: (command.DoGroup children: [ (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name X) ('|'))} {($ Id.VSub_Number '$1') (-values)}) (C {(head)} {(-1)}) ] negated: F ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:10641) fd: -1 arg_word: {($ Id.VSub_Number '$2') (-paths)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10646) fd: -1 arg_word: {($ Id.VSub_Number '$3')} ) ] ) (C {(rm)} {($ Id.VSub_Number '$1') (-values)} {($ Id.VSub_Number '$2') (-values)} {($ Id.VSub_Number '$2') (-paths)} ) ] ) ) (command.ShFunction name: fetch_filter_unmodified_notpresent body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name UPDATEIFUNMODIFIED)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$1')}) (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$3')}) ] ) ) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10773))} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10781) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-values)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name UPDATEIFUNMODIFIED)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {($ Id.VSub_Number '$2')}) ] ) ) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10838))} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10846) fd: -1 arg_word: {($ Id.VSub_Number '$2') (-values)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (-values)} {($ Id.VSub_Number '$2') (-values)} ) (command.Simple words: [ {(sort)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10883))} {(-k)} {(1) (Id.Lit_Comma ',') (1)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10892) fd: -1 arg_word: {(mlines.tmp)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10906))} {($ Id.VSub_Number '$4')} ) (C {(sort)}) (C {(join)} {(-v)} {(2)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10928))} {(-)} {(mlines.tmp)} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:10940) fd: -1 arg_word: {(mlines)} ) ] ) ] negated: F ) (C {(rm)} {($ Id.VSub_Number '$1') (-values)} {($ Id.VSub_Number '$2') (-values)} {(mlines.tmp)} ) (command.Pipeline children: [ (C {(comm)} {(-13)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:10989))} ) (command.Simple words: [{(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|-|' span_id:10998))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:11001) fd: -1 arg_word: {(mlines)} ) ] ) ] negated: F ) (command.ForEach iter_name: X iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$3')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [ {(sort)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11032))} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(${ Id.VSub_Name X)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11045) fd: -1 arg_word: {(${ Id.VSub_Name X) (.tmp)} ) ] ) (command.Pipeline children: [ (command.Simple words: [ {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11062))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11065) fd: -1 arg_word: {(mlines)} ) ] ) (C {(sort)}) (C {(join)} {(-v)} {(2)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11086))} {(-)} {(${ Id.VSub_Name X) (.tmp)} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11101) fd: -1 arg_word: {(${ Id.VSub_Name X)} ) ] ) ] negated: F ) (C {(rm)} {(${ Id.VSub_Name X) (.tmp)}) ] ) ) (command.Pipeline children: [ (C {(fgrep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:'|-|' span_id:11129))} {(mlines)}) (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11146))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11149) fd: -1 arg_word: {(modifiedfiles)} ) ] ) ] negated: F ) (C {(rm)} {(mlines)}) ] ) ) (command.ShFunction name: fetch_filter_allowadd body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.Simple words: [ {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11189))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11192) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (C {(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|-' span_id:11202))}) (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11217))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11220) fd: -1 arg_word: {(filesnotpresent)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ALLOWADD)} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (yes))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:11242) ) ] action: [ (command.Pipeline children: [ (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11249) fd: -1 arg_word: {($ Id.VSub_Number '$2')} ) ] ) (C {(join)} {(-v)} {(1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11265))} {(-)} {(filesnotpresent)} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11277) fd: -1 arg_word: {($ Id.VSub_Number '$2') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$2') (.tmp)} {($ Id.VSub_Number '$2')}) ] spids: [11226 11244] ) ] ) (command.Pipeline children: [ (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11297) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (C {(join)} {(-v)} {(1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11313))} {(-)} {(filesnotpresent)} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11325) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) (C {(rm)} {(filesnotpresent)}) ] ) ) (command.ShFunction name: fetch_filter_allowdelete body: (command.BraceGroup children: [ (command.ForEach iter_name: X iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Pipeline children: [ (command.Simple words: [ {(cut)} {(-f)} {(1-2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11387))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11390) fd: -1 arg_word: {(${ Id.VSub_Name X)} ) ] ) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11403) fd: -1 arg_word: {(${ Id.VSub_Name X) (.nodes)} ) ] ) ] negated: F ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name ALLOWDELETE)} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (yes))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:11435) ) ] action: [ (command.Simple words: [ {(comm)} {(-23)} {($ Id.VSub_Number '$1') (.nodes)} {($ Id.VSub_Number '$2') (.nodes)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11450) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.badnodes)} ) ] ) ] spids: [11419 11437] ) ] else_action: [ (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11461) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.badnodes)} ) ] ) ] ) (command.Pipeline children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:11475) cond: [ (command.Sentence child: (C {(read)} {(X)}) terminator: (Token id:Id.Op_Semi val:';' span_id:11480) ) ] body: (command.DoGroup children: [ (C {(look)} {(DQ (${ Id.VSub_Name X) ('|'))} {($ Id.VSub_Number '$1')}) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11499) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.badnodes)} ) ] ) (command.Simple words: [{(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$1')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11515) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) (C {(rm)} {($ Id.VSub_Number '$1') (.badnodes)} {($ Id.VSub_Number '$1') (.nodes)} {($ Id.VSub_Number '$2') (.nodes)} ) ] ) ) (command.ShFunction name: fetch_filter_modified_metadata body: (command.BraceGroup children: [ (command.ForEach iter_name: X iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple words: [ {(cut)} {(-f)} {(1-6)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11588))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11591) fd: -1 arg_word: {(${ Id.VSub_Name X)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11597) fd: -1 arg_word: {(${ Id.VSub_Name X) (.metadata)} ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name KEEPMODIFIEDMETADATA)} {(Id.Lit_Equals '=')} {(DQ (yes))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:11628) ) ] action: [ (command.Simple words: [ {(comm)} {(-13)} {($ Id.VSub_Number '$1') (.metadata)} {($ Id.VSub_Number '$2') (.metadata)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11643) fd: -1 arg_word: {(keepmeta)} ) ] ) ] spids: [11613 11630] ) ] else_action: [ (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11653) fd: -1 arg_word: {(keepmeta)} ) ] ) ] ) (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11672) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.remove)} ) ] ) (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11680) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.add)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:11686) cond: [ (command.Sentence child: (C {(read)} {(LINE)}) terminator: (Token id:Id.Op_Semi val:';' span_id:11691) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NODE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:11697) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name LINE))}) (C {(cut)} {(-f)} {(1-2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11719))} ) ] negated: F ) ] ) ) } spids: [11696] ) ] ) (command.Simple words: [{(look)} {(DQ (${ Id.VSub_Name NODE) ('|'))} {($ Id.VSub_Number '$3')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:11735) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.remove)} ) ] ) (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name NODE) ('|'))} {($ Id.VSub_Number '$3')}) (C {(cut)} {(-f)} {(7-)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11764))} ) (command.Simple words: [{(lam)} {(-s)} {(DQ (${ Id.VSub_Name LINE) ('|'))} {(-)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:11783) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.add)} ) ] ) ] negated: F ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11791) fd: -1 arg_word: {(keepmeta)} ) ] ) (command.Pipeline children: [ (C {(sort)} {($ Id.VSub_Number '$3') (.remove)}) (C {(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$3')}) (command.Simple words: [{(sort)} {(-u)} {(-)} {($ Id.VSub_Number '$3') (.add)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11829) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$3') (.tmp)} {($ Id.VSub_Number '$3')}) (C {(rm)} {(keepmeta)} {($ Id.VSub_Number '$1') (.metadata)} {($ Id.VSub_Number '$2') (.metadata)} {($ Id.VSub_Number '$3') (.add)} {($ Id.VSub_Number '$3') (.remove)} ) ] ) ) (command.ShFunction name: fetch_filter_uptodate body: (command.BraceGroup children: [ (command.Simple words: [{(comm)} {(-23)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11885) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) (command.Simple words: [{(comm)} {(-13)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:11899) fd: -1 arg_word: {($ Id.VSub_Number '$2') (.tmp)} ) ] ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) (C {(mv)} {($ Id.VSub_Number '$2') (.tmp)} {($ Id.VSub_Number '$2')}) ] ) ) (command.ShFunction name: fetch_files_premerge body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:11948) ) ] action: [ (C {(echo)} {(-n)} {(DQ ('Fetching files from ') (${ Id.VSub_Name OLDRELNUM) (' for merging... '))} ) (command.Pipeline children: [ (command.Simple words: [{(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|f|' span_id:11978))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:11981) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (C {(cut)} {(-f)} {(3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:11997))}) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12007) fd: -1 arg_word: {(files.wanted)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:12017) cond: [ (command.Sentence child: (C {(read)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:12022) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:12044) ) ] action: [ (command.Sentence child: (C {(echo)} {(${ Id.VSub_Name Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:12054) ) ] spids: [12027 12046] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12062) fd: -1 arg_word: {(files.wanted)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12066) fd: -1 arg_word: {(filelist)} ) ] ) (command.Pipeline children: [ (command.Simple words: [ {(lam)} {(-s)} {(DQ (${ Id.VSub_Name OLDFETCHDIR) (/f/))} {(-)} {(-s)} {(DQ (.gz))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12095) fd: -1 arg_word: {(filelist)} ) ] ) (command.Simple words: [ {(xargs)} {(${ Id.VSub_Name XARGST)} {(${ Id.VSub_Name PHTTPGET)} {(${ Id.VSub_Name SERVERNAME)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:12118) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:12129) cond: [ (command.Sentence child: (C {(read)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:12134) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name Y) (.gz)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:12153) ) ] action: [ (C {(echo)} {(DQ (failed.))}) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 12165 ) arg_word: {(1)} ) ] spids: [12139 12155] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 12177 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id: Id.Redir_Less val: '<' span_id: 12185 ) fd: -1 arg_word: {(${ Id.VSub_Name Y) (.gz)} ) ] ) (C {(${ Id.VSub_Name SHA256)} {(-q)}) ] negated: F ) ] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:12209) ) ] action: [ (C {(mv)} {(${ Id.VSub_Name Y) (.gz)} {(files/) (${ Id.VSub_Name Y) (.gz)} ) ] spids: [12173 12211] ) ] else_action: [ (C {(echo)} {(DQ (${ Id.VSub_Name Y) (' has incorrect hash.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:12241) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12251) fd: -1 arg_word: {(filelist)} ) ] ) (C {(echo)} {(DQ (done.))}) (C {(rm)} {(filelist)} {(files.wanted)}) ] spids: [11939 11950] ) ] ) ] ) ) (command.ShFunction name: fetch_files_prepare body: (command.BraceGroup children: [ (C {(echo)} {(-n)} {(DQ ('Preparing to download files... '))}) (command.ForEach iter_name: X iter_words: [{($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$3')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Pipeline children: [ (command.Simple words: [ {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12344))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12347) fd: -1 arg_word: {(${ Id.VSub_Name X)} ) ] ) (C {(fgrep)} {(SQ (Token id:Id.Lit_Chars val:'|f|' span_id:12359))}) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12376))} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12384) fd: -1 arg_word: {(${ Id.VSub_Name X) (.hashes)} ) ] ) ] negated: F ) ] ) ) (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12409))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12412) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.hashes)} ) ] ) (C {(sort)} {(-u)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:12427) cond: [ (command.Sentence child: (C {(read)} {(HASH)}) terminator: (Token id:Id.Op_Semi val:';' span_id:12432) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(files/) (${ Id.VSub_Name HASH) (.gz)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:12452) ) ] action: [(C {(echo)} {(${ Id.VSub_Name HASH)})] spids: [12437 12454] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12469) fd: -1 arg_word: {(files.wanted)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(comm)} {(-12)} {($ Id.VSub_Number '$1') (.hashes)} {($ Id.VSub_Number '$2') (.hashes)} ) (command.Simple words: [ {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12503))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12506) fd: -1 arg_word: {(unmodified.files)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:12524) cond: [ (command.Sentence child: (C {(read)} {(LINE)}) terminator: (Token id:Id.Op_Semi val:';' span_id:12529) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:F) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:12535) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name LINE))}) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12557))} ) ] negated: F ) ] ) ) } spids: [12534] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:12563) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ (${ Id.VSub_Name LINE))}) (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12585))} ) ] negated: F ) ] ) ) } spids: [12562] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(files/) (${ Id.VSub_Name HASH) (.gz)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:12608) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:12613) ) ] spids: [12595 12610] ) ] ) (C {(cp)} {(DQ (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F))} {(tmpfile)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:12643) command_list: (command.CommandList children: [(C {(sha256)} {(-q)} {(tmpfile)})] ) ) } {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(${ Id.VSub_Name HASH)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:12661) ) ] action: [ (C {(echo)}) (C {(echo)} { (DQ ('File changed while FreeBSD Update running: ') (${ Id.VSub_Name F) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:12679) arg_word: {(1)} ) ] spids: [12639 12663] ) ] ) (command.Simple words: [{(gzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12696) fd: -1 arg_word: {(tmpfile)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12700) fd: -1 arg_word: {(files/) (${ Id.VSub_Name HASH) (.gz)} ) ] ) (C {(rm)} {(tmpfile)}) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12716) fd: -1 arg_word: {($ Id.VSub_Number '$2') (.hashes)} ) ] ) (command.Pipeline children: [ (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12738))} {($ Id.VSub_Number '$3') (.hashes)} ) (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12752))} {(-o)} {(2.2) (Id.Lit_Comma ',') (1.2)} {(-)} {(unmodified.files)} ) (command.Simple words: [{(fetch_make_patchlist)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:12770) fd: -1 arg_word: {(patchlist)} ) ] ) ] negated: F ) (C {(rm)} {(unmodified.files)} {($ Id.VSub_Number '$1') (.hashes)} {($ Id.VSub_Number '$2') (.hashes)} {($ Id.VSub_Number '$3') (.hashes)} ) (C {(rm)} {($ Id.VSub_Number '$1')}) (C {(echo)} {(DQ (done.))}) ] ) ) (command.ShFunction name: fetch_files body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(patchlist)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:12842) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Fetching ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:12853) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12860) fd: -1 arg_word: {(patchlist)} ) ] ) (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:12871))} ) ] negated: F ) ] ) ) (' ') ) } ) (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ (patches.) (${ Id.VSub_Name DDSTATS))}) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12895))} {(SQ (Token id:Id.Lit_Chars val:- span_id:12899))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12902) fd: -1 arg_word: {(patchlist)} ) ] ) (C {(lam)} {(-s)} {(DQ (${ Id.VSub_Name PATCHDIR) (/))} {(-)}) (command.Simple words: [ {(xargs)} {(${ Id.VSub_Name XARGST)} {(${ Id.VSub_Name PHTTPGET)} {(${ Id.VSub_Name SERVERNAME)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:12941) fd: 2 arg_word: {(${ Id.VSub_Name STATSREDIR)} ) ] ) (C {(fetch_progress)}) ] negated: F ) (C {(echo)} {(DQ (done.))}) (C {(echo)} {(-n)} {(DQ ('Applying patches... '))}) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:12975))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:12979))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:12982) fd: -1 arg_word: {(patchlist)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:12989) cond: [ (command.Sentence child: (C {(read)} {(X)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:12996) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:13020) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 13024 ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:13025) ) ] spids: [13001 13022] ) ] ) (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13034) fd: -1 arg_word: {(files/) (${ Id.VSub_Name X) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13042) fd: -1 arg_word: {(OLD)} ) ] ) (C {(bspatch)} {(OLD)} {(NEW)} {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y)} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 13068 ) command_list: (command.CommandList children: [ (C {(${ Id.VSub_Name SHA256)} {(-q)} {(NEW)}) ] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:13087) ) ] action: [ (C {(mv)} {(NEW)} {(files/) (${ Id.VSub_Name Y)}) (C {(gzip)} {(-n)} {(files/) (${ Id.VSub_Name Y)}) ] spids: [13064 13089] ) ] ) (C {(rm)} {(-f)} {(diff)} {(OLD)} {(NEW)} {(${ Id.VSub_Name X) (-) (${ Id.VSub_Name Y)} ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:13136) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) ] negated: F ) (C {(echo)} {(DQ (done.))}) ] spids: [12833 12844] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:13157) cond: [ (command.Sentence child: (C {(read)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:13162) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-f)} {(DQ (files/) (${ Id.VSub_Name Y) (.gz))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:13184) ) ] action: [ (command.Sentence child: (C {(echo)} {(${ Id.VSub_Name Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:13194) ) ] spids: [13167 13186] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13202) fd: -1 arg_word: {(files.wanted)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13206) fd: -1 arg_word: {(filelist)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(filelist)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:13221) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Fetching ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:13232) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13239) fd: -1 arg_word: {(filelist)} ) ] ) (C {(tr)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:13250))} ) ] negated: F ) ] ) ) (' ') ) } ) (C {(echo)} {(${ Id.VSub_Name NDEBUG)} {(DQ ('files... '))}) (command.Pipeline children: [ (command.Simple words: [ {(lam)} {(-s)} {(DQ (${ Id.VSub_Name FETCHDIR) (/f/))} {(-)} {(-s)} {(DQ (.gz))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13287) fd: -1 arg_word: {(filelist)} ) ] ) (command.Simple words: [ {(xargs)} {(${ Id.VSub_Name XARGST)} {(${ Id.VSub_Name PHTTPGET)} {(${ Id.VSub_Name SERVERNAME)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:13310) fd: 2 arg_word: {(${ Id.VSub_Name QUIETREDIR)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:13317) cond: [ (command.Sentence child: (C {(read)} {(Y)}) terminator: (Token id:Id.Op_Semi val:';' span_id:13322) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name Y) (.gz)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:13341) ) ] action: [ (C {(echo)} {(DQ (failed.))}) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 13353 ) arg_word: {(1)} ) ] spids: [13327 13343] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 13365 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id: Id.Redir_Less val: '<' span_id: 13373 ) fd: -1 arg_word: {(${ Id.VSub_Name Y) (.gz)} ) ] ) (C {(${ Id.VSub_Name SHA256)} {(-q)}) ] negated: F ) ] ) ) } {(Id.Lit_Equals '=')} {(${ Id.VSub_Name Y)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:13397) ) ] action: [ (C {(mv)} {(${ Id.VSub_Name Y) (.gz)} {(files/) (${ Id.VSub_Name Y) (.gz)} ) ] spids: [13361 13399] ) ] else_action: [ (C {(echo)} {(DQ (${ Id.VSub_Name Y) (' has incorrect hash.'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:13429) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13439) fd: -1 arg_word: {(filelist)} ) ] ) (C {(echo)} {(DQ (done.))}) ] spids: [13212 13223] ) ] ) (C {(rm)} {(files.wanted)} {(filelist)} {(patchlist)}) ] ) ) (command.ShFunction name: fetch_create_manifest body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-L)} {(DQ (${ Id.VSub_Name BDHASH) (-install))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:13502) ) ] action: [ (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-install/)}) (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install)}) ] spids: [13488 13504] ) ] ) (command.Pipeline children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(modifiedfiles)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:13542) ) ] action: [ (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('The following files are affected by updates, '))}) (C {(echo)} {(DQ ('but no changes have'))}) (C {(echo)} {(-n)} {(DQ ('been downloaded because the files have been '))}) (C {(echo)} {(DQ ('modified locally:'))}) (C {(cat)} {(modifiedfiles)}) ] spids: [13533 13544] ) ] ) (C {($ Id.VSub_DollarName '$PAGER')}) ] negated: F ) (C {(rm)} {(modifiedfiles)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-PRESENT)} {(Id.Lit_RBracket ']')} ) ] negated: T ) (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-NEW)} {(Id.Lit_RBracket ']')}) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:13628) ) ] action: [ (C {(rm)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('No updates needed to update system to '))}) (C {(echo)} {(DQ (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (.))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:13666) ) ] spids: [13604 13630] ) ] ) (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:13690))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13693) fd: -1 arg_word: {(INDEX-PRESENT)} ) ] ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13702) fd: -1 arg_word: {(INDEX-PRESENT.flist)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:13716))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:13719) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13728) fd: -1 arg_word: {(INDEX-NEW.flist)} ) ] ) ] negated: F ) (command.Simple words: [{(comm)} {(-23)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13741) fd: -1 arg_word: {(files.removed)} ) ] ) (command.Simple words: [{(comm)} {(-13)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13754) fd: -1 arg_word: {(files.added)} ) ] ) (command.Simple words: [{(comm)} {(-12)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:13767) fd: -1 arg_word: {(files.updated)} ) ] ) (C {(rm)} {(INDEX-PRESENT.flist)} {(INDEX-NEW.flist)}) (command.Pipeline children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(files.removed)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:13793) ) ] action: [ (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('The following files will be removed '))}) (C {(echo)} { (DQ ('as part of updating to ') (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (':') ) } ) (C {(cat)} {(files.removed)}) ] spids: [13784 13795] ) ] ) (C {($ Id.VSub_DollarName '$PAGER')}) ] negated: F ) (C {(rm)} {(files.removed)}) (command.Pipeline children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(files.added)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:13856) ) ] action: [ (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('The following files will be added '))}) (C {(echo)} { (DQ ('as part of updating to ') (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (':') ) } ) (C {(cat)} {(files.added)}) ] spids: [13847 13858] ) ] ) (C {($ Id.VSub_DollarName '$PAGER')}) ] negated: F ) (C {(rm)} {(files.added)}) (command.Pipeline children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(files.updated)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:13919) ) ] action: [ (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('The following files will be updated '))}) (C {(echo)} { (DQ ('as part of updating to ') (${ Id.VSub_Name RELNUM) (-p) (${ Id.VSub_Name RELPATCHNUM) (':') ) } ) (C {(cat)} {(files.updated)}) ] spids: [13910 13921] ) ] ) (C {($ Id.VSub_DollarName '$PAGER')}) ] negated: F ) (C {(rm)} {(files.updated)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MDIR) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:13975) command_list: (command.CommandList children: [(C {(mktemp)} {(-d)} {(install.XXXXXX)})] ) ) } spids: [13974] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:13987) arg_word: {(1)} ) ] ) (C {(mv)} {(INDEX-PRESENT)} {(${ Id.VSub_Name MDIR) (/INDEX-OLD)}) (C {(mv)} {(INDEX-NEW)} {(${ Id.VSub_Name MDIR) (/INDEX-NEW)}) (C {(ln)} {(-s)} {(${ Id.VSub_Name MDIR)} {(${ Id.VSub_Name BDHASH) (-install)}) ] ) ) (command.ShFunction name: fetch_warn_eol body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NOWTIME) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14054) command_list: (command.CommandList children:[(C {(date)} {(DQ ('+%s'))})]) ) } spids: [14053] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(lasteolwarn)} {(Id.Lit_RBracket ']')}) terminator: (Token id:Id.Op_Semi val:';' span_id:14079) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LASTWARN) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14085) command_list: (command.CommandList children: [(C {(cat)} {(lasteolwarn)})] ) ) } spids: [14084] ) ] ) ] spids: [14070 14081] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LASTWARN) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14098) command_list: (command.CommandList children: [(C {(expr)} {(${ Id.VSub_Name NOWTIME)} {(-)} {(63072000)})] ) ) } spids: [14097] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name EOLTIME)} {(-lt)} {(${ Id.VSub_Name NOWTIME)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14136) ) ] action: [ (C {(echo)}) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:14146) fd: -1 here_begin: {(EOF)} here_end_span_id: 14173 stdin_parts: [ ('WARNING: ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14150) command_list: (command.CommandList children:[(C {(uname)} {(-sr)})]) ) (' HAS PASSED ITS END-OF-LIFE DATE.\n') ('Any security issues discovered after ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14159) command_list: (command.CommandList children: [(C {(date)} {(-r)} {(${ Id.VSub_Name EOLTIME)})] ) ) ('\n') ('will not have been corrected.\n') ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14175) arg_word: {(1)} ) ] spids: [14121 14138] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SINCEWARN) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14193) command_list: (command.CommandList children: [ (C {(expr)} {(${ Id.VSub_Name NOWTIME)} {(-)} {(${ Id.VSub_Name LASTWARN)}) ] ) ) } spids: [14192] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TIMELEFT) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14211) command_list: (command.CommandList children: [ (C {(expr)} {(${ Id.VSub_Name EOLTIME)} {(-)} {(${ Id.VSub_Name NOWTIME)}) ] ) ) } spids: [14210] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-gt)} {(7884000)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14246) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14251) arg_word: {(0)} ) ] spids: [14233 14248] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-gt)} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14278) command_list: (command.CommandList children: [ (C {(expr)} {(${ Id.VSub_Name SINCEWARN)} { (word_part.EscapedLiteral token: (Token id: Id.Lit_EscapedChar val: '\\*' span_id: 14289 ) ) } {(3)} ) ] ) ) } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14295) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14300) arg_word: {(0)} ) ] spids: [14268 14297] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-lt)} {(604800)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14326) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UNIT) op: assign_op.Equal rhs: {(DQ (day))} spids: [14331] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SIZE) op: assign_op.Equal rhs: {(86400)} spids: [14337] ) ] ) ] spids: [14313 14328] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TIMELEFT)} {(-lt)} {(2678400)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14354) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UNIT) op: assign_op.Equal rhs: {(DQ (week))} spids: [14359] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SIZE) op: assign_op.Equal rhs: {(604800)} spids: [14365] ) ] ) ] spids: [14341 14356] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UNIT) op: assign_op.Equal rhs: {(DQ (month))} spids: [14372] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SIZE) op: assign_op.Equal rhs: {(2678400)} spids: [14378] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NUM) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14391) command_list: (command.CommandList children: [ (C {(expr)} {(${ Id.VSub_Name TIMELEFT)} {(/)} {(${ Id.VSub_Name SIZE)}) ] ) ) } spids: [14390] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name NUM)} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(1)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14422) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:UNIT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name UNIT) (s))} spids: [14427] ) ] ) ] spids: [14408 14424] ) ] ) (C {(echo)}) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:14449) fd: -1 here_begin: {(EOF)} here_end_span_id: 14472 stdin_parts: [ ('WARNING: ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:14453) command_list: (command.CommandList children:[(C {(uname)} {(-sr)})]) ) (' is approaching its End-of-Life date.\n') ('It is strongly recommended that you upgrade to a newer\n') ('release within the next ') (${ Id.VSub_Name NUM) (' ') (${ Id.VSub_Name UNIT) ('.\n') ] ) ] ) (command.Simple words: [{(echo)} {(${ Id.VSub_Name NOWTIME)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:14485) fd: -1 arg_word: {(lasteolwarn)} ) ] ) ] ) ) (command.ShFunction name: fetch_run body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(workdir_init)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14507) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {(fetch_pick_server_init)}) (C {(fetch_pick_server)})] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:14529) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_key)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:14534) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14543) arg_word: {(1)} ) ] ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:14560) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:14565) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14574) arg_word: {(1)} ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_tagsanity)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14586) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata)} {(INDEX-NEW)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14604) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14628) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14639) arg_word: {(1)} ) ] ) (C {(fetch_filter_kernel_names)} {(INDEX-NEW)} {(${ Id.VSub_Name KERNCONF)}) (C {(fetch_filter_kernel_names)} {(INDEX-OLD)} {(${ Id.VSub_Name KERNCONF)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_inspect_system)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14686) arg_word: {(1)} ) ] ) (C {(fetch_filter_unmodified_notpresent)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)} {(/dev/null)} ) (C {(fetch_filter_allowadd)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_filter_allowdelete)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_filter_modified_metadata)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_filter_uptodate)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_files_prepare)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14826) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_files)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14840) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_create_manifest)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14858) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_warn_eol)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14872) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: upgrade_guess_components body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name STRICTCOMPONENTS))} {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:14910) ) ] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata_components)} {($ Id.VSub_Number '$1')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:14929) arg_word: {(1)} ) ] ) (C {(echo)} {(-n)} {(DQ ('Inspecting system... '))}) (command.Pipeline children: [ (command.Simple words: [ {(cut)} {(-f)} {(1-3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:14966))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:14969) fd: -1 arg_word: {(INDEX-ALL)} ) ] ) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:14979))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:14983))} ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:14989) cond: [ (command.Sentence child: (C {(read)} {(C)} {(S)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:14998) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-e)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:15018) ) ] action: [ (C {(echo)} {(DQ ('+ ') (${ Id.VSub_Name C) ('|') (${ Id.VSub_Name S))} ) ] spids: [15003 15020] ) ] ) (C {(echo)} {(DQ ('= ') (${ Id.VSub_Name C) ('|') (${ Id.VSub_Name S))}) ] ) ) (C {(sort)}) (C {(uniq)} {(-c)}) (command.Simple words: [ {(sed)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'s,^ +,,' span_id:15076))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15079) fd: -1 arg_word: {(compfreq)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(SQ (Token id:Id.Lit_Chars val:' = ' span_id:15087))} {(compfreq)}) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15106))} ) (command.Simple words: [ {(sort)} {(-k)} {(2) (Id.Lit_Comma ',') (2)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15123))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15126) fd: -1 arg_word: {(compfreq.total)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(SQ (Token id:Id.Lit_Chars val:' + ' span_id:15134))} {(compfreq)}) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (3)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15153))} ) (command.Simple words: [ {(sort)} {(-k)} {(2) (Id.Lit_Comma ',') (2)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15170))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15173) fd: -1 arg_word: {(compfreq.present)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15183))} {(-1)} {(2)} {(-2)} {(2)} {(compfreq.present)} {(compfreq.total)} ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:15201) cond: [ (command.Sentence child: (C {(read)} {(S)} {(P)} {(T)}) terminator: (Token id:Id.Op_Semi val:';' span_id:15210) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name P)} {(-gt)} { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 15225 ) command_list: (command.CommandList children: [ (C {(expr)} {(${ Id.VSub_Name T)} {(/)} {(2)}) ] ) ) } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:15240) ) ] action: [(C {(echo)} {(${ Id.VSub_Name S)})] spids: [15215 15242] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15257) fd: -1 arg_word: {(comp.present)} ) ] ) ] negated: F ) (command.Simple words: [ {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:15271))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15274) fd: -1 arg_word: {(compfreq.total)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15278) fd: -1 arg_word: {(comp.total)} ) ] ) (C {(rm)} {(INDEX-ALL)} {(compfreq)} {(compfreq.total)} {(compfreq.present)}) (C {(echo)} {(DQ (done.))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KCOMP) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:15344) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(${ Id.VSub_Name KERNCONF)}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:A-Z span_id:15358))} {(SQ (Token id:Id.Lit_Chars val:a-z span_id:15362))} ) ] negated: F ) ] ) ) } spids: [15343] ) ] ) (command.Simple words: [ {(grep)} {(-E)} { (DQ ('^kernel') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name KCOMP) (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:15378) ) ) } {(comp.total)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:15383) fd: -1 arg_word: {(comp.present)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(grep)} {(-qE)} {(DQ ('^kernel') (Id.Lit_Other '\\') ('|'))} {(comp.total)} ) (command.Pipeline children: [ (C {(grep)} {(-qE)} { (DQ ('^kernel') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name KCOMP) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:15419)) ) } {(comp.total)} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:15423) ) ] action: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:15430) fd: -1 here_begin: {(EOF)} here_end_span_id: 15454 stdin_parts: [ ('\n') ('WARNING: This system is running a ') (Id.Right_DoubleQuote '"') (${ Id.VSub_Name KCOMP) (Id.Right_DoubleQuote '"') (' kernel, which is not a\n') ('kernel configuration distributed as part of FreeBSD ') (${ Id.VSub_Name RELNUM) ('.\n') ( 'This kernel will not be updated: you MUST update the kernel manually\n' ) ('before running ') (Id.Right_DoubleQuote '"') ($ Id.VSub_Number '$0') (' install') (Id.Right_DoubleQuote '"') ('.\n') ] ) ] ) ] spids: [15389 15425] ) ] ) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15472) fd: -1 arg_word: {(comp.present)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15476) fd: -1 arg_word: {(comp.present.tmp)} ) ] ) (C {(mv)} {(comp.present.tmp)} {(comp.present)}) (command.Simple words: [{(comm)} {(-13)} {(comp.present)} {(comp.total)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15496) fd: -1 arg_word: {(comp.absent)} ) ] ) (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('The following components of FreeBSD '))}) (C {(echo)} {(DQ ('seem to be installed:'))}) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15536))} {(SQ (Token id:Id.Lit_Chars val:/ span_id:15540))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15543) fd: -1 arg_word: {(comp.present)} ) ] ) (C {(fmt)} {(-72)}) ] negated: F ) (C {(echo)}) (C {(echo)} {(-n)} {(DQ ('The following components of FreeBSD '))}) (C {(echo)} {(DQ ('do not seem to be installed:'))}) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15577))} {(SQ (Token id:Id.Lit_Chars val:/ span_id:15581))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15584) fd: -1 arg_word: {(comp.absent)} ) ] ) (C {(fmt)} {(-72)}) ] negated: F ) (C {(echo)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(continuep)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:15603) arg_word: {(1)} ) ] ) (C {(echo)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENTS) op: assign_op.Equal rhs: {(DQ )} spids: [15624] ) ] ) (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15632))} {(SQ (Token id:Id.Lit_Chars val:/ span_id:15636))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15639) fd: -1 arg_word: {(comp.present)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15643) fd: -1 arg_word: {(comp.present.tmp)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:15648) cond: [ (command.Sentence child: (C {(read)} {(C)}) terminator: (Token id:Id.Op_Semi val:';' span_id:15653) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENTS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name COMPONENTS) (' ') (${ Id.VSub_Name C))} spids: [15658] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15672) fd: -1 arg_word: {(comp.present.tmp)} ) ] ) (C {(rm)} {(comp.present)} {(comp.present.tmp)} {(comp.absent)} {(comp.total)}) ] spids: [14893 14912] ) ] ) ] ) ) (command.ShFunction name: upgrade_guess_new_kernel body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name STRICTCOMPONENTS))} {(Id.Lit_Equals '=')} {(DQ (no))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:15735) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:METAHASH) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:15745) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(look)} {(DQ ($ Id.VSub_Number '$1') ('|'))} {(tINDEX.present)} ) (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15768))} ) ] negated: F ) ] ) ) } spids: [15744] ) ] ) (command.Simple words: [{(gunzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15777) fd: -1 arg_word: {(files/) (${ Id.VSub_Name METAHASH) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15785) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.all)} ) ] ) (command.ForEach iter_name: C iter_words: [{(${ Id.VSub_Name COMPONENTS)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name C)} {(Id.Lit_Equals '=')} {(DQ (kernel/) (${ Id.VSub_Name KCOMP))} {(Id.Lit_RBracket ']')} ) (command.Pipeline children: [ (C {(grep)} {(-qE)} { (DQ ('^kernel') (Id.Lit_Other '\\') ('|') (${ Id.VSub_Name KCOMP) (Id.Lit_Other '\\') ('|') ) } {($ Id.VSub_Number '$1') (.all)} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:15855) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMPONENTS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name COMPONENTS) (' kernel/generic'))} spids: [15860] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NKERNCONF) op: assign_op.Equal rhs: {(DQ (GENERIC))} spids: [15869] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:15877) fd: -1 here_begin: {(EOF)} here_end_span_id: 15904 stdin_parts: [ ('\n') ('WARNING: This system is running a ') (Id.Right_DoubleQuote '"') (${ Id.VSub_Name KCOMP) (Id.Right_DoubleQuote '"') (' kernel, which is not a\n') ('kernel configuration distributed as part of FreeBSD ') (${ Id.VSub_Name RELNUM) ('.\n') ('As part of upgrading to FreeBSD ') (${ Id.VSub_Name RELNUM) (', this kernel will be\n') ('replaced with a ') (Id.Right_DoubleQuote '"') (generic) (Id.Right_DoubleQuote '"') (' kernel.\n') ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(continuep)}) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 15910 ) arg_word: {(1)} ) ] ) ] spids: [15814 15857] ) ] ) ] ) ) (C {(rm)} {($ Id.VSub_Number '$1') (.all)}) ] spids: [15718 15737] ) ] ) ] ) ) (command.ShFunction name: upgrade_oldall_to_oldnew body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15968))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:15971) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:15982) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.paths)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:15997))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16000) fd: -1 arg_word: {($ Id.VSub_Number '$2')} ) ] ) (C {(sort)} {(-u)}) (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (.paths)} {(-)}) (C {(lam)} {(-)} {(-s)} {(DQ ('|-||||||'))}) (command.Simple words: [{(sort)} {(-)} {($ Id.VSub_Number '$1')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16045) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) (command.Simple words: [{(comm)} {(-23)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16072) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.tmp)} ) ] ) (C {(mv)} {($ Id.VSub_Number '$1') (.tmp)} {($ Id.VSub_Number '$1')}) (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16108))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16111) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16122) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.paths)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.Simple words: [ {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16139))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16142) fd: -1 arg_word: {($ Id.VSub_Number '$2')} ) ] ) (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16154))} {(-)} {($ Id.VSub_Number '$1') (.paths)} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16167) fd: -1 arg_word: {($ Id.VSub_Number '$2') (.tmp)} ) ] ) ] negated: F ) (C {(rm)} {($ Id.VSub_Number '$1') (.paths)}) (C {(mv)} {($ Id.VSub_Number '$2') (.tmp)} {($ Id.VSub_Number '$2')}) (C {(mv)} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$3')}) ] ) ) (command.ShFunction name: samef body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:X) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:16216) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(sed)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: 's/\\$FreeBSD.*\\$/$FreeBSD$/' span_id: 16232 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16235) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (C {(${ Id.VSub_Name SHA256)}) ] negated: F ) ] ) ) } spids: [16215] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:Y) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:16248) command_list: (command.CommandList children: [ (command.Pipeline children: [ (command.Simple words: [ {(sed)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: 's/\\$FreeBSD.*\\$/$FreeBSD$/' span_id: 16264 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16267) fd: -1 arg_word: {($ Id.VSub_Number '$2')} ) ] ) (C {(${ Id.VSub_Name SHA256)}) ] negated: F ) ] ) ) } spids: [16247] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$X')} {(Id.Lit_Equals '=')} {($ Id.VSub_DollarName '$Y')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:16291) ) ] action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:16296) arg_word: {(0)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:16299) ) ] spids: [16280 16293] ) ] else_action: [ (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:16305) arg_word: {(1)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:16308) ) ] ) ] ) ) (command.ShFunction name: upgrade_merge body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:16343) ) ] action: [ (command.Pipeline children: [ (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16357))} {($ Id.VSub_Number '$1')} ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16367) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) ] ) ] negated: F ) (C {(rm)} {(-rf)} {(merge/)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:16385) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:16390) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:D) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:16396) command_list: (command.CommandList children: [(C {(dirname)} {(${ Id.VSub_Name F)})] ) ) } spids: [16395] ) ] ) (C {(mkdir)} {(-p)} {(merge/old/) (${ Id.VSub_Name D)}) (C {(mkdir)} {(-p)} {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name D)} ) (C {(mkdir)} {(-p)} {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name D)} ) (C {(mkdir)} {(-p)} {(merge/new/) (${ Id.VSub_Name D)}) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16457) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:16468) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:16473) ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:V) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:16483) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$2')} ) (C {(cut)} {(-f)} {(7)} {(-d)} { (SQ (Token id: Id.Lit_Chars val: '|' span_id: 16508 ) ) } ) ] negated: F ) ] ) ) } spids: [16482] ) ] ) (command.Simple words: [{(gunzip)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16515) fd: -1 arg_word: {(files/) (${ Id.VSub_Name V) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16523) fd: -1 arg_word: {(merge/old/) (${ Id.VSub_Name F)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$1')} ) (C {(fgrep)} {(-q)} {(DQ ('|f|'))}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:16558) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:V) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 16564 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$1')} ) (C {(cut)} {(-f)} {(3)} {(-d)} { (SQ (Token id: Id.Lit_Chars val: '|' span_id: 16589 ) ) } ) ] negated: F ) ] ) ) } spids: [16563] ) ] ) (command.Simple words: [{(gunzip)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16596) fd: -1 arg_word: {(files/) (${ Id.VSub_Name V) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16606) fd: -1 arg_word: {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F) } ) ] ) ] spids: [16536 16560] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$3')} ) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:16654))} ) (C {(fgrep)} {(-q)} {(DQ ('|f|'))}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:16667) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:V) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 16673 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$3')} ) (C {(cut)} {(-f)} {(7)} {(-d)} { (SQ (Token id: Id.Lit_Chars val: '|' span_id: 16698 ) ) } ) ] negated: F ) ] ) ) } spids: [16672] ) ] ) (command.Simple words: [{(gunzip)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16705) fd: -1 arg_word: {(files/) (${ Id.VSub_Name V) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16715) fd: -1 arg_word: {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F)} ) ] ) ] spids: [16626 16669] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:16732) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) ] ) (C {(echo)} {(-n)} {(DQ ('Attempting to automatically merge '))}) (C {(echo)} {(-n)} {(DQ ('changes in files...'))}) (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:16763) fd: -1 arg_word: {(failed.merges)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:16768) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:16773) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F) } {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:16808) ) ] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 16813 ) ) ] spids: [16790 16810] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F) } {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:16850) ) ] action: [ (C {(cp)} {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 16872 ) ) ] spids: [16832 16852] ) ] ) (command.Case to_match: {(${ Id.VSub_Name F)} arms: [ (case_arm pat_list: [{(/etc/spwd.db)} {(/etc/pwd.db)} {(/etc/login.conf.db)}] action: [ (C {(cp)} {(merge/old/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)} ) ] spids: [16892 16901 16925 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [ {(merge)} {(-p)} {(-L)} {(DQ ('current version'))} {(-L)} {(DQ (${ Id.VSub_Name OLDRELNUM))} {(-L)} {(DQ (${ Id.VSub_Name RELNUM))} {(merge/old/) (${ Id.VSub_Name F)} {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F) } {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F) } ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '>' span_id: 16995 ) fd: -1 arg_word: {(merge/new/) (${ Id.VSub_Name F)} ) (redir.Redir op: (Token id: Id.Redir_Great val: '2>' span_id: 17002 ) fd: 2 arg_word: {(/dev/null)} ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:17004) ) ] action: [ (command.Simple words: [{(echo)} {(${ Id.VSub_Name F)}] redirects: [ (redir.Redir op: (Token id: Id.Redir_DGreat val: '>>' span_id: 17015 ) fd: -1 arg_word: {(failed.merges)} ) ] ) ] spids: [16932 17006] ) ] ) ] spids: [16928 16929 17023 -1] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17031) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) ] ) (C {(echo)} {(DQ (' done.'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17049) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:17054) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(samef)} {(merge/old/) (${ Id.VSub_Name F)} {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:17088) ) ] action: [ (C {(cp)} {(merge/) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 17110 ) ) ] spids: [17071 17090] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:17119) fd: -1 here_begin: {(EOF)} here_end_span_id: 17135 stdin_parts: [ ('\n') ('The following file could not be merged automatically: ') (${ Id.VSub_Name F) ('\n') ('Press Enter to edit this file in ') (${ Id.VSub_Name EDITOR) (' and resolve the conflicts\n') ('manually...\n') ] ) ] ) (command.Simple words: [{(read)} {(dummy)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17141) fd: -1 arg_word: {(/dev/tty)} ) ] ) (command.Simple words: [ {(${ Id.VSub_Name EDITOR)} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:17149) command_list: (command.CommandList children:[(C {(pwd)})]) ) (/merge/new/) (${ Id.VSub_Name F) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17159) fd: -1 arg_word: {(/dev/tty)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17166) fd: -1 arg_word: {(failed.merges)} ) ] ) (C {(rm)} {(failed.merges)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17185) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:17190) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/old/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/new/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) (C {(samef)} {(merge/old/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:17243) ) ] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 17248 ) ) ] spids: [17203 17245] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/old/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F) } {(Id.Lit_RBracket ']')} ) (C {(samef)} {(merge/old/) (${ Id.VSub_Name F)} {(merge/) (${ Id.VSub_Name OLDRELNUM) (/) (${ Id.VSub_Name F) } ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:17312) ) ] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 17317 ) ) ] spids: [17263 17314] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/new/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:17342) ) ] action: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:17349) fd: -1 here_begin: {(EOF)} here_end_span_id: 17364 stdin_parts: [ ('\n') ( 'The following file will be removed, as it no longer exists in\n' ) ('FreeBSD ') (${ Id.VSub_Name RELNUM) (': ') (${ Id.VSub_Name F) ('\n') ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(continuep)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17368) fd: -1 arg_word: {(/dev/tty)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 17374 ) arg_word: {(1)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 17379 ) ) ] spids: [17328 17344] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:17392) fd: -1 here_begin: {(EOF)} here_end_span_id: 17411 stdin_parts: [ ('\n') ('The following changes, which occurred between FreeBSD ') (${ Id.VSub_Name OLDRELNUM) (' and\n') ('FreeBSD ') (${ Id.VSub_Name RELNUM) (' have been merged into ') (${ Id.VSub_Name F) (':\n') ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(diff)} {(-U)} {(5)} {(-L)} {(DQ ('current version'))} {(-L)} {(DQ ('new version'))} {(merge/old/) (${ Id.VSub_Name F)} {(merge/new/) (${ Id.VSub_Name F)} ) (C {(true)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(continuep)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17450) fd: -1 arg_word: {(/dev/tty)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17456) arg_word: {(1)} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17463) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17474) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:17479) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(merge/new/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:17496) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:V) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 17502 ) command_list: (command.CommandList children: [ (C {(${ Id.VSub_Name SHA256)} {(-q)} {(merge/new/) (${ Id.VSub_Name F)} ) ] ) ) } spids: [17501] ) ] ) (command.Simple words: [{(gzip)} {(-c)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17523) fd: -1 arg_word: {(merge/new/) (${ Id.VSub_Name F)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:17530) fd: -1 arg_word: {(files/) (${ Id.VSub_Name V) (.gz)} ) ] ) (C {(echo)} {(DQ (${ Id.VSub_Name F) ('|') (${ Id.VSub_Name V))}) ] spids: [17484 17498] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17557) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:17562) fd: -1 arg_word: {(newhashes)} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17576) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:17581) ) ] body: (command.DoGroup children: [ (C {(look)} {(DQ (${ Id.VSub_Name F) ('|'))} {($ Id.VSub_Number '$3')}) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:17600) fd: -1 arg_word: {($ Id.VSub_Number '$1') (-paths)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:17605) fd: -1 arg_word: {($ Id.VSub_Number '$3') (-oldlines)} ) ] ) (command.Simple words: [ {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:17621))} {(-o)} {(1.1) (Id.Lit_Comma ',') (1.2) (Id.Lit_Comma ',') (1.3) (Id.Lit_Comma ',') (1.4) (Id.Lit_Comma ',') (1.5) (Id.Lit_Comma ',') (1.6) (Id.Lit_Comma ',') (2.2) (Id.Lit_Comma ',') (1.8) } {($ Id.VSub_Number '$3') (-oldlines)} {(newhashes)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:17649) fd: -1 arg_word: {($ Id.VSub_Number '$3') (-newlines)} ) ] ) (command.Pipeline children: [ (C {(sort)} {($ Id.VSub_Number '$3') (-oldlines)}) (C {(comm)} {(-13)} {(-)} {($ Id.VSub_Number '$3')}) (command.Simple words: [{(sort)} {(-)} {($ Id.VSub_Number '$3') (-newlines)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:17686) fd: -1 arg_word: {($ Id.VSub_Number '$3') (.tmp)} ) ] ) ] negated: F ) (C {(mv)} {($ Id.VSub_Number '$3') (.tmp)} {($ Id.VSub_Number '$3')}) (C {(rm)} {($ Id.VSub_Number '$1') (-paths)} {(newhashes)} {($ Id.VSub_Number '$3') (-oldlines)} {($ Id.VSub_Number '$3') (-newlines)} ) (C {(rm)} {(-rf)} {(merge/)}) ] spids: [16334 16345] ) ] ) (C {(rm)} {($ Id.VSub_Number '$1')}) ] ) ) (command.ShFunction name: upgrade_run body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(workdir_init)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17756) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {(fetch_pick_server_init)}) (C {(fetch_pick_server)})] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17778) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_key)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:17783) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17792) arg_word: {(1)} ) ] ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17810) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:17815) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17824) arg_word: {(1)} ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_tagsanity)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17836) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata)} {(INDEX-OLD)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17854) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(upgrade_guess_components)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17874) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17894) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17905) arg_word: {(1)} ) ] ) (command.Simple words: [{(sort)} {(INDEX-OLD)} {(INDEX-ALL)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:17921) fd: -1 arg_word: {(INDEX-OLD.tmp)} ) ] ) (C {(mv)} {(INDEX-OLD.tmp)} {(INDEX-OLD)}) (C {(rm)} {(INDEX-ALL)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OLDRELNUM) op: assign_op.Equal rhs: {(${ Id.VSub_Name RELNUM)} spids: [17943] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RELNUM) op: assign_op.Equal rhs: {(${ Id.VSub_Name TARGETRELEASE)} spids: [17949] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OLDFETCHDIR) op: assign_op.Equal rhs: {(${ Id.VSub_Name FETCHDIR)} spids: [17955] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FETCHDIR) op: assign_op.Equal rhs: {(${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH)} spids: [17961] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:17980) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:17985) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:17994) arg_word: {(1)} ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18013) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(upgrade_guess_new_kernel)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18041) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18061) arg_word: {(1)} ) ] ) (C {(upgrade_oldall_to_oldnew)} {(INDEX-OLD)} {(INDEX-ALL)} {(INDEX-NEW)}) (C {(fetch_filter_kernel_names)} {(INDEX-NEW)} {(${ Id.VSub_Name NKERNCONF)}) (C {(fetch_filter_kernel_names)} {(INDEX-OLD)} {(${ Id.VSub_Name KERNCONF)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_inspect_system)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18126) arg_word: {(1)} ) ] ) (C {(fetch_filter_mergechanges)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(tomerge-old)}) (C {(fetch_filter_unmodified_notpresent)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)} {(tomerge-old)} ) (C {(fetch_filter_allowadd)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_filter_allowdelete)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_filter_modified_metadata)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_filter_uptodate)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (C {(fetch_files_premerge)} {(tomerge-old)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_files_prepare)} {(INDEX-OLD)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18294) arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATCHDIR) op: assign_op.Equal rhs: {(to-) (${ Id.VSub_Name RELNUM) (/) (${ Id.VSub_Name ARCH) (/bp)} spids: [18304] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_files)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18320) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(upgrade_merge)} {(tomerge-old)} {(INDEX-PRESENT)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18340) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_create_manifest)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18358) arg_word: {(1)} ) ] ) (C {(touch)} {(${ Id.VSub_Name BDHASH) (-install/kernelfirst)}) (C {(echo)} { (DQ ('To install the downloaded upgrades, run ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:18393) ) ($ Id.VSub_Number '$0') (' install') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:18396) ) (.) ) } ) ] ) ) (command.ShFunction name: install_verify body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(cat)} {($ Id.VSub_At '$@')}) (C {(cut)} {(-f)} {(2) (Id.Lit_Comma ',') (7)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:18439))} ) (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^f' span_id:18450))}) (C {(cut)} {(-f)} {(2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:18465))}) (command.Simple words: [{(sort)} {(-u)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:18475) fd: -1 arg_word: {(filelist)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:18485) cond: [ (command.Sentence child: (C {(read)} {(HASH)}) terminator: (Token id:Id.Op_Semi val:';' span_id:18490) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(files/) (${ Id.VSub_Name HASH) (.gz)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:18510) ) ] action: [ (C {(echo)} {(-n)} {(DQ ('Update files missing -- '))}) (C {(echo)} {(DQ ('this should never happen.'))}) (C {(echo)} {(DQ ("Re-run '") ($ Id.VSub_Number '$0') (" fetch'."))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18540) arg_word: {(1)} ) ] spids: [18495 18512] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:18550) fd: -1 arg_word: {(filelist)} ) ] ) (C {(rm)} {(filelist)}) ] ) ) (command.ShFunction name: install_unschg body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(cat)} {($ Id.VSub_At '$@')}) (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:18598))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:18601) fd: -1 arg_word: {(filelist)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:18611) cond: [ (command.Sentence child: (C {(read)} {(F)}) terminator: (Token id:Id.Op_Semi val:';' span_id:18616) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-e)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:18638) ) ] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 18643 ) ) ] spids: [18621 18640] ) ] else_action: [ (C {(echo)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name F)}) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:18665) fd: -1 arg_word: {(filelist)} ) ] ) (C {(xargs)} {(chflags)} {(noschg)}) ] negated: F ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18679) arg_word: {(1)} ) ] ) (C {(rm)} {(filelist)}) ] ) ) (command.ShFunction name: backup_kernel_finddir body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CNT) op: assign_op.Equal rhs: {(0)} spids: [18707] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:18711) cond: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:18715) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-e)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:18741) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18746) arg_word: {(0)} ) ] spids: [18728 18743] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') } {(-a)} {(-e)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') (/.freebsd-update) } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:18785) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18790) arg_word: {(0)} ) ] spids: [18763 18787] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CNT) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:CNT span_id:18809) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [18807] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$CNT')} {(-gt)} {(9)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:18829) ) ] action: [ (C {(echo)} { (DQ ('Could not find valid backup dir (') ($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') (')') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:18845) arg_word: {(1)} ) ] spids: [18818 18831] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNELDIR) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:18855) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_DollarName '$BACKUPKERNELDIR')}) (C {(sed)} {(-Ee)} { (SQ (Token id: Id.Lit_Chars val: 's/[0-9]$//' span_id: 18871 ) ) } ) ] negated: F ) ] ) ) ) } spids: [18853] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BACKUPKERNELDIR) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BACKUPKERNELDIR) (${ Id.VSub_Name CNT))} spids: [18877] ) ] ) ] ) ) ] ) ) (command.ShFunction name: backup_kernel body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$BACKUPKERNEL')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(yes)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:18938) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:18943) arg_word: {(0)} ) ] spids: [18926 18940] ) ] ) (C {(backup_kernel_finddir)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-d)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') } {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:18983) ) ] action: [ (C {(rm)} {(-fr)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR')} ) ] spids: [18972 18985] ) ] ) (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR')} ) (command.Pipeline children: [ (C {(mtree)} {(-cdn)} {(-p)} {(DQ (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name KERNELDIR))} ) (command.Simple words: [ {(mtree)} {(-Ue)} {(-p)} {(DQ (${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name BACKUPKERNELDIR))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:19050) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: F ) (C {(touch)} {($ Id.VSub_DollarName '$BASEDIR') (/) ($ Id.VSub_DollarName '$BACKUPKERNELDIR') (/.freebsd-update) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-ne)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:19079) ) ] action: [ (C {(echo)} {(DQ ('Could not create kernel backup directory'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:19091) arg_word: {(1)} ) ] spids: [19068 19081] ) ] ) (C {(Id.KW_Set set)} {(-f)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$BACKUPKERNELSYMBOLFILES')} {(Id.Lit_Equals '=')} {(yes)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:19129) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FINDFILTER) op: assign_op.Equal rhs: {(DQ )} spids: [19134] ) ] ) ] spids: [19118 19131] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FINDFILTER) op: assign_op.Equal rhs: {(DQ ('-a ! -name *.debug -a ! -name *.symbols'))} spids: [19142] ) ] ) ] ) (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(cd)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name KERNELDIR)}) (C {(find)} {(.)} {(-type)} {(f)} {($ Id.VSub_DollarName '$FINDFILTER')} {(-exec)} {(cp)} {(-pl)} {(SQ (Token id:Id.Lit_Chars val:'{}' span_id:19188))} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name BACKUPKERNELDIR) (/) (SQ (Token id:Id.Lit_Chars val:'{}' span_id:19200)) } {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\;' span_id:19203))} ) ] ) ] ) ) (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (f)}) ] ) ) (command.ShFunction name: install_from_index body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19250))} {($ Id.VSub_Number '$1')} ) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19261))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:19265))} ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:19271) cond: [ (command.Sentence child: (C {(read)} {(FPATH)} {(TYPE)} {(OWNER)} {(GROUP)} {(PERM)} {(FLAGS)} {(HASH)} {(LINK)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:19290) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(${ Id.VSub_Name TYPE)} arms: [ (case_arm pat_list: [{(d)}] action: [ (C {(install)} {(-d)} {(-o)} {(${ Id.VSub_Name OWNER)} {(-g)} {(${ Id.VSub_Name GROUP)} {(-m)} {(${ Id.VSub_Name PERM)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)} ) ] spids: [19304 19305 19345 -1] ) (case_arm pat_list: [{(f)}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ (${ Id.VSub_Name LINK))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:19365) ) ] action: [ (command.Simple words: [{(gunzip)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:19376) fd: -1 arg_word: {(files/) (${ Id.VSub_Name HASH) (.gz)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:19384) fd: -1 arg_word: {(${ Id.VSub_Name HASH)} ) ] ) (C {(install)} {(-S)} {(-o)} {(${ Id.VSub_Name OWNER)} {(-g)} {(${ Id.VSub_Name GROUP)} {(-m)} {(${ Id.VSub_Name PERM)} {(${ Id.VSub_Name HASH)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)} ) (C {(rm)} {(${ Id.VSub_Name HASH)}) ] spids: [19352 19367] ) ] else_action: [ (C {(ln)} {(-f)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name LINK)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)} ) ] ) ] spids: [19348 19349 19466 -1] ) (case_arm pat_list: [{(L)}] action: [ (C {(ln)} {(-sfh)} {(${ Id.VSub_Name HASH)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)} ) ] spids: [19469 19470 19494 -1] ) ] ) ] ) ) ] negated: F ) (command.Pipeline children: [ (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19511))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:19515))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:19518) fd: -1 arg_word: {($ Id.VSub_Number '$1')} ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:19525) cond: [ (command.Sentence child: (C {(read)} {(FPATH)} {(TYPE)} {(OWNER)} {(GROUP)} {(PERM)} {(FLAGS)} {(HASH)} {(LINK)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:19544) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name TYPE)} {(Id.Lit_Equals '=')} {(DQ (f))} {(Id.Lit_RBracket ']')} ) (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name FLAGS)} {(Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:19583) ) ] action: [ (C {(chflags)} {(${ Id.VSub_Name FLAGS)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)} ) ] spids: [19549 19585] ) ] ) ] ) ) ] negated: F ) ] ) ) (command.ShFunction name: install_delete body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.Simple words: [{(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19635))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:19638) fd: -1 arg_word: {($ Id.VSub_Number '$2')} ) ] ) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:19647) fd: -1 arg_word: {(newfiles)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19668))} {($ Id.VSub_Number '$1')} ) (C {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19681))} {(-v)} {(1)} {(-)} {(newfiles)} ) (C {(sort)} {(-r)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19708))} ) (C {(cut)} {(-f)} {(1) (Id.Lit_Comma ',') (2)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19725))} ) (command.Simple words: [ {(tr)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:19734))} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:19738))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:19741) fd: -1 arg_word: {(killfiles)} ) ] ) ] negated: F ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:19751) cond: [ (command.Sentence child: (C {(read)} {(FPATH)} {(TYPE)}) terminator: (Token id:Id.Op_Semi val:';' span_id:19758) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(${ Id.VSub_Name TYPE)} arms: [ (case_arm pat_list: [{(d)}] action: [ (C {(rmdir)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)}) ] spids: [19772 19773 19787 -1] ) (case_arm pat_list: [{(f)}] action: [(C {(rm)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)})] spids: [19790 19791 19805 -1] ) (case_arm pat_list: [{(L)}] action: [(C {(rm)} {(${ Id.VSub_Name BASEDIR) (/) (${ Id.VSub_Name FPATH)})] spids: [19808 19809 19823 -1] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:19831) fd: -1 arg_word: {(killfiles)} ) ] ) (C {(rm)} {(newfiles)} {(killfiles)}) ] ) ) (command.ShFunction name: install_files body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_Number '$1') (/kerneldone)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:19877) ) ] action: [ (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:19887))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:19893) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:19903))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:19909) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(backup_kernel)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:19923) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:19939) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:19957) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-OLD)} {(-o)} {(-s)} {(INDEX-NEW)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:19982) ) ] action: [ (command.Simple words: [{(kldxref)} {(-R)} {(${ Id.VSub_Name BASEDIR) (/boot/)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:19996) fd: 2 arg_word: {(/dev/null)} ) ] ) ] spids: [19967 19984] ) ] ) (C {(touch)} {($ Id.VSub_Number '$1') (/kerneldone)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_Number '$1') (/kernelfirst)} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-OLD)} {(-o)} {(-s)} {(INDEX-NEW)} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:20046) ) ] action: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:20053) fd: -1 here_begin: {(EOF)} here_end_span_id: 20064 stdin_parts: [ ('\n') ('Kernel updates have been installed. Please reboot and run\n') (Id.Right_DoubleQuote '"') ($ Id.VSub_Number '$0') (' install') (Id.Right_DoubleQuote '"') (' again to finish installing updates.\n') ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:20066) arg_word: {(0)} ) ] spids: [20019 20048] ) ] ) ] spids: [19865 19879] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_Number '$1') (/worlddone)} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:20094) ) ] action: [ (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20108))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20122))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20125) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20136) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20151))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20165))} ) (command.Simple words: [ {(grep)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|' span_id: 20176 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20179) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20190) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20205))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20219))} ) (C {(grep)} {(-vE)} { (SQ (Token id: Id.Lit_Chars val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|' span_id: 20230 ) ) } ) (command.Simple words: [ {(grep)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20241 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20244) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20255) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20270))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20284))} ) (C {(grep)} {(-vE)} { (SQ (Token id: Id.Lit_Chars val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|' span_id: 20295 ) ) } ) (command.Simple words: [ {(grep)} {(-vE)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20306 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20309) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20319))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20333))} ) (C {(grep)} {(-vE)} { (SQ (Token id: Id.Lit_Chars val: '^/libexec/ld-elf[^|]*\\.so\\.[0-9]+\\|' span_id: 20344 ) ) } ) (command.Simple words: [ {(grep)} {(-vE)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20355 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20358) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20369) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20382) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name BASEDIR) (/etc/master.passwd)} {(-nt)} {(${ Id.VSub_Name BASEDIR) (/etc/spwd.db)} {(Id.Lit_RBracket ']')} ) (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name BASEDIR) (/etc/master.passwd)} {(-nt)} {(${ Id.VSub_Name BASEDIR) (/etc/pwd.db)} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:20428) ) ] action: [ (C {(pwd_mkdb)} {(-d)} {(${ Id.VSub_Name BASEDIR) (/etc)} {(${ Id.VSub_Name BASEDIR) (/etc/master.passwd)} ) ] spids: [20392 20430] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name BASEDIR) (/etc/login.conf)} {(-nt)} {(${ Id.VSub_Name BASEDIR) (/etc/login.conf.db)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:20473) ) ] action: [(C {(cap_mkdb)} {(${ Id.VSub_Name BASEDIR) (/etc/login.conf)})] spids: [20456 20475] ) ] ) (C {(touch)} {($ Id.VSub_Number '$1') (/worlddone)}) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20514))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (C {(grep)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20528 ) ) } ) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:20543))}) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20551) fd: -1 arg_word: {(newfiles)} ) ] ) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20563))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (C {(grep)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20577 ) ) } ) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:20592))} ) (C {(sort)}) (C {(join)} {(-v)} {(1)} {(-)} {(newfiles)}) (C {(grep)} {(-q)} {(.)}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:20621) ) ] action: [ (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:20628) fd: -1 here_begin: {(EOF)} here_end_span_id: 20642 stdin_parts: [ ('\n') ( 'Completing this upgrade requires removing old shared object files.\n' ) ( 'Please rebuild all installed 3rd party software (e.g., programs\n' ) ('installed from the ports tree) and then run ') (Id.Right_DoubleQuote '"') ($ Id.VSub_Number '$0') (' install') (Id.Right_DoubleQuote '"') ('\n') ('again to finish installing updates.\n') ] ) ] ) (C {(rm)} {(newfiles)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:20649) arg_word: {(0)} ) ] spids: [20556 20623] ) ] ) (C {(rm)} {(newfiles)}) ] spids: [20082 20096] ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20675))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20689))}) (command.Simple words: [ {(grep)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20700 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20703) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20713))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20727))}) (command.Simple words: [ {(grep)} {(-E)} { (SQ (Token id: Id.Lit_Chars val: '^[^|]*/lib/[^|]*\\.so\\.[0-9]+\\|' span_id: 20738 ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20741) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20754) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20769))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20783))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20786) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:20796))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^[^|]+\\|d\\|' span_id:20810))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:20813) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-OLD)} {(INDEX-NEW)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:20826) arg_word: {(1)} ) ] ) (C {(rm)} {(INDEX-OLD)} {(INDEX-NEW)}) ] ) ) (command.ShFunction name: install_setup_rollback body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-install/kernelfirst)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:20880) ) ] action: [ (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install/kernelfirst)}) (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install/kerneldone)}) ] spids: [20868 20882] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(${ Id.VSub_Name BDHASH) (-install/worlddone)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:20916) ) ] action: [(C {(rm)} {(${ Id.VSub_Name BDHASH) (-install/worlddone)})] spids: [20904 20918] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-rollback)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:20945) ) ] action: [ (C {(mv)} {(${ Id.VSub_Name BDHASH) (-rollback)} {(${ Id.VSub_Name BDHASH) (-install/rollback)} ) ] spids: [20933 20947] ) ] ) (C {(mv)} {(${ Id.VSub_Name BDHASH) (-install)} {(${ Id.VSub_Name BDHASH) (-rollback)}) ] ) ) (command.ShFunction name: install_run body: (command.BraceGroup children: [ (C {(echo)} {(-n)} {(DQ ('Installing updates...'))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_verify)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-OLD)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-NEW)} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21023) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_unschg)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-OLD)} {(${ Id.VSub_Name BDHASH) (-install/INDEX-NEW)} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21049) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_files)} {(${ Id.VSub_Name BDHASH) (-install)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21068) arg_word: {(1)} ) ] ) (C {(install_setup_rollback)}) (C {(echo)} {(DQ (' done.'))}) ] ) ) (command.ShFunction name: rollback_setup_rollback body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-rollback/rollback)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:21114) ) ] action: [ (C {(mv)} {(${ Id.VSub_Name BDHASH) (-rollback/rollback)} {(rollback-tmp)}) (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-rollback/)}) (C {(rm)} {(${ Id.VSub_Name BDHASH) (-rollback)}) (C {(mv)} {(rollback-tmp)} {(${ Id.VSub_Name BDHASH) (-rollback)}) ] spids: [21102 21116] ) ] else_action: [ (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-rollback/)}) (C {(rm)} {(${ Id.VSub_Name BDHASH) (-rollback)}) ] ) ] ) ) (command.ShFunction name: rollback_files body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21207))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21221))} ) (C {(cut)} {(-f)} {(1)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21236))}) (command.Simple words: [{(sort)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21244) fd: -1 arg_word: {(INDEX-NEW.libs.flist)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21254))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21268))} ) (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21285))} {(-)} ) (command.Simple words: [ {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21298))} {(-v)} {(1)} {(-)} {(INDEX-NEW.libs.flist)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21309) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21320) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21335))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (command.Simple words: [ {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21349))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21352) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21362))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (command.Simple words: [ {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21376))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21379) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21390) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-NEW)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21403) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21418))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (C {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21432))} ) (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21449))} {(-)} ) (command.Simple words: [ {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21462))} {(-)} {(INDEX-NEW.libs.flist)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21469) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21480) arg_word: {(1)} ) ] ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21495))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21509))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21512) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) ] negated: F ) (command.Pipeline children: [ (C {(grep)} {(-vE)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21522))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'/lib/.*\\.so\\.[0-9]+\\|' span_id:21536))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21539) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) ] negated: F ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-NEW)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21552) arg_word: {(1)} ) ] ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21567))} {($ Id.VSub_Number '$1') (/INDEX-OLD)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21573) fd: -1 arg_word: {(INDEX-OLD)} ) ] ) (command.Simple words: [ {(grep)} {(-E)} {(SQ (Token id:Id.Lit_Chars val:'^/boot/' span_id:21583))} {($ Id.VSub_Number '$1') (/INDEX-NEW)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21589) fd: -1 arg_word: {(INDEX-NEW)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_from_index)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21600) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_delete)} {(INDEX-NEW)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21613) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-s)} {(INDEX-OLD)} {(-o)} {(-s)} {(INDEX-NEW)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:21633) ) ] action: [ (command.Simple words: [{(kldxref)} {(-R)} {(/boot/)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:21644) fd: 2 arg_word: {(/dev/null)} ) ] ) ] spids: [21618 21635] ) ] ) (C {(rm)} {(INDEX-OLD)} {(INDEX-NEW)} {(INDEX-NEW.libs.flist)}) ] ) ) (command.ShFunction name: rollback_run body: (command.BraceGroup children: [ (C {(echo)} {(-n)} {(DQ ('Uninstalling updates...'))}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-L)} {(${ Id.VSub_Name BDHASH) (-install)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:21708) ) ] action: [ (C {(rm)} {(-r)} {(${ Id.VSub_Name BDHASH) (-install/)}) (C {(rm)} {(${ Id.VSub_Name BDHASH) (-install)}) ] spids: [21696 21710] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_verify)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-NEW)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-OLD)} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21755) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_unschg)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-NEW)} {(${ Id.VSub_Name BDHASH) (-rollback/INDEX-OLD)} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21781) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(rollback_files)} {(${ Id.VSub_Name BDHASH) (-rollback)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:21800) arg_word: {(1)} ) ] ) (C {(rollback_setup_rollback)}) (C {(echo)} {(DQ (' done.'))}) ] ) ) (command.ShFunction name: IDS_compare body: (command.BraceGroup children: [ (command.Simple words: [ {(cut)} {(-f)} {(1-5) (Id.Lit_Comma ',') (7-8)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21869))} {($ Id.VSub_Number '$1')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21874) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.noflags)} ) ] ) (command.Simple words: [ {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21891))} {($ Id.VSub_Number '$1') (.noflags)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21897) fd: -1 arg_word: {($ Id.VSub_Number '$1') (.sorted)} ) ] ) (command.Pipeline children: [ (C {(cut)} {(-f)} {(1-5) (Id.Lit_Comma ',') (7-8)} {(-d)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21914))} {($ Id.VSub_Number '$2')} ) (C {(comm)} {(-13)} {($ Id.VSub_Number '$1') (.noflags)} {(-)}) (C {(fgrep)} {(-v)} {(SQ (Token id:Id.Lit_Chars val:'|-|||||' span_id:21939))}) (C {(sort)} {(-k)} {(1) (Id.Lit_Comma ',') (1)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21956))} ) (command.Simple words: [ {(join)} {(-t)} {(SQ (Token id:Id.Lit_Chars val:'|' span_id:21967))} {($ Id.VSub_Number '$1') (.sorted)} {(-)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:21975) fd: -1 arg_word: {(INDEX-NOTMATCHING)} ) ] ) ] negated: F ) (command.Pipeline children: [ (command.ForEach iter_name: X iter_words: [{(${ Id.VSub_Name IDSIGNOREPATHS)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(grep)} {(-E)} {(DQ ('^') (${ Id.VSub_Name X))} {(INDEX-NOTMATCHING)}) ] ) ) (C {(sort)} {(-u)}) (command.Simple words: [{(comm)} {(-13)} {(-)} {(INDEX-NOTMATCHING)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:22033) fd: -1 arg_word: {(INDEX-NOTMATCHING.tmp)} ) ] ) ] negated: F ) (C {(mv)} {(INDEX-NOTMATCHING.tmp)} {(INDEX-NOTMATCHING)}) (C {(local)} {(Id.Lit_VarLike 'IFS=') (SQ (Token id:Id.Lit_Chars val:'|' span_id:22054))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:22058) cond: [ (command.Sentence child: (C {(read)} {(FPATH)} {(TYPE)} {(OWNER)} {(GROUP)} {(PERM)} {(HASH)} {(LINK)} {(P_TYPE)} {(P_OWNER)} {(P_GROUP)} {(P_PERM)} {(P_HASH)} {(P_LINK)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:22087) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_TYPE))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:22117) ) ] action: [ (C {(echo)} {(-n)} {(DQ (${ Id.VSub_Name FPATH) (' is a '))}) (command.Case to_match: {(DQ (${ Id.VSub_Name P_TYPE))} arms: [ (case_arm pat_list: [{(f)}] action: [(C {(echo)} {(-n)} {(DQ ('regular file, '))})] spids: [22145 22146 22157 -1] ) (case_arm pat_list: [{(d)}] action: [(C {(echo)} {(-n)} {(DQ ('directory, '))})] spids: [22160 22161 22172 -1] ) (case_arm pat_list: [{(L)}] action: [(C {(echo)} {(-n)} {(DQ ('symlink, '))})] spids: [22175 22176 22187 -1] ) ] ) (C {(echo)} {(-n)} {(DQ ('but should be a '))}) (command.Case to_match: {(DQ (${ Id.VSub_Name TYPE))} arms: [ (case_arm pat_list: [{(f)}] action: [(C {(echo)} {(-n)} {(DQ ('regular file.'))})] spids: [22213 22214 22225 -1] ) (case_arm pat_list: [{(d)}] action: [(C {(echo)} {(-n)} {(DQ (directory.))})] spids: [22228 22229 22240 -1] ) (case_arm pat_list: [{(L)}] action: [(C {(echo)} {(-n)} {(DQ (symlink.))})] spids: [22243 22244 22255 -1] ) ] ) (C {(echo)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:22273) ) ] spids: [22096 22119] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name OWNER))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_OWNER))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:22305) ) ] action: [ (C {(echo)} {(-n)} { (DQ (${ Id.VSub_Name FPATH) (' is owned by user id ') (${ Id.VSub_Name P_OWNER) (', ') ) } ) (C {(echo)} {(DQ ('but should be owned by user id ') (${ Id.VSub_Name OWNER) (.))} ) ] spids: [22284 22307] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name GROUP))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_GROUP))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:22366) ) ] action: [ (C {(echo)} {(-n)} { (DQ (${ Id.VSub_Name FPATH) (' is owned by group id ') (${ Id.VSub_Name P_GROUP) (', ') ) } ) (C {(echo)} {(DQ ('but should be owned by group id ') (${ Id.VSub_Name GROUP) (.))} ) ] spids: [22345 22368] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name PERM))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_PERM))} {(Id.Lit_RBracket ']')} ) ] negated: T ) (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} {(Id.Lit_Equals '=')} {(DQ (L))} {(Id.Lit_RBracket ']')} ) ] negated: T ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:22460) ) ] action: [ (C {(echo)} {(-n)} { (DQ (${ Id.VSub_Name FPATH) (' has ') (${ Id.VSub_Name P_PERM) (' permissions, ') ) } ) (C {(echo)} {(DQ ('but should have ') (${ Id.VSub_Name PERM) (' permissions.'))} ) ] spids: [22418 22462] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name HASH))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name P_HASH))} {(Id.Lit_RBracket ']')} ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:22521) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} {(Id.Lit_Equals '=')} {(DQ (L))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:22543) ) ] action: [ (C {(echo)} {(-n)} { (DQ (${ Id.VSub_Name FPATH) (' is a symlink to ') (${ Id.VSub_Name P_HASH) (', ') ) } ) (C {(echo)} { (DQ ('but should be a symlink to ') (${ Id.VSub_Name HASH) (.)) } ) ] spids: [22526 22545] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (${ Id.VSub_Name TYPE))} {(Id.Lit_Equals '=')} {(DQ (f))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:22595) ) ] action: [ (C {(echo)} {(-n)} { (DQ (${ Id.VSub_Name FPATH) (' has SHA256 hash ') (${ Id.VSub_Name P_HASH) (', ') ) } ) (C {(echo)} { (DQ ('but should have SHA256 hash ') (${ Id.VSub_Name HASH) (.)) } ) ] spids: [22578 22597] ) ] ) ] spids: [22500 22523] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:22648) fd: -1 arg_word: {(INDEX-NOTMATCHING)} ) ] ) (C {(rm)} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$1') (.noflags)} {($ Id.VSub_Number '$1') (.sorted)} {($ Id.VSub_Number '$2')} {(INDEX-NOTMATCHING)} ) ] ) ) (command.ShFunction name: IDS_run body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(workdir_init)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22690) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {(fetch_pick_server_init)}) (C {(fetch_pick_server)})] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:22712) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_key)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:22717) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22726) arg_word: {(1)} ) ] ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:22744) cond: [ (command.Sentence child: (command.Pipeline children:[(C {(fetch_tag)})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:22749) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_pick_server)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22758) arg_word: {(1)} ) ] ) ] ) ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_tagsanity)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22770) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_metadata)} {(INDEX-OLD)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22788) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-OLD)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22808) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_filter_metadata)} {(INDEX-ALL)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22819) arg_word: {(1)} ) ] ) (command.Simple words: [{(sort)} {(INDEX-OLD)} {(INDEX-ALL)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:22835) fd: -1 arg_word: {(INDEX-ALL.tmp)} ) ] ) (C {(mv)} {(INDEX-ALL.tmp)} {(INDEX-ALL)}) (C {(rm)} {(INDEX-OLD)}) (C {(fetch_filter_kernel_names)} {(INDEX-ALL)} {(${ Id.VSub_Name KERNCONF)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_inspect_system)} {(INDEX-ALL)} {(INDEX-PRESENT)} {(/dev/null)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:22881) arg_word: {(1)} ) ] ) (C {(IDS_compare)} {(INDEX-ALL)} {(INDEX-PRESENT)}) ] ) ) (command.ShFunction name: get_params body: (command.BraceGroup children: [ (C {(init_params)}) (C {(parse_cmdline)} {($ Id.VSub_At '$@')}) (C {(parse_conffile)}) (C {(default_params)}) ] ) ) (command.ShFunction name: cmd_fetch body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-t)} {(0)} {(-a)} {($ Id.VSub_DollarName '$NOTTYOK')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:22971) ) ] action: [ (C {(echo)} {(-n)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:22981) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (' fetch should not ') ) } ) (C {(echo)} {(DQ ('be run non-interactively.'))}) (C {(echo)} { (DQ ('Run ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:23003) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_Number '$0')})] ) ) (' cron instead.') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23014) arg_word: {(1)} ) ] spids: [22952 22973] ) ] ) (C {(fetch_check_params)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(fetch_run)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23029) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: cmd_cron body: (command.BraceGroup children: [ (C {(fetch_check_params)}) (C {(sleep)} { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:23061) command_list: (command.CommandList children: [(C {(jot)} {(-r)} {(1)} {(0)} {(3600)})] ) ) } ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TMPFILE) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:23078) command_list: (command.CommandList children: [(C {(mktemp)} {(/tmp/freebsd-update.XXXXXX)})] ) ) } spids: [23077] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23088) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Simple words: [{(fetch_run)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:23099) fd: -1 arg_word: {(${ Id.VSub_Name TMPFILE)} ) ] ) ] negated: T ) (command.Pipeline children: [ (C {(grep)} {(-q)} {(DQ ('No updates needed'))} {(${ Id.VSub_Name TMPFILE)} ) ] negated: T ) (C {(Id.Lit_LBracket '[')} {(${ Id.VSub_Name VERBOSELEVEL)} {(Id.Lit_Equals '=')} {(DQ (debug))} {(Id.Lit_RBracket ']')} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:23138) ) ] action: [ (command.Simple words: [ {(mail)} {(-s)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:23148) command_list: (command.CommandList children:[(C {(hostname)})]) ) (' security updates') ) } {(${ Id.VSub_Name MAILTO)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:23160) fd: -1 arg_word: {(${ Id.VSub_Name TMPFILE)} ) ] ) ] spids: [23093 23140] ) ] ) (C {(rm)} {(${ Id.VSub_Name TMPFILE)}) ] ) ) (command.ShFunction name: cmd_upgrade body: (command.BraceGroup children: [ (C {(upgrade_check_params)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(upgrade_run)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23198) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: cmd_install body: (command.BraceGroup children: [ (C {(install_check_params)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(install_run)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23223) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: cmd_rollback body: (command.BraceGroup children: [ (C {(rollback_check_params)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(rollback_run)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23248) arg_word: {(1)} ) ] ) ] ) ) (command.ShFunction name: cmd_IDS body: (command.BraceGroup children: [ (C {(IDS_check_params)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(IDS_run)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:23273) arg_word: {(1)} ) ] ) ] ) ) (C {(export)} {(Id.Lit_VarLike 'PATH=') (/sbin) (Id.Lit_Other ':') (/bin) (Id.Lit_Other ':') (/usr/sbin) (Id.Lit_Other ':') (/usr/bin) (Id.Lit_Other ':') (${ Id.VSub_Name PATH) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$PAGER'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:23317) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PAGER) op: assign_op.Equal rhs: {(/usr/bin/more)} spids: [23322] ) ] ) ] spids: [23306 23319] ) ] ) (C {(export)} {(Id.Lit_VarLike 'LC_ALL=') (C)}) (C {(get_params)} {($ Id.VSub_At '$@')}) (command.ForEach iter_name: COMMAND iter_words: [{(${ Id.VSub_Name COMMANDS)}] do_arg_iter: F body: (command.DoGroup children:[(C {(cmd_) (${ Id.VSub_Name COMMAND)})]) ) ] )