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

Side by Side Diff: tools/push-to-trunk/releases.py

Issue 238443005: Let releases script retrieve information about chromium branches. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/push-to-trunk/test_scripts.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 the V8 project authors. All rights reserved. 2 # Copyright 2014 the V8 project authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # This script retrieves the history of all V8 branches and trunk revisions and 6 # This script retrieves the history of all V8 branches and trunk revisions and
7 # their corresponding Chromium revisions. 7 # their corresponding Chromium revisions.
8 8
9 # Requires a chromium checkout with branch heads:
10 # gclient sync --with_branch_heads
11 # gclient fetch
12
9 import argparse 13 import argparse
10 import csv 14 import csv
11 import itertools 15 import itertools
12 import json 16 import json
13 import os 17 import os
14 import re 18 import re
15 import sys 19 import sys
16 20
17 from common_includes import * 21 from common_includes import *
18 22
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 result.append(release) 84 result.append(release)
81 return result 85 return result
82 86
83 87
84 def BuildRevisionRanges(cr_releases): 88 def BuildRevisionRanges(cr_releases):
85 """Returns a mapping of v8 revision -> chromium ranges. 89 """Returns a mapping of v8 revision -> chromium ranges.
86 The ranges are comma-separated, each range has the form R1:R2. The newest 90 The ranges are comma-separated, each range has the form R1:R2. The newest
87 entry is the only one of the form R1, as there is no end range. 91 entry is the only one of the form R1, as there is no end range.
88 92
89 cr_releases is a list of [cr_rev, v8_rev] reverse-sorted by cr_rev. 93 cr_releases is a list of [cr_rev, v8_rev] reverse-sorted by cr_rev.
94 cr_rev either refers to a chromium svn revision or a chromium branch number.
90 """ 95 """
91 range_lists = {} 96 range_lists = {}
92 cr_releases = FilterDuplicatesAndReverse(cr_releases) 97 cr_releases = FilterDuplicatesAndReverse(cr_releases)
93 98
94 # Visit pairs of cr releases from oldest to newest. 99 # Visit pairs of cr releases from oldest to newest.
95 for cr_from, cr_to in itertools.izip( 100 for cr_from, cr_to in itertools.izip(
96 cr_releases, itertools.islice(cr_releases, 1, None)): 101 cr_releases, itertools.islice(cr_releases, 1, None)):
97 102
98 # Assume the chromium revisions are all different. 103 # Assume the chromium revisions are all different.
99 assert cr_from[0] != cr_to[0] 104 assert cr_from[0] != cr_to[0]
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 # The branch name. 172 # The branch name.
168 "branch": branch, 173 "branch": branch,
169 # The version for displaying in the form 3.26.3 or 3.26.3.12. 174 # The version for displaying in the form 3.26.3 or 3.26.3.12.
170 "version": version, 175 "version": version,
171 # The date of the commit. 176 # The date of the commit.
172 "date": self.GitLog(n=1, format="%ci", git_hash=git_hash), 177 "date": self.GitLog(n=1, format="%ci", git_hash=git_hash),
173 # Merged patches if available in the form 'r1234, r2345'. 178 # Merged patches if available in the form 'r1234, r2345'.
174 "patches_merged": patches, 179 "patches_merged": patches,
175 # Default for easier output formatting. 180 # Default for easier output formatting.
176 "chromium_revision": "", 181 "chromium_revision": "",
182 # Default for easier output formatting.
183 "chromium_branch": "",
177 # Link to the CL on code review. Trunk pushes are not uploaded, so this 184 # Link to the CL on code review. Trunk pushes are not uploaded, so this
178 # field will be populated below with the recent roll CL link. 185 # field will be populated below with the recent roll CL link.
179 "review_link": MatchSafe(REVIEW_LINK_RE.search(body)), 186 "review_link": MatchSafe(REVIEW_LINK_RE.search(body)),
180 # Link to the commit message on google code. 187 # Link to the commit message on google code.
181 "revision_link": ("https://code.google.com/p/v8/source/detail?r=%s" 188 "revision_link": ("https://code.google.com/p/v8/source/detail?r=%s"
182 % revision), 189 % revision),
183 }, self["patch"] 190 }, self["patch"]
184 191
185 def GetReleasesFromBranch(self, branch): 192 def GetReleasesFromBranch(self, branch):
186 self.GitReset("svn/%s" % branch) 193 self.GitReset("svn/%s" % branch)
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 326
320 # Clean up. 327 # Clean up.
321 self.GitCheckoutFileSafe(self._config[DEPS_FILE], "HEAD") 328 self.GitCheckoutFileSafe(self._config[DEPS_FILE], "HEAD")
322 329
323 # Add the chromium ranges to the v8 trunk releases. 330 # Add the chromium ranges to the v8 trunk releases.
324 all_ranges = BuildRevisionRanges(cr_releases) 331 all_ranges = BuildRevisionRanges(cr_releases)
325 trunk_dict = dict((r["revision"], r) for r in trunk_releases) 332 trunk_dict = dict((r["revision"], r) for r in trunk_releases)
326 for revision, ranges in all_ranges.iteritems(): 333 for revision, ranges in all_ranges.iteritems():
327 trunk_dict.get(revision, {})["chromium_revision"] = ranges 334 trunk_dict.get(revision, {})["chromium_revision"] = ranges
328 335
336
337 # TODO(machenbach): Unify common code with method above.
338 class RietrieveChromiumBranches(Step):
339 MESSAGE = "Retrieve Chromium branch information."
340 REQUIRES = "chrome_path"
341
342 def RunStep(self):
343 os.chdir(self["chrome_path"])
344
345 trunk_releases = filter(lambda r: r["branch"] == "trunk", self["releases"])
346 if not trunk_releases: # pragma: no cover
347 print "No trunk releases detected. Skipping chromium history."
348 return True
349
350 oldest_v8_rev = int(trunk_releases[-1]["revision"])
351
352 # Filter out irrelevant branches.
353 branches = filter(lambda r: re.match(r"branch-heads/\d+", r),
354 self.GitRemotes())
355
356 # Transform into pure branch numbers.
357 branches = map(lambda r: int(re.match(r"branch-heads/(\d+)", r).group(1)),
358 branches)
359
360 branches = sorted(branches, reverse=True)
361
362 cr_branches = []
363 try:
364 for branch in branches:
365 if not self.GitCheckoutFileSafe(self._config[DEPS_FILE],
366 "branch-heads/%d" % branch):
367 break # pragma: no cover
368 deps = FileToText(self.Config(DEPS_FILE))
369 match = DEPS_RE.search(deps)
370 if match:
371 v8_rev = match.group(1)
372 cr_branches.append([str(branch), v8_rev])
373
374 # Stop after reaching beyond the last v8 revision we want to update.
375 # We need a small buffer for possible revert/reland frenzies.
376 # TODO(machenbach): Subtraction is not git friendly.
377 if int(v8_rev) < oldest_v8_rev - 100:
378 break # pragma: no cover
379
380 # Allow Ctrl-C interrupt.
381 except (KeyboardInterrupt, SystemExit): # pragma: no cover
382 pass
383
384 # Clean up.
385 self.GitCheckoutFileSafe(self._config[DEPS_FILE], "HEAD")
386
387 # Add the chromium branches to the v8 trunk releases.
388 all_ranges = BuildRevisionRanges(cr_branches)
389 trunk_dict = dict((r["revision"], r) for r in trunk_releases)
390 for revision, ranges in all_ranges.iteritems():
391 trunk_dict.get(revision, {})["chromium_branch"] = ranges
392
393
329 class SwitchV8(Step): 394 class SwitchV8(Step):
330 MESSAGE = "Returning to V8 checkout." 395 MESSAGE = "Returning to V8 checkout."
331 REQUIRES = "chrome_path" 396 REQUIRES = "chrome_path"
332 397
333 def RunStep(self): 398 def RunStep(self):
334 self.GitCheckout("master") 399 self.GitCheckout("master")
335 self.GitDeleteBranch(self.Config(BRANCHNAME)) 400 self.GitDeleteBranch(self.Config(BRANCHNAME))
336 os.chdir(self["v8_path"]) 401 os.chdir(self["v8_path"])
337 402
338 403
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 return True 446 return True
382 447
383 def _Steps(self): 448 def _Steps(self):
384 return [ 449 return [
385 Preparation, 450 Preparation,
386 RetrieveV8Releases, 451 RetrieveV8Releases,
387 CheckChromium, 452 CheckChromium,
388 SwitchChromium, 453 SwitchChromium,
389 UpdateChromiumCheckout, 454 UpdateChromiumCheckout,
390 RetrieveChromiumV8Releases, 455 RetrieveChromiumV8Releases,
456 RietrieveChromiumBranches,
391 SwitchV8, 457 SwitchV8,
392 CleanUp, 458 CleanUp,
393 WriteOutput, 459 WriteOutput,
394 ] 460 ]
395 461
396 462
397 if __name__ == "__main__": # pragma: no cover 463 if __name__ == "__main__": # pragma: no cover
398 sys.exit(Releases(CONFIG).Run()) 464 sys.exit(Releases(CONFIG).Run())
OLDNEW
« no previous file with comments | « no previous file | tools/push-to-trunk/test_scripts.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698