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

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

Issue 196883003: Suppress error handling for test coverage in push and merge scripts. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 9 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/merge_to_branch.py ('k') | 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 2013 the V8 project authors. All rights reserved. 2 # Copyright 2013 the V8 project authors. All rights reserved.
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following 10 # copyright notice, this list of conditions and the following
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 if self._options.last_bleeding_edge: 89 if self._options.last_bleeding_edge:
90 # Read the bleeding edge revision of the last push from a command-line 90 # Read the bleeding edge revision of the last push from a command-line
91 # option. 91 # option.
92 last_push_bleeding_edge = self._options.last_bleeding_edge 92 last_push_bleeding_edge = self._options.last_bleeding_edge
93 else: 93 else:
94 # Retrieve the bleeding edge revision of the last push from the text in 94 # Retrieve the bleeding edge revision of the last push from the text in
95 # the push commit message. 95 # the push commit message.
96 last_push_title = self.GitLog(n=1, format="%s", git_hash=last_push) 96 last_push_title = self.GitLog(n=1, format="%s", git_hash=last_push)
97 last_push_be_svn = PUSH_MESSAGE_RE.match(last_push_title).group(1) 97 last_push_be_svn = PUSH_MESSAGE_RE.match(last_push_title).group(1)
98 if not last_push_be_svn: 98 if not last_push_be_svn: # pragma: no cover
99 self.Die("Could not retrieve bleeding edge revision for trunk push %s" 99 self.Die("Could not retrieve bleeding edge revision for trunk push %s"
100 % last_push) 100 % last_push)
101 last_push_bleeding_edge = self.GitSVNFindGitHash(last_push_be_svn) 101 last_push_bleeding_edge = self.GitSVNFindGitHash(last_push_be_svn)
102 if not last_push_bleeding_edge: 102 if not last_push_bleeding_edge: # pragma: no cover
103 self.Die("Could not retrieve bleeding edge git hash for trunk push %s" 103 self.Die("Could not retrieve bleeding edge git hash for trunk push %s"
104 % last_push) 104 % last_push)
105 105
106 # TODO(machenbach): last_push_trunk points to the svn revision on trunk. 106 # TODO(machenbach): last_push_trunk points to the svn revision on trunk.
107 # It is not used yet but we'll need it for retrieving the current version. 107 # It is not used yet but we'll need it for retrieving the current version.
108 self["last_push_trunk"] = last_push 108 self["last_push_trunk"] = last_push
109 # TODO(machenbach): This currently points to the prepare push revision that 109 # TODO(machenbach): This currently points to the prepare push revision that
110 # will be deprecated soon. After the deprecation it will point to the last 110 # will be deprecated soon. After the deprecation it will point to the last
111 # bleeding_edge revision that went into the last push. 111 # bleeding_edge revision that went into the last push.
112 self["last_push_bleeding_edge"] = last_push_bleeding_edge 112 self["last_push_bleeding_edge"] = last_push_bleeding_edge
113 113
114 114
115 class PrepareChangeLog(Step): 115 class PrepareChangeLog(Step):
116 MESSAGE = "Prepare raw ChangeLog entry." 116 MESSAGE = "Prepare raw ChangeLog entry."
117 117
118 def Reload(self, body): 118 def Reload(self, body):
119 """Attempts to reload the commit message from rietveld in order to allow 119 """Attempts to reload the commit message from rietveld in order to allow
120 late changes to the LOG flag. Note: This is brittle to future changes of 120 late changes to the LOG flag. Note: This is brittle to future changes of
121 the web page name or structure. 121 the web page name or structure.
122 """ 122 """
123 match = re.search(r"^Review URL: https://codereview\.chromium\.org/(\d+)$", 123 match = re.search(r"^Review URL: https://codereview\.chromium\.org/(\d+)$",
124 body, flags=re.M) 124 body, flags=re.M)
125 if match: 125 if match:
126 cl_url = ("https://codereview.chromium.org/%s/description" 126 cl_url = ("https://codereview.chromium.org/%s/description"
127 % match.group(1)) 127 % match.group(1))
128 try: 128 try:
129 # Fetch from Rietveld but only retry once with one second delay since 129 # Fetch from Rietveld but only retry once with one second delay since
130 # there might be many revisions. 130 # there might be many revisions.
131 body = self.ReadURL(cl_url, wait_plan=[1]) 131 body = self.ReadURL(cl_url, wait_plan=[1])
132 except urllib2.URLError: 132 except urllib2.URLError: # pragma: no cover
133 pass 133 pass
134 return body 134 return body
135 135
136 def RunStep(self): 136 def RunStep(self):
137 # These version numbers are used again later for the trunk commit. 137 # These version numbers are used again later for the trunk commit.
138 self.ReadAndPersistVersion() 138 self.ReadAndPersistVersion()
139 self["date"] = self.GetDate() 139 self["date"] = self.GetDate()
140 self["version"] = "%s.%s.%s" % (self["major"], 140 self["version"] = "%s.%s.%s" % (self["major"],
141 self["minor"], 141 self["minor"],
142 self["build"]) 142 self["build"])
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 "save the file and exit your EDITOR. ") 179 "save the file and exit your EDITOR. ")
180 self.ReadLine(default="") 180 self.ReadLine(default="")
181 self.Editor(self.Config(CHANGELOG_ENTRY_FILE)) 181 self.Editor(self.Config(CHANGELOG_ENTRY_FILE))
182 182
183 # Strip comments and reformat with correct indentation. 183 # Strip comments and reformat with correct indentation.
184 changelog_entry = FileToText(self.Config(CHANGELOG_ENTRY_FILE)).rstrip() 184 changelog_entry = FileToText(self.Config(CHANGELOG_ENTRY_FILE)).rstrip()
185 changelog_entry = StripComments(changelog_entry) 185 changelog_entry = StripComments(changelog_entry)
186 changelog_entry = "\n".join(map(Fill80, changelog_entry.splitlines())) 186 changelog_entry = "\n".join(map(Fill80, changelog_entry.splitlines()))
187 changelog_entry = changelog_entry.lstrip() 187 changelog_entry = changelog_entry.lstrip()
188 188
189 if changelog_entry == "": 189 if changelog_entry == "": # pragma: no cover
190 self.Die("Empty ChangeLog entry.") 190 self.Die("Empty ChangeLog entry.")
191 191
192 # Safe new change log for adding it later to the trunk patch. 192 # Safe new change log for adding it later to the trunk patch.
193 TextToFile(changelog_entry, self.Config(NEW_CHANGELOG_FILE)) 193 TextToFile(changelog_entry, self.Config(NEW_CHANGELOG_FILE))
194 194
195 old_change_log = FileToText(self.Config(CHANGELOG_FILE)) 195 old_change_log = FileToText(self.Config(CHANGELOG_FILE))
196 new_change_log = "%s\n\n\n%s" % (changelog_entry, old_change_log) 196 new_change_log = "%s\n\n\n%s" % (changelog_entry, old_change_log)
197 TextToFile(new_change_log, self.Config(CHANGELOG_FILE)) 197 TextToFile(new_change_log, self.Config(CHANGELOG_FILE))
198 198
199 199
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 suffix = PUSH_MESSAGE_SUFFIX % int(self["svn_revision"]) 283 suffix = PUSH_MESSAGE_SUFFIX % int(self["svn_revision"])
284 text = MSub(r"^(Version \d+\.\d+\.\d+)$", "\\1%s" % suffix, text) 284 text = MSub(r"^(Version \d+\.\d+\.\d+)$", "\\1%s" % suffix, text)
285 285
286 # Remove indentation and merge paragraphs into single long lines, keeping 286 # Remove indentation and merge paragraphs into single long lines, keeping
287 # empty lines between them. 287 # empty lines between them.
288 def SplitMapJoin(split_text, fun, join_text): 288 def SplitMapJoin(split_text, fun, join_text):
289 return lambda text: join_text.join(map(fun, text.split(split_text))) 289 return lambda text: join_text.join(map(fun, text.split(split_text)))
290 strip = lambda line: line.strip() 290 strip = lambda line: line.strip()
291 text = SplitMapJoin("\n\n", SplitMapJoin("\n", strip, " "), "\n\n")(text) 291 text = SplitMapJoin("\n\n", SplitMapJoin("\n", strip, " "), "\n\n")(text)
292 292
293 if not text: 293 if not text: # pragma: no cover
294 self.Die("Commit message editing failed.") 294 self.Die("Commit message editing failed.")
295 TextToFile(text, self.Config(COMMITMSG_FILE)) 295 TextToFile(text, self.Config(COMMITMSG_FILE))
296 os.remove(self.Config(CHANGELOG_ENTRY_FILE)) 296 os.remove(self.Config(CHANGELOG_ENTRY_FILE))
297 297
298 298
299 class NewBranch(Step): 299 class NewBranch(Step):
300 MESSAGE = "Create a new branch from trunk." 300 MESSAGE = "Create a new branch from trunk."
301 301
302 def RunStep(self): 302 def RunStep(self):
303 self.GitCreateBranch(self.Config(TRUNKBRANCH), "svn/trunk") 303 self.GitCreateBranch(self.Config(TRUNKBRANCH), "svn/trunk")
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 Command("rm", "-f %s*" % self.Config(COMMITMSG_FILE)) 340 Command("rm", "-f %s*" % self.Config(COMMITMSG_FILE))
341 341
342 342
343 class SanityCheck(Step): 343 class SanityCheck(Step):
344 MESSAGE = "Sanity check." 344 MESSAGE = "Sanity check."
345 345
346 def RunStep(self): 346 def RunStep(self):
347 if not self.Confirm("Please check if your local checkout is sane: Inspect " 347 if not self.Confirm("Please check if your local checkout is sane: Inspect "
348 "%s, compile, run tests. Do you want to commit this new trunk " 348 "%s, compile, run tests. Do you want to commit this new trunk "
349 "revision to the repository?" % self.Config(VERSION_FILE)): 349 "revision to the repository?" % self.Config(VERSION_FILE)):
350 self.Die("Execution canceled.") 350 self.Die("Execution canceled.") # pragma: no cover
351 351
352 352
353 class CommitSVN(Step): 353 class CommitSVN(Step):
354 MESSAGE = "Commit to SVN." 354 MESSAGE = "Commit to SVN."
355 355
356 def RunStep(self): 356 def RunStep(self):
357 result = self.GitSVNDCommit() 357 result = self.GitSVNDCommit()
358 if not result: 358 if not result: # pragma: no cover
359 self.Die("'git svn dcommit' failed.") 359 self.Die("'git svn dcommit' failed.")
360 result = filter(lambda x: re.search(r"^Committed r[0-9]+", x), 360 result = filter(lambda x: re.search(r"^Committed r[0-9]+", x),
361 result.splitlines()) 361 result.splitlines())
362 if len(result) > 0: 362 if len(result) > 0:
363 self["trunk_revision"] = re.sub(r"^Committed r([0-9]+)", r"\1",result[0]) 363 self["trunk_revision"] = re.sub(r"^Committed r([0-9]+)", r"\1",result[0])
364 364
365 # Sometimes grepping for the revision fails. No idea why. If you figure 365 # Sometimes grepping for the revision fails. No idea why. If you figure
366 # out why it is flaky, please do fix it properly. 366 # out why it is flaky, please do fix it properly.
367 if not self["trunk_revision"]: 367 if not self["trunk_revision"]:
368 print("Sorry, grepping for the SVN revision failed. Please look for it " 368 print("Sorry, grepping for the SVN revision failed. Please look for it "
(...skipping 29 matching lines...) Expand all
398 398
399 class SwitchChromium(Step): 399 class SwitchChromium(Step):
400 MESSAGE = "Switch to Chromium checkout." 400 MESSAGE = "Switch to Chromium checkout."
401 REQUIRES = "chrome_path" 401 REQUIRES = "chrome_path"
402 402
403 def RunStep(self): 403 def RunStep(self):
404 self["v8_path"] = os.getcwd() 404 self["v8_path"] = os.getcwd()
405 os.chdir(self["chrome_path"]) 405 os.chdir(self["chrome_path"])
406 self.InitialEnvironmentChecks() 406 self.InitialEnvironmentChecks()
407 # Check for a clean workdir. 407 # Check for a clean workdir.
408 if not self.GitIsWorkdirClean(): 408 if not self.GitIsWorkdirClean(): # pragma: no cover
409 self.Die("Workspace is not clean. Please commit or undo your changes.") 409 self.Die("Workspace is not clean. Please commit or undo your changes.")
410 # Assert that the DEPS file is there. 410 # Assert that the DEPS file is there.
411 if not os.path.exists(self.Config(DEPS_FILE)): 411 if not os.path.exists(self.Config(DEPS_FILE)): # pragma: no cover
412 self.Die("DEPS file not present.") 412 self.Die("DEPS file not present.")
413 413
414 414
415 class UpdateChromiumCheckout(Step): 415 class UpdateChromiumCheckout(Step):
416 MESSAGE = "Update the checkout and create a new branch." 416 MESSAGE = "Update the checkout and create a new branch."
417 REQUIRES = "chrome_path" 417 REQUIRES = "chrome_path"
418 418
419 def RunStep(self): 419 def RunStep(self):
420 os.chdir(self["chrome_path"]) 420 os.chdir(self["chrome_path"])
421 self.GitCheckout("master") 421 self.GitCheckout("master")
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 461
462 462
463 class CleanUp(Step): 463 class CleanUp(Step):
464 MESSAGE = "Done!" 464 MESSAGE = "Done!"
465 465
466 def RunStep(self): 466 def RunStep(self):
467 if self["chrome_path"]: 467 if self["chrome_path"]:
468 print("Congratulations, you have successfully created the trunk " 468 print("Congratulations, you have successfully created the trunk "
469 "revision %s and rolled it into Chromium. Please don't forget to " 469 "revision %s and rolled it into Chromium. Please don't forget to "
470 "update the v8rel spreadsheet:" % self["version"]) 470 "update the v8rel spreadsheet:" % self["version"])
471 else: 471 else: # pragma: no cover
472 print("Congratulations, you have successfully created the trunk " 472 print("Congratulations, you have successfully created the trunk "
473 "revision %s. Please don't forget to roll this new version into " 473 "revision %s. Please don't forget to roll this new version into "
474 "Chromium, and to update the v8rel spreadsheet:" 474 "Chromium, and to update the v8rel spreadsheet:"
475 % self["version"]) 475 % self["version"])
476 print "%s\ttrunk\t%s" % (self["version"], 476 print "%s\ttrunk\t%s" % (self["version"],
477 self["trunk_revision"]) 477 self["trunk_revision"])
478 478
479 self.CommonCleanup() 479 self.CommonCleanup()
480 if self.Config(TRUNKBRANCH) != self["current_branch"]: 480 if self.Config(TRUNKBRANCH) != self["current_branch"]:
481 self.GitDeleteBranch(self.Config(TRUNKBRANCH)) 481 self.GitDeleteBranch(self.Config(TRUNKBRANCH))
(...skipping 11 matching lines...) Expand all
493 parser.add_argument("-b", "--last-bleeding-edge", 493 parser.add_argument("-b", "--last-bleeding-edge",
494 help=("The git commit ID of the last bleeding edge " 494 help=("The git commit ID of the last bleeding edge "
495 "revision that was pushed to trunk. This is " 495 "revision that was pushed to trunk. This is "
496 "used for the auto-generated ChangeLog entry.")) 496 "used for the auto-generated ChangeLog entry."))
497 parser.add_argument("-c", "--chromium", 497 parser.add_argument("-c", "--chromium",
498 help=("The path to your Chromium src/ " 498 help=("The path to your Chromium src/ "
499 "directory to automate the V8 roll.")) 499 "directory to automate the V8 roll."))
500 parser.add_argument("-l", "--last-push", 500 parser.add_argument("-l", "--last-push",
501 help="The git commit ID of the last push to trunk.") 501 help="The git commit ID of the last push to trunk.")
502 502
503 def _ProcessOptions(self, options): 503 def _ProcessOptions(self, options): # pragma: no cover
504 if not options.manual and not options.reviewer: 504 if not options.manual and not options.reviewer:
505 print "A reviewer (-r) is required in (semi-)automatic mode." 505 print "A reviewer (-r) is required in (semi-)automatic mode."
506 return False 506 return False
507 if not options.manual and not options.chromium: 507 if not options.manual and not options.chromium:
508 print "A chromium checkout (-c) is required in (semi-)automatic mode." 508 print "A chromium checkout (-c) is required in (semi-)automatic mode."
509 return False 509 return False
510 if not options.manual and not options.author: 510 if not options.manual and not options.author:
511 print "Specify your chromium.org email with -a in (semi-)automatic mode." 511 print "Specify your chromium.org email with -a in (semi-)automatic mode."
512 return False 512 return False
513 513
(...skipping 22 matching lines...) Expand all
536 TagRevision, 536 TagRevision,
537 CheckChromium, 537 CheckChromium,
538 SwitchChromium, 538 SwitchChromium,
539 UpdateChromiumCheckout, 539 UpdateChromiumCheckout,
540 UploadCL, 540 UploadCL,
541 SwitchV8, 541 SwitchV8,
542 CleanUp, 542 CleanUp,
543 ] 543 ]
544 544
545 545
546 if __name__ == "__main__": 546 if __name__ == "__main__": # pragma: no cover
547 sys.exit(PushToTrunk(CONFIG).Run()) 547 sys.exit(PushToTrunk(CONFIG).Run())
OLDNEW
« no previous file with comments | « tools/push-to-trunk/merge_to_branch.py ('k') | tools/push-to-trunk/test_scripts.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698