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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/push-to-trunk/test_scripts.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/push-to-trunk/releases.py
diff --git a/tools/push-to-trunk/releases.py b/tools/push-to-trunk/releases.py
index 578a9a139681b88933443db081551d48d7169b59..8b1c99ac14deb6ec07792ab7a0e02b28f441cbb5 100755
--- a/tools/push-to-trunk/releases.py
+++ b/tools/push-to-trunk/releases.py
@@ -6,6 +6,10 @@
# This script retrieves the history of all V8 branches and trunk revisions and
# their corresponding Chromium revisions.
+# Requires a chromium checkout with branch heads:
+# gclient sync --with_branch_heads
+# gclient fetch
+
import argparse
import csv
import itertools
@@ -87,6 +91,7 @@ def BuildRevisionRanges(cr_releases):
entry is the only one of the form R1, as there is no end range.
cr_releases is a list of [cr_rev, v8_rev] reverse-sorted by cr_rev.
+ cr_rev either refers to a chromium svn revision or a chromium branch number.
"""
range_lists = {}
cr_releases = FilterDuplicatesAndReverse(cr_releases)
@@ -174,6 +179,8 @@ class RetrieveV8Releases(Step):
"patches_merged": patches,
# Default for easier output formatting.
"chromium_revision": "",
+ # Default for easier output formatting.
+ "chromium_branch": "",
# Link to the CL on code review. Trunk pushes are not uploaded, so this
# field will be populated below with the recent roll CL link.
"review_link": MatchSafe(REVIEW_LINK_RE.search(body)),
@@ -326,6 +333,64 @@ class RetrieveChromiumV8Releases(Step):
for revision, ranges in all_ranges.iteritems():
trunk_dict.get(revision, {})["chromium_revision"] = ranges
+
+# TODO(machenbach): Unify common code with method above.
+class RietrieveChromiumBranches(Step):
+ MESSAGE = "Retrieve Chromium branch information."
+ REQUIRES = "chrome_path"
+
+ def RunStep(self):
+ os.chdir(self["chrome_path"])
+
+ trunk_releases = filter(lambda r: r["branch"] == "trunk", self["releases"])
+ if not trunk_releases: # pragma: no cover
+ print "No trunk releases detected. Skipping chromium history."
+ return True
+
+ oldest_v8_rev = int(trunk_releases[-1]["revision"])
+
+ # Filter out irrelevant branches.
+ branches = filter(lambda r: re.match(r"branch-heads/\d+", r),
+ self.GitRemotes())
+
+ # Transform into pure branch numbers.
+ branches = map(lambda r: int(re.match(r"branch-heads/(\d+)", r).group(1)),
+ branches)
+
+ branches = sorted(branches, reverse=True)
+
+ cr_branches = []
+ try:
+ for branch in branches:
+ if not self.GitCheckoutFileSafe(self._config[DEPS_FILE],
+ "branch-heads/%d" % branch):
+ break # pragma: no cover
+ deps = FileToText(self.Config(DEPS_FILE))
+ match = DEPS_RE.search(deps)
+ if match:
+ v8_rev = match.group(1)
+ cr_branches.append([str(branch), v8_rev])
+
+ # Stop after reaching beyond the last v8 revision we want to update.
+ # We need a small buffer for possible revert/reland frenzies.
+ # TODO(machenbach): Subtraction is not git friendly.
+ if int(v8_rev) < oldest_v8_rev - 100:
+ break # pragma: no cover
+
+ # Allow Ctrl-C interrupt.
+ except (KeyboardInterrupt, SystemExit): # pragma: no cover
+ pass
+
+ # Clean up.
+ self.GitCheckoutFileSafe(self._config[DEPS_FILE], "HEAD")
+
+ # Add the chromium branches to the v8 trunk releases.
+ all_ranges = BuildRevisionRanges(cr_branches)
+ trunk_dict = dict((r["revision"], r) for r in trunk_releases)
+ for revision, ranges in all_ranges.iteritems():
+ trunk_dict.get(revision, {})["chromium_branch"] = ranges
+
+
class SwitchV8(Step):
MESSAGE = "Returning to V8 checkout."
REQUIRES = "chrome_path"
@@ -388,6 +453,7 @@ class Releases(ScriptsBase):
SwitchChromium,
UpdateChromiumCheckout,
RetrieveChromiumV8Releases,
+ RietrieveChromiumBranches,
SwitchV8,
CleanUp,
WriteOutput,
« 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