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

Side by Side Diff: tools/push-to-trunk/releases.py

Issue 421553002: Teach releases script to read bleeding_edge tags. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/push-to-trunk/test_scripts.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 # Expression for retrieving the code review link. 45 # Expression for retrieving the code review link.
46 REVIEW_LINK_RE = re.compile(r"^Review URL: (.+)$", re.M) 46 REVIEW_LINK_RE = re.compile(r"^Review URL: (.+)$", re.M)
47 47
48 # Expression with three versions (historical) for extracting the v8 revision 48 # Expression with three versions (historical) for extracting the v8 revision
49 # from the chromium DEPS file. 49 # from the chromium DEPS file.
50 DEPS_RE = re.compile(r'^\s*(?:"v8_revision": "' 50 DEPS_RE = re.compile(r'^\s*(?:"v8_revision": "'
51 '|\(Var\("googlecode_url"\) % "v8"\) \+ "\/trunk@' 51 '|\(Var\("googlecode_url"\) % "v8"\) \+ "\/trunk@'
52 '|"http\:\/\/v8\.googlecode\.com\/svn\/trunk@)' 52 '|"http\:\/\/v8\.googlecode\.com\/svn\/trunk@)'
53 '([0-9]+)".*$', re.M) 53 '([0-9]+)".*$', re.M)
54 54
55 # Expression to pick tag and revision for bleeding edge tags. To be used with
56 # output of 'svn log'.
57 BLEEDING_EDGE_TAGS_RE = re.compile(
58 r"A \/tags\/([^\s]+) \(from \/branches\/bleeding_edge\:(\d+)\)")
59
55 60
56 def SortBranches(branches): 61 def SortBranches(branches):
57 """Sort branches with version number names.""" 62 """Sort branches with version number names."""
58 return sorted(branches, key=SortingKey, reverse=True) 63 return sorted(branches, key=SortingKey, reverse=True)
59 64
60 65
61 def FilterDuplicatesAndReverse(cr_releases): 66 def FilterDuplicatesAndReverse(cr_releases):
62 """Returns the chromium releases in reverse order filtered by v8 revision 67 """Returns the chromium releases in reverse order filtered by v8 revision
63 duplicates. 68 duplicates.
64 69
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 138
134 def GetMergedPatches(self, body): 139 def GetMergedPatches(self, body):
135 patches = MatchSafe(MERGE_MESSAGE_RE.search(body)) 140 patches = MatchSafe(MERGE_MESSAGE_RE.search(body))
136 if not patches: 141 if not patches:
137 patches = MatchSafe(ROLLBACK_MESSAGE_RE.search(body)) 142 patches = MatchSafe(ROLLBACK_MESSAGE_RE.search(body))
138 if patches: 143 if patches:
139 # Indicate reverted patches with a "-". 144 # Indicate reverted patches with a "-".
140 patches = "-%s" % patches 145 patches = "-%s" % patches
141 return patches 146 return patches
142 147
143 def GetRelease(self, git_hash, branch): 148 def GetReleaseDict(
144 self.ReadAndPersistVersion() 149 self, git_hash, bleeding_edge_rev, branch, version, patches, cl_body):
145 base_version = [self["major"], self["minor"], self["build"]]
146 version = ".".join(base_version)
147 body = self.GitLog(n=1, format="%B", git_hash=git_hash)
148
149 patches = ""
150 if self["patch"] != "0":
151 version += ".%s" % self["patch"]
152 patches = self.GetMergedPatches(body)
153
154 title = self.GitLog(n=1, format="%s", git_hash=git_hash)
155 revision = self.GitSVNFindSVNRev(git_hash) 150 revision = self.GitSVNFindSVNRev(git_hash)
156 return { 151 return {
Michael Achenbach 2014/07/28 12:56:35 Small refactoring. I move the dict creation to a s
157 # The SVN revision on the branch. 152 # The SVN revision on the branch.
158 "revision": revision, 153 "revision": revision,
159 # The SVN revision on bleeding edge (only for newer trunk pushes). 154 # The SVN revision on bleeding edge (only for newer trunk pushes).
160 "bleeding_edge": self.GetBleedingEdgeFromPush(title), 155 "bleeding_edge": bleeding_edge_rev,
161 # The branch name. 156 # The branch name.
162 "branch": branch, 157 "branch": branch,
163 # The version for displaying in the form 3.26.3 or 3.26.3.12. 158 # The version for displaying in the form 3.26.3 or 3.26.3.12.
164 "version": version, 159 "version": version,
165 # The date of the commit. 160 # The date of the commit.
166 "date": self.GitLog(n=1, format="%ci", git_hash=git_hash), 161 "date": self.GitLog(n=1, format="%ci", git_hash=git_hash),
167 # Merged patches if available in the form 'r1234, r2345'. 162 # Merged patches if available in the form 'r1234, r2345'.
168 "patches_merged": patches, 163 "patches_merged": patches,
169 # Default for easier output formatting. 164 # Default for easier output formatting.
170 "chromium_revision": "", 165 "chromium_revision": "",
171 # Default for easier output formatting. 166 # Default for easier output formatting.
172 "chromium_branch": "", 167 "chromium_branch": "",
173 # Link to the CL on code review. Trunk pushes are not uploaded, so this 168 # Link to the CL on code review. Trunk pushes are not uploaded, so this
174 # field will be populated below with the recent roll CL link. 169 # field will be populated below with the recent roll CL link.
175 "review_link": MatchSafe(REVIEW_LINK_RE.search(body)), 170 "review_link": MatchSafe(REVIEW_LINK_RE.search(cl_body)),
176 # Link to the commit message on google code. 171 # Link to the commit message on google code.
177 "revision_link": ("https://code.google.com/p/v8/source/detail?r=%s" 172 "revision_link": ("https://code.google.com/p/v8/source/detail?r=%s"
178 % revision), 173 % revision),
179 }, self["patch"] 174 }
175
176 def GetRelease(self, git_hash, branch):
177 self.ReadAndPersistVersion()
178 base_version = [self["major"], self["minor"], self["build"]]
179 version = ".".join(base_version)
180 body = self.GitLog(n=1, format="%B", git_hash=git_hash)
181
182 patches = ""
183 if self["patch"] != "0":
184 version += ".%s" % self["patch"]
185 patches = self.GetMergedPatches(body)
186
187 title = self.GitLog(n=1, format="%s", git_hash=git_hash)
188 return self.GetReleaseDict(
189 git_hash, self.GetBleedingEdgeFromPush(title), branch, version,
190 patches, body), self["patch"]
191
192 def GetReleasesFromBleedingEdge(self):
193 tag_text = self.SVN("log https://v8.googlecode.com/svn/tags -v --limit 20")
194 releases = []
195 for (tag, revision) in re.findall(BLEEDING_EDGE_TAGS_RE, tag_text):
196 git_hash = self.GitSVNFindGitHash(revision)
197
198 # Add bleeding edge release. It does not contain patches or a code
199 # review link, as tags are not uploaded.
200 releases.append(self.GetReleaseDict(
201 git_hash, revision, "bleeding_edge", tag, "", ""))
202 return releases
180 203
181 def GetReleasesFromBranch(self, branch): 204 def GetReleasesFromBranch(self, branch):
182 self.GitReset("svn/%s" % branch) 205 self.GitReset("svn/%s" % branch)
206 if branch == 'bleeding_edge':
207 return self.GetReleasesFromBleedingEdge()
208
183 releases = [] 209 releases = []
184 try: 210 try:
185 for git_hash in self.GitLog(format="%H").splitlines(): 211 for git_hash in self.GitLog(format="%H").splitlines():
186 if self._config[VERSION_FILE] not in self.GitChangedFiles(git_hash): 212 if self._config[VERSION_FILE] not in self.GitChangedFiles(git_hash):
187 continue 213 continue
188 if self.ExceedsMax(releases): 214 if self.ExceedsMax(releases):
189 break # pragma: no cover 215 break # pragma: no cover
190 if not self.GitCheckoutFileSafe(self._config[VERSION_FILE], git_hash): 216 if not self.GitCheckoutFileSafe(self._config[VERSION_FILE], git_hash):
191 break # pragma: no cover 217 break # pragma: no cover
192 218
(...skipping 25 matching lines...) Expand all
218 244
219 releases = [] 245 releases = []
220 if self._options.branch == 'recent': 246 if self._options.branch == 'recent':
221 # Get only recent development on trunk, beta and stable. 247 # Get only recent development on trunk, beta and stable.
222 if self._options.max_releases == 0: # pragma: no cover 248 if self._options.max_releases == 0: # pragma: no cover
223 self._options.max_releases = 10 249 self._options.max_releases = 10
224 beta, stable = SortBranches(branches)[0:2] 250 beta, stable = SortBranches(branches)[0:2]
225 releases += self.GetReleasesFromBranch(stable) 251 releases += self.GetReleasesFromBranch(stable)
226 releases += self.GetReleasesFromBranch(beta) 252 releases += self.GetReleasesFromBranch(beta)
227 releases += self.GetReleasesFromBranch("trunk") 253 releases += self.GetReleasesFromBranch("trunk")
254 releases += self.GetReleasesFromBranch("bleeding_edge")
228 elif self._options.branch == 'all': # pragma: no cover 255 elif self._options.branch == 'all': # pragma: no cover
229 # Retrieve the full release history. 256 # Retrieve the full release history.
230 for branch in branches: 257 for branch in branches:
231 releases += self.GetReleasesFromBranch(branch) 258 releases += self.GetReleasesFromBranch(branch)
232 releases += self.GetReleasesFromBranch("trunk") 259 releases += self.GetReleasesFromBranch("trunk")
260 releases += self.GetReleasesFromBranch("bleeding_edge")
233 else: # pragma: no cover 261 else: # pragma: no cover
234 # Retrieve history for a specified branch. 262 # Retrieve history for a specified branch.
235 assert self._options.branch in branches + ["trunk"] 263 assert self._options.branch in branches + ["trunk", "bleeding_edge"]
236 releases += self.GetReleasesFromBranch(self._options.branch) 264 releases += self.GetReleasesFromBranch(self._options.branch)
237 265
238 self["releases"] = sorted(releases, 266 self["releases"] = sorted(releases,
239 key=lambda r: SortingKey(r["version"]), 267 key=lambda r: SortingKey(r["version"]),
240 reverse=True) 268 reverse=True)
241 269
242 270
243 # TODO(machenbach): Parts of the Chromium setup are c/p from the chromium_roll 271 # TODO(machenbach): Parts of the Chromium setup are c/p from the chromium_roll
244 # script -> unify. 272 # script -> unify.
245 class CheckChromium(Step): 273 class CheckChromium(Step):
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 RetrieveChromiumV8Releases, 472 RetrieveChromiumV8Releases,
445 RietrieveChromiumBranches, 473 RietrieveChromiumBranches,
446 SwitchV8, 474 SwitchV8,
447 CleanUp, 475 CleanUp,
448 WriteOutput, 476 WriteOutput,
449 ] 477 ]
450 478
451 479
452 if __name__ == "__main__": # pragma: no cover 480 if __name__ == "__main__": # pragma: no cover
453 sys.exit(Releases(CONFIG).Run()) 481 sys.exit(Releases(CONFIG).Run())
OLDNEW
« 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