| Index: tools/push-to-trunk/releases.py
|
| diff --git a/tools/push-to-trunk/releases.py b/tools/push-to-trunk/releases.py
|
| index ff57844968093fe30b5848873f6f7cf260895210..586cbc1fde9732d1e7c004d9109e0003ec8bac1b 100755
|
| --- a/tools/push-to-trunk/releases.py
|
| +++ b/tools/push-to-trunk/releases.py
|
| @@ -57,6 +57,77 @@ DEPS_RE = re.compile(r'^\s*(?:"v8_revision": "'
|
| BLEEDING_EDGE_TAGS_RE = re.compile(
|
| r"A \/tags\/([^\s]+) \(from \/branches\/bleeding_edge\:(\d+)\)")
|
|
|
| +# Regular expression that matches a single commit footer line.
|
| +COMMIT_FOOTER_ENTRY_RE = re.compile(r'([^:]+):\s+(.+)')
|
| +
|
| +# Footer metadata key for commit position.
|
| +COMMIT_POSITION_FOOTER_KEY = 'Cr-Commit-Position'
|
| +
|
| +# Regular expression to parse a commit position
|
| +COMMIT_POSITION_RE = re.compile(r'(.+)@\{#(\d+)\}')
|
| +
|
| +# Key for the 'git-svn' ID metadata commit footer entry.
|
| +GIT_SVN_ID_FOOTER_KEY = 'git-svn-id'
|
| +
|
| +# e.g., git-svn-id: https://v8.googlecode.com/svn/trunk@23117
|
| +# ce2b1a6d-e550-0410-aec6-3dcde31c8c00
|
| +GIT_SVN_ID_RE = re.compile(r'((?:\w+)://[^@]+)@(\d+)\s+(?:[a-zA-Z0-9\-]+)')
|
| +
|
| +
|
| +# Copied from bot_update.py.
|
| +def GetCommitMessageFooterMap(message):
|
| + """Returns: (dict) A dictionary of commit message footer entries.
|
| + """
|
| + footers = {}
|
| +
|
| + # Extract the lines in the footer block.
|
| + lines = []
|
| + for line in message.strip().splitlines():
|
| + line = line.strip()
|
| + if len(line) == 0:
|
| + del(lines[:])
|
| + continue
|
| + lines.append(line)
|
| +
|
| + # Parse the footer
|
| + for line in lines:
|
| + m = COMMIT_FOOTER_ENTRY_RE.match(line)
|
| + if not m:
|
| + # If any single line isn't valid, the entire footer is invalid.
|
| + footers.clear()
|
| + return footers
|
| + footers[m.group(1)] = m.group(2).strip()
|
| + return footers
|
| +
|
| +
|
| +# Copied from bot_update.py and modified for svn-like numbers only.
|
| +def GetCommitPositionNumber(step, git_hash):
|
| + """Dumps the 'git' log for a specific revision and parses out the commit
|
| + position number.
|
| +
|
| + If a commit position metadata key is found, its number will be returned.
|
| +
|
| + Otherwise, we will search for a 'git-svn' metadata entry. If one is found,
|
| + its SVN revision value is returned.
|
| + """
|
| + git_log = step.GitLog(format='%B', n=1, git_hash=git_hash)
|
| + footer_map = GetCommitMessageFooterMap(git_log)
|
| +
|
| + # Search for commit position metadata
|
| + value = footer_map.get(COMMIT_POSITION_FOOTER_KEY)
|
| + if value:
|
| + match = COMMIT_POSITION_RE.match(value)
|
| + if match:
|
| + return match.group(2)
|
| +
|
| + # Extract the svn revision from 'git-svn' metadata
|
| + value = footer_map.get(GIT_SVN_ID_FOOTER_KEY)
|
| + if value:
|
| + match = GIT_SVN_ID_RE.match(value)
|
| + if match:
|
| + return match.group(2)
|
| + return None
|
| +
|
|
|
| def SortBranches(branches):
|
| """Sort branches with version number names."""
|
| @@ -310,12 +381,13 @@ class RetrieveChromiumV8Releases(Step):
|
| 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."
|
| + releases = filter(
|
| + lambda r: r["branch"] in ["trunk", "bleeding_edge"], self["releases"])
|
| + if not releases: # pragma: no cover
|
| + print "No releases detected. Skipping chromium history."
|
| return True
|
|
|
| - oldest_v8_rev = int(trunk_releases[-1]["revision"])
|
| + oldest_v8_rev = int(releases[-1]["revision"])
|
|
|
| cr_releases = []
|
| try:
|
| @@ -327,9 +399,10 @@ class RetrieveChromiumV8Releases(Step):
|
| deps = FileToText(self.Config(DEPS_FILE))
|
| match = DEPS_RE.search(deps)
|
| if match:
|
| - svn_rev = self.GitSVNFindSVNRev(git_hash)
|
| - v8_rev = match.group(1)
|
| - cr_releases.append([svn_rev, v8_rev])
|
| + cr_rev = GetCommitPositionNumber(self, git_hash)
|
| + if cr_rev:
|
| + v8_rev = match.group(1)
|
| + cr_releases.append([cr_rev, v8_rev])
|
|
|
| # Stop after reaching beyond the last v8 revision we want to update.
|
| # We need a small buffer for possible revert/reland frenzies.
|
| @@ -344,11 +417,11 @@ class RetrieveChromiumV8Releases(Step):
|
| # Clean up.
|
| self.GitCheckoutFileSafe(self._config[DEPS_FILE], "HEAD")
|
|
|
| - # Add the chromium ranges to the v8 trunk releases.
|
| + # Add the chromium ranges to the v8 trunk and bleeding_edge releases.
|
| all_ranges = BuildRevisionRanges(cr_releases)
|
| - trunk_dict = dict((r["revision"], r) for r in trunk_releases)
|
| + releases_dict = dict((r["revision"], r) for r in releases)
|
| for revision, ranges in all_ranges.iteritems():
|
| - trunk_dict.get(revision, {})["chromium_revision"] = ranges
|
| + releases_dict.get(revision, {})["chromium_revision"] = ranges
|
|
|
|
|
| # TODO(machenbach): Unify common code with method above.
|
|
|