(command.CommandList children: [ (C {<set>} {<-o>} {<errexit>}) (C {<set>} {<-o>} {<nounset>}) (C {<set>} {<-o>} {<pipefail>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:KUBE_ROOT) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<dirname>} {(DQ (${ Id.VSub_Name BASH_SOURCE))}) ) <'/..'> } spids: [63] ) ] ) (C {<source>} {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/hack/lib/init.sh'>)}) (C {<kube> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <golang> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <verify_go_version> } ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<which>} {<golint>}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(SQ <'Can not find golint, install with:'>)}) (C {<echo>} {(SQ <'go get -u github.com/golang/lint/golint'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [94 107] ) ] ) (C {<cd>} {(DQ (${ Id.VSub_Name KUBE_ROOT))}) (command.ShFunction name: array_contains body: (BraceGroup children: [ (command.Sentence child: (C {<local>} {<Id.Lit_VarLike 'seeking='> ($ Id.VSub_Number '$1')}) terminator: <Id.Op_Semi _> ) (C {<shift>}) (C {<local>} {<Id.Lit_VarLike 'in='> <1>}) (command.ForEach iter_name: element do_arg_iter: T body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$element'))} right: {(DQ ($ Id.VSub_DollarName '$seeking'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:in) op: assign_op.Equal rhs: {<0>} spids: [197] ) ] ) (command.ControlFlow token: <Id.ControlFlow_Break break> ) ] spids: [177 194] ) ] ) ] ) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName '$in')} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:failure_file) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name KUBE_ROOT) <'/hack/.golint_failures'>)} spids: [223] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<diff>} {<-u>} {(DQ (${ Id.VSub_Name failure_file))} { (command_sub left_token: <Id.Left_ProcSubIn '<('> child: (command.Simple words: [{<sort>} {(DQ (${ Id.VSub_Name failure_file))}] more_env: [(env_pair name:LC_ALL val:{<C>} spids:[246])] do_fork: T ) ) } ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (BraceGroup children: [ (C {<echo>}) (C {<echo>} {(DQ <'hack/.golint_failures is not in alphabetical order. Please sort it:'>)} ) (C {<echo>}) (C {<echo>} {(DQ <' LC_ALL=C sort -o hack/.golint_failures hack/.golint_failures'>)}) (C {<echo>}) ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (C {<false>}) ] spids: [231 259] ) ] ) (C {<export>} {<Id.Lit_VarLike 'IFS='> (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\n'>] multiline: F ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:all_packages) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<go>} {<list>} {<-e>} {<'./...'>}) (C {<egrep>} {<-v>} { (DQ < '/(third_party|vendor|staging/src/k8s.io/client-go/pkg|generated|clientset_generated)' > ) } ) (C {<sed>} {<-e>} {(SQ <'s|^k8s.io/kubernetes/||'>)} {<-e>} { (DQ <'s|^_'> (${ Id.VSub_Name KUBE_ROOT) <'/'> <Id.Lit_BadBackslash '\\'> <'?||'> ) } ) ] negated: F ) ) } ] ) } spids: [315] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:failing_packages) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<cat>} {($ Id.VSub_DollarName '$failure_file')}) ) } ] ) } spids: [363] ) ] ) (C {<unset>} {<IFS>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:errors) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [379] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:not_failing) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [383] ) ] ) (command.ForEach iter_name: p iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name all_packages> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:failedLint) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [ {<golint>} {(DQ ($ Id.VSub_DollarName '$p')) <'/'> <Id.Lit_Star '*'> <.go>} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } spids: [422] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<array_contains>} {(DQ ($ Id.VSub_DollarName '$p'))} { (DQ (braced_var_sub token: <Id.VSub_Name failing_packages> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:in_failing) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [455] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:in_failing) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [460] ) ] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ (${ Id.VSub_Name failedLint))} ) ) (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {(DQ (${ Id.VSub_Name in_failing))} right: {(DQ <0>)} ) ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:errors) op: assign_op.PlusEqual rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{(DQ (${ Id.VSub_Name failedLint))}] ) } spids: [500] ) ] ) ] spids: [464 497] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ (${ Id.VSub_Name failedLint))} ) ) (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {(DQ (${ Id.VSub_Name in_failing))} right: {(DQ <0>)} ) ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:not_failing) op: assign_op.PlusEqual rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{($ Id.VSub_DollarName '$p')}] ) } spids: [551] ) ] ) ] spids: [515 548] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:gone) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [567] ) ] ) (command.ForEach iter_name: p iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name failing_packages> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<array_contains>} {(DQ ($ Id.VSub_DollarName '$p'))} { (DQ (braced_var_sub token: <Id.VSub_Name all_packages> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:gone) op: assign_op.PlusEqual rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{(DQ ($ Id.VSub_DollarName '$p'))}] ) } spids: [607] ) ] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (braced_var_sub token: <Id.VSub_Name errors> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<echo>} {(SQ <'Congratulations! All Go source files have been linted.'>)})] spids: [622 641] ) ] else_action: [ (BraceGroup children: [ (C {<echo>} {(DQ <'Errors from golint:'>)}) (command.ForEach iter_name: err iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name errors> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children:[(C {<echo>} {(DQ ($ Id.VSub_DollarName '$err'))})]) ) (C {<echo>}) (C {<echo>} { (SQ < 'Please review the above warnings. You can test via "golint" and commit the result.' > ) } ) (C {<echo>} { (SQ < 'If the above warnings do not make sense, you can exempt this package from golint' > ) } ) (C {<echo>} { (SQ < 'checking by adding it to hack/.golint_failures (if your reviewer is okay with it).' > ) } ) (C {<echo>}) ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (C {<false>}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: { (braced_var_sub token: <Id.VSub_Name not_failing> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (BraceGroup children: [ (C {<echo>} { (DQ < 'Some packages in hack/.golint_failures are passing golint. Please remove them.' > ) } ) (C {<echo>}) (command.ForEach iter_name: p iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name not_failing> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [(C {<echo>} {(DQ <' '> ($ Id.VSub_DollarName '$p'))})] ) ) (C {<echo>}) ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (C {<false>}) ] spids: [730 749] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_gt left: { (braced_var_sub token: <Id.VSub_Name gone> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (BraceGroup children: [ (C {<echo>} { (DQ < 'Some packages in hack/.golint_failures do not exist anymore. Please remove them.' > ) } ) (C {<echo>}) (command.ForEach iter_name: p iter_words: [ { (DQ (braced_var_sub token: <Id.VSub_Name gone> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [(C {<echo>} {(DQ <' '> ($ Id.VSub_DollarName '$p'))})] ) ) (C {<echo>}) ] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] ) (C {<false>}) ] spids: [809 828] ) ] ) ] )