| Index: tools/win/new_analyze_warnings/retrieve_warnings.py
|
| diff --git a/tools/win/new_analyze_warnings/retrieve_warnings.py b/tools/win/new_analyze_warnings/retrieve_warnings.py
|
| index 33c5d407797406a3ad542db082c858c9fabc4e6f..7b3c75ae855536fbdbffdc4921495402c9e07ecd 100644
|
| --- a/tools/win/new_analyze_warnings/retrieve_warnings.py
|
| +++ b/tools/win/new_analyze_warnings/retrieve_warnings.py
|
| @@ -1,6 +1,7 @@
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# Copyright (c) 2017 The Chromium Authors. All rights reserved.
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
| +
|
| """
|
| This retrieves the latest warnings from the Chrome /analyze build machine, and
|
| does a diff.
|
| @@ -8,93 +9,90 @@ This script is intended to be run from retrieve_latest_warnings.bat which
|
| fills out the functionality.
|
| """
|
|
|
| -import urllib
|
| -import sys
|
| import glob
|
| import os
|
| +import subprocess
|
| +import sys
|
| +import urllib
|
|
|
| if len(sys.argv) < 2:
|
| - print "Missing build number."
|
| + print 'Missing build number.'
|
| sys.exit(10)
|
|
|
| -buildNumber = int(sys.argv[1])
|
| +build_number = int(sys.argv[1])
|
|
|
| -baseURL = "http://build.chromium.org/p/chromium.fyi/builders/" + \
|
| - "Chromium%20Windows%20Analyze/"
|
| +base_url = 'http://build.chromium.org/p/chromium.fyi/builders/' + \
|
| + 'Chromium%20Windows%20Analyze/'
|
|
|
| -print "Finding recent builds on %s" % baseURL
|
| -baseData = urllib.urlopen(baseURL).read()
|
| -recentOff = baseData.find("Recent Builds:")
|
| -buildPattern = 'success</td> <td><a href="' + \
|
| - '../../builders/Chromium%20Windows%20Analyze/builds/'
|
| +print 'Finding recent builds on %s' % base_url
|
| +base_data = urllib.urlopen(base_url).read()
|
| +recent_off = base_data.find('Recent Builds:')
|
| +build_marker = 'success</td> <td><a href="' + \
|
| + '../../builders/Chromium%20Windows%20Analyze/builds/'
|
| # For some reason I couldn't get regular expressions to work on this data.
|
| -latestBuildOff = baseData.find(buildPattern, recentOff) + len(buildPattern)
|
| -if latestBuildOff < len(buildPattern):
|
| - print "Couldn't find successful build."
|
| +latest_build_off = base_data.find(build_marker, recent_off) + len(build_marker)
|
| +if latest_build_off < len(build_marker):
|
| + print 'Couldn\'t find successful build.'
|
| sys.exit(10)
|
| -latestEndOff = baseData.find('"', latestBuildOff)
|
| -latestBuildStr = baseData[latestBuildOff:latestEndOff]
|
| -maxBuildNumber = int(latestBuildStr)
|
| -if buildNumber > maxBuildNumber:
|
| - print "Requested build number (%d) is too high. Maximum is %d." % \
|
| - (buildNumber, maxBuildNumber)
|
| +latest_end_off = base_data.find('"', latest_build_off)
|
| +latest_build_str = base_data[latest_build_off:latest_end_off]
|
| +max_build_number = int(latest_build_str)
|
| +if build_number > max_build_number:
|
| + print 'Requested build number (%d) is too high. Maximum is %d.' % \
|
| + (build_number, max_build_number)
|
| sys.exit(10)
|
| # Treat negative numbers specially
|
| if sys.argv[1][0] == '-':
|
| - buildNumber = maxBuildNumber + buildNumber
|
| - if buildNumber < 0:
|
| - buildNumber = 0
|
| - print "Retrieving build number %d of %d" % (buildNumber, maxBuildNumber)
|
| + build_number = max_build_number + build_number
|
| + if build_number < 0:
|
| + build_number = 0
|
| + print 'Retrieving build number %d of %d' % (build_number, max_build_number)
|
|
|
| # Found the last summary results in the current directory
|
| -results = glob.glob("analyze*_summary.txt")
|
| +results = glob.glob('analyze*_summary.txt')
|
| results.sort()
|
| -previous = "%04d" % (buildNumber - 1)
|
| +previous = '%04d' % (build_number - 1)
|
| if results:
|
| - possiblePrevious = results[-1][7:11]
|
| - if int(possiblePrevious) == buildNumber:
|
| + possible_previous = results[-1][7:11]
|
| + if int(possible_previous) == build_number:
|
| if len(results) > 1:
|
| previous = results[-2][7:11]
|
| else:
|
| - previous = possiblePrevious
|
| + previous = possible_previous
|
|
|
| -dataURL = baseURL + "builds/" + str(buildNumber) + "/steps/compile/logs/stdio"
|
| -revisionURL = baseURL + "builds/" + str(buildNumber)
|
| +data_descriptor = 'chromium/bb/chromium.fyi/Chromium_Windows_Analyze/' + \
|
| + '%d/+/recipes/steps/compile/0/stdout' % build_number
|
| +revision_url = base_url + 'builds/' + str(build_number)
|
|
|
| # Retrieve the revision
|
| -revisionData = urllib.urlopen(revisionURL).read()
|
| -key = "Got Revision</td><td>"
|
| -Off = revisionData.find(key) + len(key)
|
| -if Off > len(key):
|
| - revision = revisionData[Off: Off + 40]
|
| - print "Revision is '%s'" % revision
|
| - print "Environment variables can be set with set_analyze_revision.bat"
|
| - payload = "set ANALYZE_REVISION=%s\r\n" % revision
|
| - payload += "set ANALYZE_BUILD_NUMBER=%04d\r\n" % buildNumber
|
| - payload += "set ANALYZE_PREV_BUILD_NUMBER=%s\r\n" % previous
|
| - open("set_analyze_revision.bat", "wt").write(payload)
|
| +revisionData = urllib.urlopen(revision_url).read()
|
| +key = 'Got Revision</td><td>'
|
| +off = revisionData.find(key) + len(key)
|
| +if off > len(key):
|
| + revision = revisionData[off: off + 40]
|
| + print 'Revision is "%s"' % revision
|
| + print 'Environment variables can be set with set_analyze_revision.bat'
|
| + payload = 'set ANALYZE_REVISION=%s\r\n' % revision
|
| + payload += 'set ANALYZE_BUILD_NUMBER=%04d\r\n' % build_number
|
| + payload += 'set ANALYZE_PREV_BUILD_NUMBER=%s\r\n' % previous
|
| + open('set_analyze_revision.bat', 'wt').write(payload)
|
|
|
| # Retrieve the raw warning data
|
| - print "Retrieving raw build results. Please wait."
|
| - data = urllib.urlopen(dataURL).read()
|
| - if data.count("status: SUCCESS") == 0:
|
| - print "Build failed or is incomplete."
|
| - else:
|
| - # Fix up "'" and '"'
|
| - data = data.replace("'", "'").replace(""", '"')
|
| - # Fix up '<' and '>'
|
| - data = data.replace("<", "<").replace(">", ">")
|
| - # Fix up '&'
|
| - data = data.replace("&", "&")
|
| - # Fix up random spans
|
| - data = data.replace('</span><span class="stdout">', '')
|
| - # Fix up the source paths to match my local /analyze repo
|
| - if "ANALYZE_REPO" in os.environ:
|
| - sourcePath = r"e:\b\build\slave\chromium_windows_analyze\build\src"
|
| - destPath = os.path.join(os.environ["ANALYZE_REPO"], "src")
|
| - data = data.replace(sourcePath, destPath)
|
| - outputName = "analyze%04d_full.txt" % buildNumber
|
| - open(outputName, "w").write(data)
|
| - print "Done. Data is in %s" % outputName
|
| + print 'Retrieving raw build results. Please wait.'
|
| + # Results are now retrieved using logdog. Instructions on how to install the
|
| + # logdog tool can be found here:
|
| + # https://bugs.chromium.org/p/chromium/issues/detail?id=698429#c1
|
| + # In particular, from c:\src\logdog_cipd_root:
|
| + # > depot_tools\cipd init
|
| + # > depot_tools\cipd install infra/tools/luci/logdog/logdog/windows-amd64
|
| + command = r'c:\src\logdog_cipd_root\logdog.exe cat %s' % data_descriptor
|
| + data = str(subprocess.check_output(command))
|
| + if 'ANALYZE_REPO' in os.environ:
|
| + source_path = r'e:\b\build\slave\chromium_windows_analyze\build\src'
|
| + dest_path = os.path.join(os.environ['ANALYZE_REPO'], 'src')
|
| + data = data.replace(source_path, dest_path)
|
| + output_name = 'analyze%04d_full.txt' % build_number
|
| + open(output_name, 'w').write(data)
|
| + print 'Done. Data is in %s' % output_name
|
| else:
|
| - print "No revision information found!"
|
| + print 'No revision information found!'
|
|
|