Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Unified Diff: tools/bisect-perf-regression.py

Issue 256593004: [bisect] - Parse DEPS file manually if execfile fails. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/bisect-perf-regression.py
diff --git a/tools/bisect-perf-regression.py b/tools/bisect-perf-regression.py
index 6b98b4b40dcb34b7b2a7ce3f2b3f10b58fad4743..9359a67f50d2f9eb4bb882512e0c8d8296c24027 100755
--- a/tools/bisect-perf-regression.py
+++ b/tools/bisect-perf-regression.py
@@ -76,7 +76,7 @@ DEPOT_DEPS_NAME = {
"depends" : None,
"from" : ['cros', 'android-chrome'],
'viewvc': 'http://src.chromium.org/viewvc/chrome?view=revision&revision=',
- 'deps_var': None
+ 'deps_var': 'chromium_rev'
},
'webkit' : {
"src" : "src/third_party/WebKit",
@@ -1367,23 +1367,22 @@ class BisectPerformanceMetrics(object):
return bleeding_edge_revision
- def Get3rdPartyRevisionsFromCurrentRevision(self, depot, revision):
- """Parses the DEPS file to determine WebKit/v8/etc... versions.
+ def _ParseRevisionsFromDEPSFile(self, depot):
+ """Parses the local DEPS file to determine blink/skia/v8 revisions which may
+ be needed if the bisect recurses into those depots later.
+
+ Args:
+ depot: Depot being bisected.
Returns:
A dict in the format {depot:revision} if successful, otherwise None.
"""
- cwd = os.getcwd()
- self.ChangeToDepotWorkingDirectory(depot)
-
- results = {}
-
- if depot == 'chromium' or depot == 'android-chrome':
+ try:
locals = {'Var': lambda _: locals["vars"][_],
'From': lambda *args: None}
execfile(bisect_utils.FILE_DEPS_GIT, {}, locals)
-
- os.chdir(cwd)
+ locals = locals['deps']
+ results = {}
rxp = re.compile(".git@(?P<revision>[a-fA-F0-9]+)")
@@ -1394,28 +1393,65 @@ class BisectPerformanceMetrics(object):
if (DEPOT_DEPS_NAME[d]['recurse'] and
depot in DEPOT_DEPS_NAME[d]['from']):
- if (locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src']) or
- locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src_old'])):
- if locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src']):
- re_results = rxp.search(locals['deps'][DEPOT_DEPS_NAME[d]['src']])
+ if (locals.has_key(DEPOT_DEPS_NAME[d]['src']) or
+ locals.has_key(DEPOT_DEPS_NAME[d]['src_old'])):
+ if locals.has_key(DEPOT_DEPS_NAME[d]['src']):
+ re_results = rxp.search(locals[DEPOT_DEPS_NAME[d]['src']])
self.depot_cwd[d] = \
os.path.join(self.src_cwd, DEPOT_DEPS_NAME[d]['src'][4:])
- elif locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src_old']):
+ elif (DEPOT_DEPS_NAME[d].has_key('src_old') and
+ locals.has_key(DEPOT_DEPS_NAME[d]['src_old'])):
re_results = \
- rxp.search(locals['deps'][DEPOT_DEPS_NAME[d]['src_old']])
+ rxp.search(locals[DEPOT_DEPS_NAME[d]['src_old']])
self.depot_cwd[d] = \
os.path.join(self.src_cwd, DEPOT_DEPS_NAME[d]['src_old'][4:])
if re_results:
results[d] = re_results.group('revision')
else:
- print 'Couldn\'t parse revision for %s.' % d
- print
- return None
+ warning_text = ('Couldn\'t parse revision for %s while bisecting '
+ '%s' % (d, depot))
+ if not warningText in self.warnings:
+ self.warnings.append(warningText)
else:
print 'Couldn\'t find %s while parsing .DEPS.git.' % d
print
return None
+ return results
+ except ImportError:
qyearsley 2014/04/25 16:46:19 This block (line 1422 to 1439) is a bit dense, and
shatch 2014/04/25 17:17:14 Done.
+ # We'll parse the "vars" section of the DEPS file.
+ rxp = re.compile("vars = {(?P<revision>[^}]+)", re.MULTILINE)
qyearsley 2014/04/25 16:46:19 <revision> isn't a very clear name for "everything
shatch 2014/04/25 17:17:14 Done.
+ re_results = rxp.search(ReadStringFromFile(bisect_utils.FILE_DEPS_GIT))
+ locals = {}
+ if re_results:
qyearsley 2014/04/25 16:46:19 To avoid nesting one level here, maybe: if not re
shatch 2014/04/25 17:17:14 Done.
+ for current_line in re_results.group("revision").splitlines():
+ try:
+ depot_name = current_line.split("'")[1].split("'")[0]
+ depot_revision = current_line.split(": '")[1].split("'")[0]
qyearsley 2014/04/25 16:46:19 These two lines are particularly hard for me to un
shatch 2014/04/25 17:17:14 Done.
+ for current_name, current_data in DEPOT_DEPS_NAME.iteritems():
+ if (current_data.has_key('deps_var') and
+ current_data['deps_var'] == depot_name):
+ src_name = current_name
+ locals[src_name] = depot_revision
+ break
+ except IndexError:
+ pass
+ return locals
+
+ def Get3rdPartyRevisionsFromCurrentRevision(self, depot, revision):
+ """Parses the DEPS file to determine WebKit/v8/etc... versions.
+
+ Returns:
+ A dict in the format {depot:revision} if successful, otherwise None.
+ """
+ cwd = os.getcwd()
+ self.ChangeToDepotWorkingDirectory(depot)
+
+ results = {}
+
+ if depot == 'chromium' or depot == 'android-chrome':
+ results = self._ParseRevisionsFromDEPSFile(depot)
+ os.chdir(cwd)
elif depot == 'cros':
cmd = [CROS_SDK_PATH, '--', 'portageq-%s' % self.opts.cros_board,
'best_visible', '/build/%s' % self.opts.cros_board, 'ebuild',
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698