| 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 CHROMIUM = "CHROMIUM" | 23 CHROMIUM = "CHROMIUM" |
| 24 | 24 |
| 25 CONFIG = { | 25 CONFIG = { |
| 26 BRANCHNAME: "retrieve-v8-releases", | 26 BRANCHNAME: "retrieve-v8-releases", |
| 27 PERSISTFILE_BASENAME: "/tmp/v8-releases-tempfile", | 27 PERSISTFILE_BASENAME: "/tmp/v8-releases-tempfile", |
| 28 VERSION_FILE: "src/version.cc", | |
| 29 } | 28 } |
| 30 | 29 |
| 31 # Expression for retrieving the bleeding edge revision from a commit message. | 30 # Expression for retrieving the bleeding edge revision from a commit message. |
| 32 PUSH_MESSAGE_RE = re.compile(r".* \(based on bleeding_edge revision r(\d+)\)$") | 31 PUSH_MESSAGE_RE = re.compile(r".* \(based on bleeding_edge revision r(\d+)\)$") |
| 33 | 32 |
| 34 # Expression for retrieving the merged patches from a merge commit message | 33 # Expression for retrieving the merged patches from a merge commit message |
| 35 # (old and new format). | 34 # (old and new format). |
| 36 MERGE_MESSAGE_RE = re.compile(r"^.*[M|m]erged (.+)(\)| into).*$", re.M) | 35 MERGE_MESSAGE_RE = re.compile(r"^.*[M|m]erged (.+)(\)| into).*$", re.M) |
| 37 | 36 |
| 38 # Expression for retrieving reverted patches from a commit message (old and | 37 # Expression for retrieving reverted patches from a commit message (old and |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 return releases | 198 return releases |
| 200 | 199 |
| 201 def GetReleasesFromBranch(self, branch): | 200 def GetReleasesFromBranch(self, branch): |
| 202 self.GitReset("svn/%s" % branch) | 201 self.GitReset("svn/%s" % branch) |
| 203 if branch == 'bleeding_edge': | 202 if branch == 'bleeding_edge': |
| 204 return self.GetReleasesFromBleedingEdge() | 203 return self.GetReleasesFromBleedingEdge() |
| 205 | 204 |
| 206 releases = [] | 205 releases = [] |
| 207 try: | 206 try: |
| 208 for git_hash in self.GitLog(format="%H").splitlines(): | 207 for git_hash in self.GitLog(format="%H").splitlines(): |
| 209 if self._config[VERSION_FILE] not in self.GitChangedFiles(git_hash): | 208 if VERSION_FILE not in self.GitChangedFiles(git_hash): |
| 210 continue | 209 continue |
| 211 if self.ExceedsMax(releases): | 210 if self.ExceedsMax(releases): |
| 212 break # pragma: no cover | 211 break # pragma: no cover |
| 213 if not self.GitCheckoutFileSafe(self._config[VERSION_FILE], git_hash): | 212 if not self.GitCheckoutFileSafe(VERSION_FILE, git_hash): |
| 214 break # pragma: no cover | 213 break # pragma: no cover |
| 215 | 214 |
| 216 release, patch_level = self.GetRelease(git_hash, branch) | 215 release, patch_level = self.GetRelease(git_hash, branch) |
| 217 releases.append(release) | 216 releases.append(release) |
| 218 | 217 |
| 219 # Follow branches only until their creation point. | 218 # Follow branches only until their creation point. |
| 220 # TODO(machenbach): This omits patches if the version file wasn't | 219 # TODO(machenbach): This omits patches if the version file wasn't |
| 221 # manipulated correctly. Find a better way to detect the point where | 220 # manipulated correctly. Find a better way to detect the point where |
| 222 # the parent of the branch head leads to the trunk branch. | 221 # the parent of the branch head leads to the trunk branch. |
| 223 if branch != "trunk" and patch_level == "0": | 222 if branch != "trunk" and patch_level == "0": |
| 224 break | 223 break |
| 225 | 224 |
| 226 # Allow Ctrl-C interrupt. | 225 # Allow Ctrl-C interrupt. |
| 227 except (KeyboardInterrupt, SystemExit): # pragma: no cover | 226 except (KeyboardInterrupt, SystemExit): # pragma: no cover |
| 228 pass | 227 pass |
| 229 | 228 |
| 230 # Clean up checked-out version file. | 229 # Clean up checked-out version file. |
| 231 self.GitCheckoutFileSafe(self._config[VERSION_FILE], "HEAD") | 230 self.GitCheckoutFileSafe(VERSION_FILE, "HEAD") |
| 232 return releases | 231 return releases |
| 233 | 232 |
| 234 def RunStep(self): | 233 def RunStep(self): |
| 235 self.GitCreateBranch(self._config[BRANCHNAME]) | 234 self.GitCreateBranch(self._config[BRANCHNAME]) |
| 236 # Get relevant remote branches, e.g. "svn/3.25". | 235 # Get relevant remote branches, e.g. "svn/3.25". |
| 237 branches = filter(lambda s: re.match(r"^svn/\d+\.\d+$", s), | 236 branches = filter(lambda s: re.match(r"^svn/\d+\.\d+$", s), |
| 238 self.GitRemotes()) | 237 self.GitRemotes()) |
| 239 # Remove 'svn/' prefix. | 238 # Remove 'svn/' prefix. |
| 240 branches = map(lambda s: s[4:], branches) | 239 branches = map(lambda s: s[4:], branches) |
| 241 | 240 |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 UpdateChromiumCheckout, | 457 UpdateChromiumCheckout, |
| 459 RetrieveChromiumV8Releases, | 458 RetrieveChromiumV8Releases, |
| 460 RietrieveChromiumBranches, | 459 RietrieveChromiumBranches, |
| 461 CleanUp, | 460 CleanUp, |
| 462 WriteOutput, | 461 WriteOutput, |
| 463 ] | 462 ] |
| 464 | 463 |
| 465 | 464 |
| 466 if __name__ == "__main__": # pragma: no cover | 465 if __name__ == "__main__": # pragma: no cover |
| 467 sys.exit(Releases(CONFIG).Run()) | 466 sys.exit(Releases(CONFIG).Run()) |
| OLD | NEW |