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 |
(...skipping 15 matching lines...) Expand all Loading... |
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_MSG_SVN_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 PUSH_MSG_GIT_RE = re.compile(r".* \(based on ([a-fA-F0-9]+)\)$") |
31 | 31 |
32 # Expression for retrieving the merged patches from a merge commit message | 32 # Expression for retrieving the merged patches from a merge commit message |
33 # (old and new format). | 33 # (old and new format). |
34 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) |
35 | 35 |
| 36 CHERRY_PICK_TITLE_GIT_RE = re.compile(r"^.* \(cherry\-pick\)\.?$") |
| 37 |
| 38 # New git message for cherry-picked CLs. One message per line. |
| 39 MERGE_MESSAGE_GIT_RE = re.compile(r"^Merged ([a-fA-F0-9]+)\.?$") |
| 40 |
36 # Expression for retrieving reverted patches from a commit message (old and | 41 # Expression for retrieving reverted patches from a commit message (old and |
37 # new format). | 42 # new format). |
38 ROLLBACK_MESSAGE_RE = re.compile(r"^.*[R|r]ollback of (.+)(\)| in).*$", re.M) | 43 ROLLBACK_MESSAGE_RE = re.compile(r"^.*[R|r]ollback of (.+)(\)| in).*$", re.M) |
39 | 44 |
| 45 # New git message for reverted CLs. One message per line. |
| 46 ROLLBACK_MESSAGE_GIT_RE = re.compile(r"^Rollback of ([a-fA-F0-9]+)\.?$") |
| 47 |
40 # Expression for retrieving the code review link. | 48 # Expression for retrieving the code review link. |
41 REVIEW_LINK_RE = re.compile(r"^Review URL: (.+)$", re.M) | 49 REVIEW_LINK_RE = re.compile(r"^Review URL: (.+)$", re.M) |
42 | 50 |
43 # Expression with three versions (historical) for extracting the v8 revision | 51 # Expression with three versions (historical) for extracting the v8 revision |
44 # from the chromium DEPS file. | 52 # from the chromium DEPS file. |
45 DEPS_RE = re.compile(r"""^\s*(?:["']v8_revision["']: ["']""" | 53 DEPS_RE = re.compile(r"""^\s*(?:["']v8_revision["']: ["']""" |
46 """|\(Var\("googlecode_url"\) % "v8"\) \+ "\/trunk@""" | 54 """|\(Var\("googlecode_url"\) % "v8"\) \+ "\/trunk@""" |
47 """|"http\:\/\/v8\.googlecode\.com\/svn\/trunk@)""" | 55 """|"http\:\/\/v8\.googlecode\.com\/svn\/trunk@)""" |
48 """([^"']+)["'].*$""", re.M) | 56 """([^"']+)["'].*$""", re.M) |
49 | 57 |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 | 144 |
137 def GetMergedPatches(self, body): | 145 def GetMergedPatches(self, body): |
138 patches = MatchSafe(MERGE_MESSAGE_RE.search(body)) | 146 patches = MatchSafe(MERGE_MESSAGE_RE.search(body)) |
139 if not patches: | 147 if not patches: |
140 patches = MatchSafe(ROLLBACK_MESSAGE_RE.search(body)) | 148 patches = MatchSafe(ROLLBACK_MESSAGE_RE.search(body)) |
141 if patches: | 149 if patches: |
142 # Indicate reverted patches with a "-". | 150 # Indicate reverted patches with a "-". |
143 patches = "-%s" % patches | 151 patches = "-%s" % patches |
144 return patches | 152 return patches |
145 | 153 |
| 154 def GetMergedPatchesGit(self, body): |
| 155 patches = [] |
| 156 for line in body.splitlines(): |
| 157 patch = MatchSafe(MERGE_MESSAGE_GIT_RE.match(line)) |
| 158 if patch: |
| 159 patches.append(patch) |
| 160 patch = MatchSafe(ROLLBACK_MESSAGE_GIT_RE.match(line)) |
| 161 if patch: |
| 162 patches.append("-%s" % patch) |
| 163 return ", ".join(patches) |
| 164 |
| 165 |
146 def GetReleaseDict( | 166 def GetReleaseDict( |
147 self, git_hash, bleeding_edge_rev, bleeding_edge_git, branch, version, | 167 self, git_hash, bleeding_edge_rev, bleeding_edge_git, branch, version, |
148 patches, cl_body): | 168 patches, cl_body): |
149 revision = self.vc.GitSvn(git_hash) | 169 revision = self.vc.GitSvn(git_hash) |
150 return { | 170 return { |
151 # The SVN revision on the branch. | 171 # The SVN revision on the branch. |
152 "revision": revision, | 172 "revision": revision, |
153 # The git revision on the branch. | 173 # The git revision on the branch. |
154 "revision_git": git_hash, | 174 "revision_git": git_hash, |
155 # The SVN revision on bleeding edge (only for newer trunk pushes). | 175 # The SVN revision on bleeding edge (only for newer trunk pushes). |
(...skipping 22 matching lines...) Expand all Loading... |
178 | 198 |
179 def GetRelease(self, git_hash, branch): | 199 def GetRelease(self, git_hash, branch): |
180 self.ReadAndPersistVersion() | 200 self.ReadAndPersistVersion() |
181 base_version = [self["major"], self["minor"], self["build"]] | 201 base_version = [self["major"], self["minor"], self["build"]] |
182 version = ".".join(base_version) | 202 version = ".".join(base_version) |
183 body = self.GitLog(n=1, format="%B", git_hash=git_hash) | 203 body = self.GitLog(n=1, format="%B", git_hash=git_hash) |
184 | 204 |
185 patches = "" | 205 patches = "" |
186 if self["patch"] != "0": | 206 if self["patch"] != "0": |
187 version += ".%s" % self["patch"] | 207 version += ".%s" % self["patch"] |
188 patches = self.GetMergedPatches(body) | 208 if CHERRY_PICK_TITLE_GIT_RE.match(body.splitlines()[0]): |
| 209 patches = self.GetMergedPatchesGit(body) |
| 210 else: |
| 211 patches = self.GetMergedPatches(body) |
189 | 212 |
190 title = self.GitLog(n=1, format="%s", git_hash=git_hash) | 213 title = self.GitLog(n=1, format="%s", git_hash=git_hash) |
191 bleeding_edge_revision = self.GetBleedingEdgeFromPush(title) | 214 bleeding_edge_revision = self.GetBleedingEdgeFromPush(title) |
192 bleeding_edge_git = "" | 215 bleeding_edge_git = "" |
193 if bleeding_edge_revision: | 216 if bleeding_edge_revision: |
194 bleeding_edge_git = self.vc.SvnGit(bleeding_edge_revision, | 217 bleeding_edge_git = self.vc.SvnGit(bleeding_edge_revision, |
195 self.vc.RemoteMasterBranch()) | 218 self.vc.RemoteMasterBranch()) |
196 else: | 219 else: |
197 bleeding_edge_git = self.GetBleedingEdgeGitFromPush(title) | 220 bleeding_edge_git = self.GetBleedingEdgeGitFromPush(title) |
198 return self.GetReleaseDict( | 221 return self.GetReleaseDict( |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 UpdateChromiumCheckout, | 499 UpdateChromiumCheckout, |
477 RetrieveChromiumV8Releases, | 500 RetrieveChromiumV8Releases, |
478 RietrieveChromiumBranches, | 501 RietrieveChromiumBranches, |
479 CleanUp, | 502 CleanUp, |
480 WriteOutput, | 503 WriteOutput, |
481 ] | 504 ] |
482 | 505 |
483 | 506 |
484 if __name__ == "__main__": # pragma: no cover | 507 if __name__ == "__main__": # pragma: no cover |
485 sys.exit(Releases().Run()) | 508 sys.exit(Releases().Run()) |
OLD | NEW |