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

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

Issue 646383002: Make releases script ready for the new git workflow. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 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 | « tools/push-to-trunk/common_includes.py ('k') | no next file » | 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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 patches = "" 176 patches = ""
177 if self["patch"] != "0": 177 if self["patch"] != "0":
178 version += ".%s" % self["patch"] 178 version += ".%s" % self["patch"]
179 patches = self.GetMergedPatches(body) 179 patches = self.GetMergedPatches(body)
180 180
181 title = self.GitLog(n=1, format="%s", git_hash=git_hash) 181 title = self.GitLog(n=1, format="%s", git_hash=git_hash)
182 return self.GetReleaseDict( 182 return self.GetReleaseDict(
183 git_hash, self.GetBleedingEdgeFromPush(title), branch, version, 183 git_hash, self.GetBleedingEdgeFromPush(title), branch, version,
184 patches, body), self["patch"] 184 patches, body), self["patch"]
185 185
186 def GetReleasesFromBleedingEdge(self): 186 def GetReleasesFromMaster(self):
187 tag_text = self.SVN("log https://v8.googlecode.com/svn/tags -v --limit 20") 187 tag_text = self.SVN("log https://v8.googlecode.com/svn/tags -v --limit 20")
188 releases = [] 188 releases = []
189 for (tag, revision) in re.findall(BLEEDING_EDGE_TAGS_RE, tag_text): 189 for (tag, revision) in re.findall(BLEEDING_EDGE_TAGS_RE, tag_text):
190 git_hash = self.vc.SvnGit(revision) 190 git_hash = self.vc.SvnGit(revision)
191 191
192 # Add bleeding edge release. It does not contain patches or a code 192 # Add bleeding edge release. It does not contain patches or a code
193 # review link, as tags are not uploaded. 193 # review link, as tags are not uploaded.
194 releases.append(self.GetReleaseDict( 194 releases.append(self.GetReleaseDict(
195 git_hash, revision, "bleeding_edge", tag, "", "")) 195 git_hash, revision, self.vc.MasterBranch(), tag, "", ""))
196 return releases 196 return releases
197 197
198 def GetReleasesFromBranch(self, branch): 198 def GetReleasesFromBranch(self, branch):
199 self.GitReset(self.vc.RemoteBranch(branch)) 199 self.GitReset(self.vc.RemoteBranch(branch))
200 # TODO(machenbach): Rename this when switching to the git mirror. 200 if branch == self.vc.MasterBranch():
201 if branch == 'bleeding_edge': 201 return self.GetReleasesFromMaster()
202 return self.GetReleasesFromBleedingEdge()
203 202
204 releases = [] 203 releases = []
205 try: 204 try:
206 for git_hash in self.GitLog(format="%H").splitlines(): 205 for git_hash in self.GitLog(format="%H").splitlines():
207 if VERSION_FILE not in self.GitChangedFiles(git_hash): 206 if VERSION_FILE not in self.GitChangedFiles(git_hash):
208 continue 207 continue
209 if self.ExceedsMax(releases): 208 if self.ExceedsMax(releases):
210 break # pragma: no cover 209 break # pragma: no cover
211 if not self.GitCheckoutFileSafe(VERSION_FILE, git_hash): 210 if not self.GitCheckoutFileSafe(VERSION_FILE, git_hash):
212 break # pragma: no cover 211 break # pragma: no cover
213 212
214 release, patch_level = self.GetRelease(git_hash, branch) 213 release, patch_level = self.GetRelease(git_hash, branch)
215 releases.append(release) 214 releases.append(release)
216 215
217 # Follow branches only until their creation point. 216 # Follow branches only until their creation point.
218 # TODO(machenbach): This omits patches if the version file wasn't 217 # TODO(machenbach): This omits patches if the version file wasn't
219 # manipulated correctly. Find a better way to detect the point where 218 # manipulated correctly. Find a better way to detect the point where
220 # the parent of the branch head leads to the trunk branch. 219 # the parent of the branch head leads to the trunk branch.
221 if branch != "trunk" and patch_level == "0": 220 if branch != self.vc.CandidateBranch() and patch_level == "0":
222 break 221 break
223 222
224 # Allow Ctrl-C interrupt. 223 # Allow Ctrl-C interrupt.
225 except (KeyboardInterrupt, SystemExit): # pragma: no cover 224 except (KeyboardInterrupt, SystemExit): # pragma: no cover
226 pass 225 pass
227 226
228 # Clean up checked-out version file. 227 # Clean up checked-out version file.
229 self.GitCheckoutFileSafe(VERSION_FILE, "HEAD") 228 self.GitCheckoutFileSafe(VERSION_FILE, "HEAD")
230 return releases 229 return releases
231 230
232 def RunStep(self): 231 def RunStep(self):
233 self.GitCreateBranch(self._config["BRANCHNAME"]) 232 self.GitCreateBranch(self._config["BRANCHNAME"])
234 branches = self.vc.GetBranches() 233 branches = self.vc.GetBranches()
235 releases = [] 234 releases = []
236 if self._options.branch == 'recent': 235 if self._options.branch == 'recent':
237 # Get only recent development on trunk, beta and stable. 236 # Get only recent development on trunk, beta and stable.
238 if self._options.max_releases == 0: # pragma: no cover 237 if self._options.max_releases == 0: # pragma: no cover
239 self._options.max_releases = 10 238 self._options.max_releases = 10
240 beta, stable = SortBranches(branches)[0:2] 239 beta, stable = SortBranches(branches)[0:2]
241 releases += self.GetReleasesFromBranch(stable) 240 releases += self.GetReleasesFromBranch(stable)
242 releases += self.GetReleasesFromBranch(beta) 241 releases += self.GetReleasesFromBranch(beta)
243 releases += self.GetReleasesFromBranch("trunk") 242 releases += self.GetReleasesFromBranch(self.vc.CandidateBranch())
244 releases += self.GetReleasesFromBranch("bleeding_edge") 243 releases += self.GetReleasesFromBranch(self.vc.MasterBranch())
245 elif self._options.branch == 'all': # pragma: no cover 244 elif self._options.branch == 'all': # pragma: no cover
246 # Retrieve the full release history. 245 # Retrieve the full release history.
247 for branch in branches: 246 for branch in branches:
248 releases += self.GetReleasesFromBranch(branch) 247 releases += self.GetReleasesFromBranch(branch)
249 releases += self.GetReleasesFromBranch("trunk") 248 releases += self.GetReleasesFromBranch(self.vc.CandidateBranch())
250 releases += self.GetReleasesFromBranch("bleeding_edge") 249 releases += self.GetReleasesFromBranch(self.vc.MasterBranch())
251 else: # pragma: no cover 250 else: # pragma: no cover
252 # Retrieve history for a specified branch. 251 # Retrieve history for a specified branch.
253 assert self._options.branch in branches + ["trunk", "bleeding_edge"] 252 assert self._options.branch in (branches +
253 [self.vc.CandidateBranch(), self.vc.MasterBranch()])
254 releases += self.GetReleasesFromBranch(self._options.branch) 254 releases += self.GetReleasesFromBranch(self._options.branch)
255 255
256 self["releases"] = sorted(releases, 256 self["releases"] = sorted(releases,
257 key=lambda r: SortingKey(r["version"]), 257 key=lambda r: SortingKey(r["version"]),
258 reverse=True) 258 reverse=True)
259 259
260 260
261 class SwitchChromium(Step): 261 class SwitchChromium(Step):
262 MESSAGE = "Switch to Chromium checkout." 262 MESSAGE = "Switch to Chromium checkout."
263 263
(...skipping 24 matching lines...) Expand all
288 return step.GitConvertToSVNRevision( 288 return step.GitConvertToSVNRevision(
289 revision, cwd=os.path.join(step._options.chromium, "v8")) 289 revision, cwd=os.path.join(step._options.chromium, "v8"))
290 290
291 291
292 class RetrieveChromiumV8Releases(Step): 292 class RetrieveChromiumV8Releases(Step):
293 MESSAGE = "Retrieve V8 releases from Chromium DEPS." 293 MESSAGE = "Retrieve V8 releases from Chromium DEPS."
294 294
295 def RunStep(self): 295 def RunStep(self):
296 cwd = self._options.chromium 296 cwd = self._options.chromium
297 releases = filter( 297 releases = filter(
298 lambda r: r["branch"] in ["trunk", "bleeding_edge"], self["releases"]) 298 lambda r: r["branch"] in [self.vc.CandidateBranch(),
299 self.vc.MasterBranch()],
300 self["releases"])
299 if not releases: # pragma: no cover 301 if not releases: # pragma: no cover
300 print "No releases detected. Skipping chromium history." 302 print "No releases detected. Skipping chromium history."
301 return True 303 return True
302 304
303 # Update v8 checkout in chromium. 305 # Update v8 checkout in chromium.
304 self.GitFetchOrigin(cwd=os.path.join(cwd, "v8")) 306 self.GitFetchOrigin(cwd=os.path.join(cwd, "v8"))
305 307
306 oldest_v8_rev = int(releases[-1]["revision"]) 308 oldest_v8_rev = int(releases[-1]["revision"])
307 309
308 cr_releases = [] 310 cr_releases = []
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 for revision, ranges in all_ranges.iteritems(): 342 for revision, ranges in all_ranges.iteritems():
341 releases_dict.get(revision, {})["chromium_revision"] = ranges 343 releases_dict.get(revision, {})["chromium_revision"] = ranges
342 344
343 345
344 # TODO(machenbach): Unify common code with method above. 346 # TODO(machenbach): Unify common code with method above.
345 class RietrieveChromiumBranches(Step): 347 class RietrieveChromiumBranches(Step):
346 MESSAGE = "Retrieve Chromium branch information." 348 MESSAGE = "Retrieve Chromium branch information."
347 349
348 def RunStep(self): 350 def RunStep(self):
349 cwd = self._options.chromium 351 cwd = self._options.chromium
350 trunk_releases = filter(lambda r: r["branch"] == "trunk", self["releases"]) 352 trunk_releases = filter(lambda r: r["branch"] == self.vc.CandidateBranch(),
353 self["releases"])
351 if not trunk_releases: # pragma: no cover 354 if not trunk_releases: # pragma: no cover
352 print "No trunk releases detected. Skipping chromium history." 355 print "No trunk releases detected. Skipping chromium history."
353 return True 356 return True
354 357
355 oldest_v8_rev = int(trunk_releases[-1]["revision"]) 358 oldest_v8_rev = int(trunk_releases[-1]["revision"])
356 359
357 # Filter out irrelevant branches. 360 # Filter out irrelevant branches.
358 branches = filter(lambda r: re.match(r"branch-heads/\d+", r), 361 branches = filter(lambda r: re.match(r"branch-heads/\d+", r),
359 self.GitRemotes(cwd=cwd)) 362 self.GitRemotes(cwd=cwd))
360 363
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 UpdateChromiumCheckout, 460 UpdateChromiumCheckout,
458 RetrieveChromiumV8Releases, 461 RetrieveChromiumV8Releases,
459 RietrieveChromiumBranches, 462 RietrieveChromiumBranches,
460 CleanUp, 463 CleanUp,
461 WriteOutput, 464 WriteOutput,
462 ] 465 ]
463 466
464 467
465 if __name__ == "__main__": # pragma: no cover 468 if __name__ == "__main__": # pragma: no cover
466 sys.exit(Releases().Run()) 469 sys.exit(Releases().Run())
OLDNEW
« no previous file with comments | « tools/push-to-trunk/common_includes.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698