OLD | NEW |
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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 103 |
104 # TODO(machenbach): last_push_trunk points to the svn revision on trunk. | 104 # TODO(machenbach): last_push_trunk points to the svn revision on trunk. |
105 # It is not used yet but we'll need it for retrieving the current version. | 105 # It is not used yet but we'll need it for retrieving the current version. |
106 self["last_push_trunk"] = last_push | 106 self["last_push_trunk"] = last_push |
107 # TODO(machenbach): This currently points to the prepare push revision that | 107 # TODO(machenbach): This currently points to the prepare push revision that |
108 # will be deprecated soon. After the deprecation it will point to the last | 108 # will be deprecated soon. After the deprecation it will point to the last |
109 # bleeding_edge revision that went into the last push. | 109 # bleeding_edge revision that went into the last push. |
110 self["last_push_bleeding_edge"] = last_push_bleeding_edge | 110 self["last_push_bleeding_edge"] = last_push_bleeding_edge |
111 | 111 |
112 | 112 |
| 113 class IncrementVersion(Step): |
| 114 MESSAGE = "Increment version number." |
| 115 |
| 116 def RunStep(self): |
| 117 # Retrieve current version from last trunk push. |
| 118 self.GitCheckoutFile(self.Config(VERSION_FILE), self["last_push_trunk"]) |
| 119 self.ReadAndPersistVersion() |
| 120 |
| 121 if self.Confirm(("Automatically increment BUILD_NUMBER? (Saying 'n' will " |
| 122 "fire up your EDITOR on %s so you can make arbitrary " |
| 123 "changes. When you're done, save the file and exit your " |
| 124 "EDITOR.)" % self.Config(VERSION_FILE))): |
| 125 text = FileToText(self.Config(VERSION_FILE)) |
| 126 text = MSub(r"(?<=#define BUILD_NUMBER)(?P<space>\s+)\d*$", |
| 127 r"\g<space>%s" % str(int(self["build"]) + 1), |
| 128 text) |
| 129 TextToFile(text, self.Config(VERSION_FILE)) |
| 130 else: |
| 131 self.Editor(self.Config(VERSION_FILE)) |
| 132 |
| 133 # Variables prefixed with 'new_' contain the new version numbers for the |
| 134 # ongoing trunk push. |
| 135 self.ReadAndPersistVersion("new_") |
| 136 self["version"] = "%s.%s.%s" % (self["new_major"], |
| 137 self["new_minor"], |
| 138 self["new_build"]) |
| 139 |
| 140 # TODO(machenbach): The following will be deprecated. Increment version |
| 141 # numbers for version.cc on bleeding_edge (new build level on trunk + 1). |
| 142 text = FileToText(self.Config(VERSION_FILE)) |
| 143 text = MSub(r"(?<=#define BUILD_NUMBER)(?P<space>\s+)\d*$", |
| 144 r"\g<space>%s" % str(int(self["new_build"]) + 1), |
| 145 text) |
| 146 TextToFile(text, self.Config(VERSION_FILE)) |
| 147 self.ReadAndPersistVersion("new_be_") |
| 148 |
| 149 |
113 class PrepareChangeLog(Step): | 150 class PrepareChangeLog(Step): |
114 MESSAGE = "Prepare raw ChangeLog entry." | 151 MESSAGE = "Prepare raw ChangeLog entry." |
115 | 152 |
116 def Reload(self, body): | 153 def Reload(self, body): |
117 """Attempts to reload the commit message from rietveld in order to allow | 154 """Attempts to reload the commit message from rietveld in order to allow |
118 late changes to the LOG flag. Note: This is brittle to future changes of | 155 late changes to the LOG flag. Note: This is brittle to future changes of |
119 the web page name or structure. | 156 the web page name or structure. |
120 """ | 157 """ |
121 match = re.search(r"^Review URL: https://codereview\.chromium\.org/(\d+)$", | 158 match = re.search(r"^Review URL: https://codereview\.chromium\.org/(\d+)$", |
122 body, flags=re.M) | 159 body, flags=re.M) |
123 if match: | 160 if match: |
124 cl_url = ("https://codereview.chromium.org/%s/description" | 161 cl_url = ("https://codereview.chromium.org/%s/description" |
125 % match.group(1)) | 162 % match.group(1)) |
126 try: | 163 try: |
127 # Fetch from Rietveld but only retry once with one second delay since | 164 # Fetch from Rietveld but only retry once with one second delay since |
128 # there might be many revisions. | 165 # there might be many revisions. |
129 body = self.ReadURL(cl_url, wait_plan=[1]) | 166 body = self.ReadURL(cl_url, wait_plan=[1]) |
130 except urllib2.URLError: # pragma: no cover | 167 except urllib2.URLError: # pragma: no cover |
131 pass | 168 pass |
132 return body | 169 return body |
133 | 170 |
134 def RunStep(self): | 171 def RunStep(self): |
135 # These version numbers are used again later for the trunk commit. | |
136 self.ReadAndPersistVersion() | |
137 self["date"] = self.GetDate() | 172 self["date"] = self.GetDate() |
138 self["version"] = "%s.%s.%s" % (self["major"], | 173 output = "%s: Version %s\n\n" % (self["date"], self["version"]) |
139 self["minor"], | |
140 self["build"]) | |
141 output = "%s: Version %s\n\n" % (self["date"], | |
142 self["version"]) | |
143 TextToFile(output, self.Config(CHANGELOG_ENTRY_FILE)) | 174 TextToFile(output, self.Config(CHANGELOG_ENTRY_FILE)) |
144 commits = self.GitLog(format="%H", | 175 commits = self.GitLog(format="%H", |
145 git_hash="%s..HEAD" % self["last_push_bleeding_edge"]) | 176 git_hash="%s..HEAD" % self["last_push_bleeding_edge"]) |
146 | 177 |
147 # Cache raw commit messages. | 178 # Cache raw commit messages. |
148 commit_messages = [ | 179 commit_messages = [ |
149 [ | 180 [ |
150 self.GitLog(n=1, format="%s", git_hash=commit), | 181 self.GitLog(n=1, format="%s", git_hash=commit), |
151 self.Reload(self.GitLog(n=1, format="%B", git_hash=commit)), | 182 self.Reload(self.GitLog(n=1, format="%B", git_hash=commit)), |
152 self.GitLog(n=1, format="%an", git_hash=commit), | 183 self.GitLog(n=1, format="%an", git_hash=commit), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 changelog_entry = "\n".join(map(Fill80, changelog_entry.splitlines())) | 215 changelog_entry = "\n".join(map(Fill80, changelog_entry.splitlines())) |
185 changelog_entry = changelog_entry.lstrip() | 216 changelog_entry = changelog_entry.lstrip() |
186 | 217 |
187 if changelog_entry == "": # pragma: no cover | 218 if changelog_entry == "": # pragma: no cover |
188 self.Die("Empty ChangeLog entry.") | 219 self.Die("Empty ChangeLog entry.") |
189 | 220 |
190 # Safe new change log for adding it later to the trunk patch. | 221 # Safe new change log for adding it later to the trunk patch. |
191 TextToFile(changelog_entry, self.Config(CHANGELOG_ENTRY_FILE)) | 222 TextToFile(changelog_entry, self.Config(CHANGELOG_ENTRY_FILE)) |
192 | 223 |
193 | 224 |
194 class IncrementVersion(Step): | |
195 MESSAGE = "Increment version number." | |
196 | |
197 def RunStep(self): | |
198 new_build = str(int(self["build"]) + 1) | |
199 | |
200 if self.Confirm(("Automatically increment BUILD_NUMBER? (Saying 'n' will " | |
201 "fire up your EDITOR on %s so you can make arbitrary " | |
202 "changes. When you're done, save the file and exit your " | |
203 "EDITOR.)" % self.Config(VERSION_FILE))): | |
204 text = FileToText(self.Config(VERSION_FILE)) | |
205 text = MSub(r"(?<=#define BUILD_NUMBER)(?P<space>\s+)\d*$", | |
206 r"\g<space>%s" % new_build, | |
207 text) | |
208 TextToFile(text, self.Config(VERSION_FILE)) | |
209 else: | |
210 self.Editor(self.Config(VERSION_FILE)) | |
211 | |
212 self.ReadAndPersistVersion("new_") | |
213 | |
214 | |
215 class CommitLocal(Step): | 225 class CommitLocal(Step): |
216 MESSAGE = "Commit to local branch." | 226 MESSAGE = "Commit to local branch." |
217 | 227 |
218 def RunStep(self): | 228 def RunStep(self): |
219 self["prep_commit_msg"] = ("Prepare push to trunk. " | 229 self["prep_commit_msg"] = ("Prepare push to trunk. " |
220 "Now working on version %s.%s.%s." % (self["new_major"], | 230 "Now working on version %s.%s.%s." % (self["new_be_major"], |
221 self["new_minor"], | 231 self["new_be_minor"], |
222 self["new_build"])) | 232 self["new_be_build"])) |
223 | 233 |
224 # Include optional TBR only in the git command. The persisted commit | 234 # Include optional TBR only in the git command. The persisted commit |
225 # message is used for finding the commit again later. | 235 # message is used for finding the commit again later. |
226 if self._options.tbr_commit: | 236 if self._options.tbr_commit: |
227 message = "%s\n\nTBR=%s" % (self["prep_commit_msg"], | 237 message = "%s\n\nTBR=%s" % (self["prep_commit_msg"], |
228 self._options.reviewer) | 238 self._options.reviewer) |
229 else: | 239 else: |
230 message = "%s" % self["prep_commit_msg"] | 240 message = "%s" % self["prep_commit_msg"] |
231 self.GitCommit(message) | 241 self.GitCommit(message) |
232 | 242 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 class SetVersion(Step): | 332 class SetVersion(Step): |
323 MESSAGE = "Set correct version for trunk." | 333 MESSAGE = "Set correct version for trunk." |
324 | 334 |
325 def RunStep(self): | 335 def RunStep(self): |
326 # The version file has been modified by the patch. Reset it to the version | 336 # The version file has been modified by the patch. Reset it to the version |
327 # on trunk and apply the correct version. | 337 # on trunk and apply the correct version. |
328 self.GitCheckoutFile(self.Config(VERSION_FILE), "svn/trunk") | 338 self.GitCheckoutFile(self.Config(VERSION_FILE), "svn/trunk") |
329 output = "" | 339 output = "" |
330 for line in FileToText(self.Config(VERSION_FILE)).splitlines(): | 340 for line in FileToText(self.Config(VERSION_FILE)).splitlines(): |
331 if line.startswith("#define MAJOR_VERSION"): | 341 if line.startswith("#define MAJOR_VERSION"): |
332 line = re.sub("\d+$", self["major"], line) | 342 line = re.sub("\d+$", self["new_major"], line) |
333 elif line.startswith("#define MINOR_VERSION"): | 343 elif line.startswith("#define MINOR_VERSION"): |
334 line = re.sub("\d+$", self["minor"], line) | 344 line = re.sub("\d+$", self["new_minor"], line) |
335 elif line.startswith("#define BUILD_NUMBER"): | 345 elif line.startswith("#define BUILD_NUMBER"): |
336 line = re.sub("\d+$", self["build"], line) | 346 line = re.sub("\d+$", self["new_build"], line) |
337 elif line.startswith("#define PATCH_LEVEL"): | 347 elif line.startswith("#define PATCH_LEVEL"): |
338 line = re.sub("\d+$", "0", line) | 348 line = re.sub("\d+$", "0", line) |
339 elif line.startswith("#define IS_CANDIDATE_VERSION"): | 349 elif line.startswith("#define IS_CANDIDATE_VERSION"): |
340 line = re.sub("\d+$", "0", line) | 350 line = re.sub("\d+$", "0", line) |
341 output += "%s\n" % line | 351 output += "%s\n" % line |
342 TextToFile(output, self.Config(VERSION_FILE)) | 352 TextToFile(output, self.Config(VERSION_FILE)) |
343 | 353 |
344 | 354 |
345 class CommitTrunk(Step): | 355 class CommitTrunk(Step): |
346 MESSAGE = "Commit to local trunk branch." | 356 MESSAGE = "Commit to local trunk branch." |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 return False | 532 return False |
523 | 533 |
524 options.tbr_commit = not options.manual | 534 options.tbr_commit = not options.manual |
525 return True | 535 return True |
526 | 536 |
527 def _Steps(self): | 537 def _Steps(self): |
528 return [ | 538 return [ |
529 Preparation, | 539 Preparation, |
530 FreshBranch, | 540 FreshBranch, |
531 DetectLastPush, | 541 DetectLastPush, |
| 542 IncrementVersion, |
532 PrepareChangeLog, | 543 PrepareChangeLog, |
533 EditChangeLog, | 544 EditChangeLog, |
534 IncrementVersion, | |
535 CommitLocal, | 545 CommitLocal, |
536 UploadStep, | 546 UploadStep, |
537 CommitRepository, | 547 CommitRepository, |
538 StragglerCommits, | 548 StragglerCommits, |
539 SquashCommits, | 549 SquashCommits, |
540 NewBranch, | 550 NewBranch, |
541 ApplyChanges, | 551 ApplyChanges, |
542 AddChangeLog, | 552 AddChangeLog, |
543 SetVersion, | 553 SetVersion, |
544 CommitTrunk, | 554 CommitTrunk, |
545 SanityCheck, | 555 SanityCheck, |
546 CommitSVN, | 556 CommitSVN, |
547 TagRevision, | 557 TagRevision, |
548 CheckChromium, | 558 CheckChromium, |
549 SwitchChromium, | 559 SwitchChromium, |
550 UpdateChromiumCheckout, | 560 UpdateChromiumCheckout, |
551 UploadCL, | 561 UploadCL, |
552 SwitchV8, | 562 SwitchV8, |
553 CleanUp, | 563 CleanUp, |
554 ] | 564 ] |
555 | 565 |
556 | 566 |
557 if __name__ == "__main__": # pragma: no cover | 567 if __name__ == "__main__": # pragma: no cover |
558 sys.exit(PushToTrunk(CONFIG).Run()) | 568 sys.exit(PushToTrunk(CONFIG).Run()) |
OLD | NEW |