OLD | NEW |
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: | 9 # Requires a chromium checkout with branch heads: |
10 # gclient sync --with_branch_heads | 10 # gclient sync --with_branch_heads |
11 # gclient fetch | 11 # gclient fetch |
12 | 12 |
13 import argparse | 13 import argparse |
14 import csv | 14 import csv |
15 import itertools | 15 import itertools |
16 import json | 16 import json |
17 import os | 17 import os |
18 import re | 18 import re |
19 import sys | 19 import sys |
20 | 20 |
21 from common_includes import * | 21 from common_includes import * |
22 | 22 |
23 CONFIG = { | 23 CONFIG = { |
24 "BRANCHNAME": "retrieve-v8-releases", | 24 "BRANCHNAME": "retrieve-v8-releases", |
25 "PERSISTFILE_BASENAME": "/tmp/v8-releases-tempfile", | 25 "PERSISTFILE_BASENAME": "/tmp/v8-releases-tempfile", |
26 } | 26 } |
27 | 27 |
28 # Expression for retrieving the bleeding edge revision from a commit message. | 28 # Expression for retrieving the bleeding edge revision from a commit message. |
29 PUSH_MESSAGE_RE = re.compile(r".* \(based on bleeding_edge revision r(\d+)\)$") | 29 PUSH_MSG_SVN_RE = re.compile(r".* \(based on bleeding_edge revision r(\d+)\)$") |
| 30 PUSH_MSG_GIT_RE = re.compile(r".* \(based on ([a-fA-F0-9]+)\)$") |
30 | 31 |
31 # Expression for retrieving the merged patches from a merge commit message | 32 # Expression for retrieving the merged patches from a merge commit message |
32 # (old and new format). | 33 # (old and new format). |
33 MERGE_MESSAGE_RE = re.compile(r"^.*[M|m]erged (.+)(\)| into).*$", re.M) | 34 MERGE_MESSAGE_RE = re.compile(r"^.*[M|m]erged (.+)(\)| into).*$", re.M) |
34 | 35 |
35 # Expression for retrieving reverted patches from a commit message (old and | 36 # Expression for retrieving reverted patches from a commit message (old and |
36 # new format). | 37 # new format). |
37 ROLLBACK_MESSAGE_RE = re.compile(r"^.*[R|r]ollback of (.+)(\)| in).*$", re.M) | 38 ROLLBACK_MESSAGE_RE = re.compile(r"^.*[R|r]ollback of (.+)(\)| in).*$", re.M) |
38 | 39 |
39 # Expression for retrieving the code review link. | 40 # Expression for retrieving the code review link. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 122 |
122 | 123 |
123 class RetrieveV8Releases(Step): | 124 class RetrieveV8Releases(Step): |
124 MESSAGE = "Retrieve all V8 releases." | 125 MESSAGE = "Retrieve all V8 releases." |
125 | 126 |
126 def ExceedsMax(self, releases): | 127 def ExceedsMax(self, releases): |
127 return (self._options.max_releases > 0 | 128 return (self._options.max_releases > 0 |
128 and len(releases) > self._options.max_releases) | 129 and len(releases) > self._options.max_releases) |
129 | 130 |
130 def GetBleedingEdgeFromPush(self, title): | 131 def GetBleedingEdgeFromPush(self, title): |
131 return MatchSafe(PUSH_MESSAGE_RE.match(title)) | 132 return MatchSafe(PUSH_MSG_SVN_RE.match(title)) |
| 133 |
| 134 def GetBleedingEdgeGitFromPush(self, title): |
| 135 return MatchSafe(PUSH_MSG_GIT_RE.match(title)) |
132 | 136 |
133 def GetMergedPatches(self, body): | 137 def GetMergedPatches(self, body): |
134 patches = MatchSafe(MERGE_MESSAGE_RE.search(body)) | 138 patches = MatchSafe(MERGE_MESSAGE_RE.search(body)) |
135 if not patches: | 139 if not patches: |
136 patches = MatchSafe(ROLLBACK_MESSAGE_RE.search(body)) | 140 patches = MatchSafe(ROLLBACK_MESSAGE_RE.search(body)) |
137 if patches: | 141 if patches: |
138 # Indicate reverted patches with a "-". | 142 # Indicate reverted patches with a "-". |
139 patches = "-%s" % patches | 143 patches = "-%s" % patches |
140 return patches | 144 return patches |
141 | 145 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 if self["patch"] != "0": | 186 if self["patch"] != "0": |
183 version += ".%s" % self["patch"] | 187 version += ".%s" % self["patch"] |
184 patches = self.GetMergedPatches(body) | 188 patches = self.GetMergedPatches(body) |
185 | 189 |
186 title = self.GitLog(n=1, format="%s", git_hash=git_hash) | 190 title = self.GitLog(n=1, format="%s", git_hash=git_hash) |
187 bleeding_edge_revision = self.GetBleedingEdgeFromPush(title) | 191 bleeding_edge_revision = self.GetBleedingEdgeFromPush(title) |
188 bleeding_edge_git = "" | 192 bleeding_edge_git = "" |
189 if bleeding_edge_revision: | 193 if bleeding_edge_revision: |
190 bleeding_edge_git = self.vc.SvnGit(bleeding_edge_revision, | 194 bleeding_edge_git = self.vc.SvnGit(bleeding_edge_revision, |
191 self.vc.RemoteMasterBranch()) | 195 self.vc.RemoteMasterBranch()) |
| 196 else: |
| 197 bleeding_edge_git = self.GetBleedingEdgeGitFromPush(title) |
192 return self.GetReleaseDict( | 198 return self.GetReleaseDict( |
193 git_hash, bleeding_edge_revision, bleeding_edge_git, branch, version, | 199 git_hash, bleeding_edge_revision, bleeding_edge_git, branch, version, |
194 patches, body), self["patch"] | 200 patches, body), self["patch"] |
195 | 201 |
196 def GetReleasesFromMaster(self): | 202 def GetReleasesFromMaster(self): |
197 tag_text = self.SVN("log https://v8.googlecode.com/svn/tags -v --limit 20") | 203 tag_text = self.SVN("log https://v8.googlecode.com/svn/tags -v --limit 20") |
198 releases = [] | 204 releases = [] |
199 for (tag, revision) in re.findall(BLEEDING_EDGE_TAGS_RE, tag_text): | 205 for (tag, revision) in re.findall(BLEEDING_EDGE_TAGS_RE, tag_text): |
200 git_hash = self.vc.SvnGit(revision) | 206 git_hash = self.vc.SvnGit(revision) |
201 | 207 |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 UpdateChromiumCheckout, | 476 UpdateChromiumCheckout, |
471 RetrieveChromiumV8Releases, | 477 RetrieveChromiumV8Releases, |
472 RietrieveChromiumBranches, | 478 RietrieveChromiumBranches, |
473 CleanUp, | 479 CleanUp, |
474 WriteOutput, | 480 WriteOutput, |
475 ] | 481 ] |
476 | 482 |
477 | 483 |
478 if __name__ == "__main__": # pragma: no cover | 484 if __name__ == "__main__": # pragma: no cover |
479 sys.exit(Releases().Run()) | 485 sys.exit(Releases().Run()) |
OLD | NEW |