(List (Com {[LIT_CHARS set]} {[LIT_CHARS -e]}) (= scope= flags=0 words=[] bindings=[('THISDIR', {[ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub 0]]})]})]) (= scope= flags=0 words=[] bindings=[('LOGS_DIR', {[VarSub THISDIR] [LIT_CHARS /waterfall.tmp]})]) (= scope= flags=0 words=[] bindings=[('WATERFALL_PAGE', {[DQ [LIT_CHARS "http://build.chromium.org/p/chromium.memory/builders"]]})]) (= scope= flags=0 words=[] bindings=[('WATERFALL_FYI_PAGE', {[DQ [LIT_CHARS "http://build.chromium.org/p/chromium.memory.fyi/builders"]]})]) (FunctionDef download [] (If (Com {[LIT_OTHER "["]} {[DQ [ComSub (Com {[LIT_CHARS which]} {[LIT_CHARS curl]})]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ ]} {[LIT_OTHER "]"]}) (If (Pipeline! (Com {[LIT_CHARS curl]} {[LIT_CHARS -s]} {[LIT_CHARS -o]} {[DQ [VarSub 2]]} {[DQ [VarSub 1]]}) ) (List (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Failed to download '"][VarSub 1][LIT_CHARS "'... aborting"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (Com {[LIT_OTHER "["]} {[DQ [ComSub (Com {[LIT_CHARS which]} {[LIT_CHARS wget]})]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ ]} {[LIT_OTHER "]"]}) (If (Pipeline! (Com {[LIT_CHARS wget]} {[DQ [VarSub 1]]} {[LIT_CHARS -O]} {[DQ [VarSub 2]]} {[LIT_CHARS -q]}) ) (List (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Failed to download '"][VarSub 1][LIT_CHARS "'... aborting"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (ElseTrue) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Need either curl or wget to download stuff... aborting"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) (FunctionDef fetch_logs [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub LOGS_DIR]]}) (Com {[LIT_CHARS mkdir]} {[DQ [VarSub LOGS_DIR]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Fetching the list of builders..."]]}) (Com {[LIT_CHARS download]} {[VarSub 1]} {[DQ [VarSub LOGS_DIR][LIT_CHARS /builders]]}) (= scope= flags=0 words=[] bindings=[('SLAVES', {[ComSub (Pipeline (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS "]}) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS "s/.* flags=0 words=[] bindings=[('SLAVE_URL', {[VarSub 1] [LIT_CHARS /] [VarSub S]})]) (= scope= flags=0 words=[] bindings=[('SLAVE_NAME', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub S]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/%20/ /g"]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/%28/(/g"]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/%29/)/g"]]}) )]})]) (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "Fetching builds by slave '"][VarSub SLAVE_NAME][LIT_CHARS "'"]]}) (Com {[LIT_CHARS download]} {[VarSub SLAVE_URL] [LIT_OTHER "?"] [LIT_VAR_LIKE "numbuilds="] [VarSub NUMBUILDS]} {[DQ [VarSub LOGS_DIR][LIT_CHARS /slave_][VarSub S]]}) (= scope= flags=0 words=[] bindings=[('LIST_OF_BUILDS', {[ComSub (Pipeline (Com {[LIT_CHARS cat]} {[DQ [VarSub LOGS_DIR][LIT_CHARS /slave_][VarSub S]]}) (Com {[LIT_CHARS awk]} {[SQ /) { buf = (buf $0); }\n"> ]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS success][\ LIT_ESCAPED_CHAR "\\|"][LIT_CHARS failure]]}) (Com {[LIT_CHARS head]} {[LIT_CHARS -n]} {[VarSub NUMBUILDS]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS failure]]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS "failed compile"]]}) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS "s/.*"][\ LIT_ESCAPED_CHAR "\\/"][LIT_CHARS builds][\ LIT_ESCAPED_CHAR "\\/"][LIT_CHARS //]]}) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS s/][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ".*//"]]}) )]})]) (For BUILD [{[VarSub LIST_OF_BUILDS]}]) (List (= scope= flags=0 words=[] bindings=[('TMPFILE', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -t]} {[LIT_CHARS memory_waterfall.XXXXXX]})]})]) (Com {[LIT_CHARS download]} {[VarSub SLAVE_URL] [LIT_CHARS /builds/] [VarSub BUILD]} {[DQ [VarSub TMPFILE]]}) (= scope= flags=0 words=[] bindings=[('REPORT_FILE', {[DQ [VarSub LOGS_DIR][LIT_CHARS /report_][VarSub S][LIT_CHARS _][VarSub BUILD]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub REPORT_FILE]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS true]}) ) (= scope= flags=0 words=[] bindings=[('REPORT_URLS', {[ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS grep]} {[LIT_CHARS -o]} {[DQ [LIT_CHARS "[0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS "/steps/memory.*/logs/[0-9A-F]"][\ LIT_ESCAPED_CHAR "\\{"][LIT_CHARS 16][\ LIT_ESCAPED_CHAR "\\}"]]} {[DQ [VarSub TMPFILE]]}) (Com {[LIT_CHARS true]}) )]})]) (= scope= flags=0 words=[] bindings=[('FAILED_TESTS', {[ComSub (AndOr OP_OR_IF (Pipeline (Com {[LIT_CHARS grep]} {[LIT_CHARS -o]} {[DQ [LIT_CHARS "[0-9]"][\ LIT_ESCAPED_CHAR "\\+"][LIT_CHARS "/steps/memory.*/logs/[A-Za-z0-9_.]"][\ LIT_ESCAPED_CHAR "\\+"]]} {[DQ [VarSub TMPFILE]]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS "[0-9A-F]"][\ LIT_ESCAPED_CHAR "\\{"][LIT_CHARS 16][\ LIT_ESCAPED_CHAR "\\}"]]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS stdio]]}) ) (Com {[LIT_CHARS true]}) )]})]) (For REPORT [{[VarSub REPORT_URLS]}]) (List (Com {[LIT_CHARS download]} {[DQ [VarSub SLAVE_URL][LIT_CHARS /builds/][VarSub REPORT][LIT_CHARS /text]]} {[DQ [VarSub TMPFILE]]}) (Com {[LIT_CHARS echo]} {[DQ ]} < (FilenameRedirectNode filename={[DQ [VarSub TMPFILE]]} >"> 1), > ) (Pipeline (Com {[LIT_CHARS cat]} {[DQ [VarSub TMPFILE]]}) (Com {[LIT_CHARS tr]} {[LIT_CHARS -d]} {[SQ ]} < (FilenameRedirectNode filename={[DQ [VarSub REPORT_FILE]]} >"> 1), > ) ) ) ) (For FAILURE [{[VarSub FAILED_TESTS]}]) (List (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "FAILED:"]]} < (FilenameRedirectNode filename={[DQ [VarSub REPORT_FILE]]} >"> 1), > ) (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub FAILURE]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/.*"][\ LIT_ESCAPED_CHAR "\\/"][LIT_CHARS logs][\ LIT_ESCAPED_CHAR "\\/"][LIT_CHARS //]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS s/][\ LIT_ESCAPED_CHAR "\\/"][LIT_CHARS ".*//"]]} < (FilenameRedirectNode filename={[DQ [VarSub REPORT_FILE]]} >"> 1), > ) ) ) ) (Com {[LIT_CHARS rm]} {[DQ [VarSub TMPFILE]]}) (Com {[LIT_CHARS echo]} {[VarSub SLAVE_URL] [LIT_CHARS /builds/] [VarSub BUILD]} < (FilenameRedirectNode filename={[DQ [VarSub REPORT_FILE]]} >"> 1), > ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " DONE"]]}) ) ) ) ) (FunctionDef match_suppressions [] (Com {[LIT_CHARS python]} {[DQ [VarSub THISDIR][LIT_CHARS /test_suppressions.py]]} {[VarSub @]} {[DQ [VarSub LOGS_DIR][LIT_CHARS /report_]] [LIT_OTHER "*"]} more_env=[('PYTHONPATH', {[VarSub THISDIR] [LIT_CHARS /../python/google]})] ) ) (FunctionDef match_gtest_excludes [] (List (For PLATFORM [{[DQ [LIT_CHARS Linux]]}, {[DQ [LIT_CHARS "Chromium%20Mac"]]}, {[DQ [LIT_CHARS "Chromium%20OS"]]}, {[DQ [LIT_CHARS Windows]]}]) (List (Com {[LIT_CHARS echo]}) (Pipeline (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Test failures on "][VarSub PLATFORM][LIT_CHARS ":"]]}) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS "s/%20/ /"]]}) ) (Pipeline (Com {[LIT_CHARS grep]} {[LIT_CHARS -h]} {[LIT_CHARS -o]} {[DQ [LIT_CHARS "^FAILED:.*"]]} {[LIT_CHARS -R]} {[DQ [VarSub LOGS_DIR]] [LIT_CHARS /] [LIT_OTHER "*"] [VarSub PLATFORM] [LIT_OTHER "*"]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS FAILS][\ LIT_ESCAPED_CHAR "\\|"][LIT_CHARS FLAKY]]}) (Com {[LIT_CHARS sort]}) (Com {[LIT_CHARS uniq]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/^FAILED://"]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/^/ /"]]}) ) (= scope= flags=0 words=[] bindings=[('RESULT', {[VarSub PIPESTATUS]})]) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub RESULT]]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " None!"]]}) (ElseTrue) (List (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " Note: we don't check for failures already excluded locally yet"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " TODO(timurrrr): don't list tests we've already excluded locally"]]}) ) ) ) ) (Com {[LIT_CHARS echo]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Note: we don't print FAILS/FLAKY tests and 1200s-timeout failures"]]}) ) ) (FunctionDef usage [] (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "usage: "][VarSub 0][LIT_CHARS " fetch|match options\n"][LIT_CHARS "\n"][LIT_CHARS "This script can be used by waterfall sheriffs to fetch the status\n"][LIT_CHARS "of Valgrind bots on the memory waterfall and test if their local\n"][LIT_CHARS "suppressions match the reports on the waterfall.\n"][LIT_CHARS "\n"][LIT_CHARS "OPTIONS:\n"][LIT_CHARS " -h Show this message\n"][LIT_CHARS " -n N Fetch N builds from each slave.\n"][LIT_CHARS "\n"][LIT_CHARS "COMMANDS:\n"][LIT_CHARS " fetch Fetch Valgrind logs from the memory waterfall\n"][LIT_CHARS " match Test the local suppression files against the downloaded logs\n"][LIT_CHARS "\n"]]} 0), > ) ) (= scope= flags=0 words=[] bindings=[('NUMBUILDS', {[LIT_CHARS 3]})]) (= scope= flags=0 words=[] bindings=[('CMD', {[VarSub 1]})]) (If (Com {[LIT_OTHER "["]} {[VarSub #]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS shift]}) ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub CMD]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS match]]} {[LIT_OTHER "]"]}) (List (While (Com {[LIT_CHARS getopts]} {[LIT_OTHER "\u201c"] [LIT_CHARS hn] [LIT_OTHER ":"] [LIT_OTHER "\u201d"]} {[LIT_CHARS OPTION]}) (Case to_match={[VarSub OPTION]}, pat_word_list=[[{[LIT_CHARS h]}], [{[LIT_CHARS n]}], [{[LIT_OTHER "?"]}]] (List (Com {[LIT_CHARS usage]}) (Com {[LIT_CHARS exit]}) ) (= scope= flags=0 words=[] bindings=[('NUMBUILDS', {[VarSub OPTARG]})]) (List (Com {[LIT_CHARS usage]}) (Com {[LIT_CHARS exit]}) ) ) ) (Com {[LIT_CHARS shift]} {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub OPTIND]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]}) (If (Com {[LIT_OTHER "["]} {[VarSub #]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS usage]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub CMD]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS fetch]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Fetching "][VarSub NUMBUILDS][LIT_CHARS " builds"]]}) (Com {[LIT_CHARS fetch_logs]} {[VarSub WATERFALL_PAGE]}) (Com {[LIT_CHARS fetch_logs]} {[VarSub WATERFALL_FYI_PAGE]}) ) (Com {[LIT_OTHER "["]} {[DQ [VarSub CMD]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS match]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS match_suppressions]} {[VarSub @]}) (Com {[LIT_CHARS match_gtest_excludes]}) ) (Com {[LIT_OTHER "["]} {[DQ [VarSub CMD]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS blame]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[LIT_CHARS The]} {[LIT_CHARS blame]} {[LIT_CHARS command]} {[LIT_CHARS died]} {[LIT_CHARS of]} {[LIT_CHARS bitrot.]} {[LIT_CHARS If]} {[LIT_CHARS you]} {[LIT_CHARS need]} {[LIT_CHARS it] [LIT_COMMA ","]} {[LIT_CHARS please]} {[LIT_CHARS reimplement]} {[LIT_CHARS it.]}) (Com {[LIT_CHARS echo]} {[LIT_CHARS Reimplementation]} {[LIT_CHARS is]} {[LIT_CHARS blocked]} {[LIT_CHARS on]} {[LIT_CHARS http] [LIT_OTHER ":"] [LIT_CHARS //crbug.com/82688]}) ) (ElseTrue) (List (Com {[LIT_CHARS usage]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) )