OLD | NEW |
1 #!/usr/bin/python2.4 | 1 #!/usr/bin/python |
2 | 2 |
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """This module uprevs Chrome for cbuildbot.""" | 7 """This module uprevs Chrome for cbuildbot. |
| 8 |
| 9 After calling, it prints outs CHROME_VERSION_ATOM=(version atom string). A |
| 10 caller could then use this atom with emerge to build the newly uprevved version |
| 11 of Chrome e.g. |
| 12 |
| 13 ./cros_mark_chrome_as_stable tot |
| 14 Returns chrome-base/chromeos-chrome-8.0.552.0_alpha_r1 |
| 15 |
| 16 emerge-x86-generic =chrome-base/chromeos-chrome-8.0.552.0_alpha_r1 |
| 17 """ |
8 | 18 |
9 import optparse | 19 import optparse |
10 import os | 20 import os |
11 import re | 21 import re |
12 import sys | 22 import sys |
13 import urllib | 23 import urllib |
14 | 24 |
15 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) | 25 sys.path.append(os.path.join(os.path.dirname(__file__), '..')) |
16 import cros_mark_as_stable | 26 import cros_mark_as_stable |
17 | 27 |
18 sys.path.append(os.path.join(os.path.dirname(__file__), '../lib')) | 28 sys.path.append(os.path.join(os.path.dirname(__file__), '../lib')) |
19 from cros_build_lib import RunCommand, Info, Warning | 29 from cros_build_lib import RunCommand, Info, Warning |
20 | 30 |
21 BASE_CHROME_SVN_URL = 'http://src.chromium.org/svn' | 31 BASE_CHROME_SVN_URL = 'http://src.chromium.org/svn' |
22 | 32 |
23 # Command for which chrome ebuild to uprev. | 33 # Command for which chrome ebuild to uprev. |
24 TIP_OF_TRUNK, LATEST_RELEASE, STICKY = 'tot', 'latest_release', 'sticky_release' | 34 TIP_OF_TRUNK, LATEST_RELEASE, STICKY = 'tot', 'latest_release', 'sticky_release' |
25 CHROME_REV = [TIP_OF_TRUNK, LATEST_RELEASE, STICKY] | 35 CHROME_REV = [TIP_OF_TRUNK, LATEST_RELEASE, STICKY] |
26 | 36 |
27 # Helper regex's for finding ebuilds. | 37 # Helper regex's for finding ebuilds. |
28 _CHROME_VERSION_REGEX = '\d+\.\d+\.\d+\.\d+' | 38 _CHROME_VERSION_REGEX = '\d+\.\d+\.\d+\.\d+' |
29 _NON_STICKY_REGEX = '%s[(_rc.*)|(_alpha.*)]+' % _CHROME_VERSION_REGEX | 39 _NON_STICKY_REGEX = '%s[(_rc.*)|(_alpha.*)]+' % _CHROME_VERSION_REGEX |
30 | 40 |
31 # Dir where all the action happens. | 41 # Dir where all the action happens. |
32 _CHROME_OVERLAY_DIR = ('%(srcroot)s/third_party/chromiumos-overlay' | 42 _CHROME_OVERLAY_DIR = ('%(srcroot)s/third_party/chromiumos-overlay' |
33 '/chromeos-base/chromeos-chrome') | 43 '/chromeos-base/chromeos-chrome') |
34 | 44 |
35 # Different than cros_mark so devs don't have local collisions. | |
36 _STABLE_BRANCH_NAME = 'chrome_stabilizing_branch' | |
37 | |
38 _GIT_COMMIT_MESSAGE = ('Marking %(chrome_rev)s for chrome ebuild with version ' | 45 _GIT_COMMIT_MESSAGE = ('Marking %(chrome_rev)s for chrome ebuild with version ' |
39 '%(chrome_version)s as stable.') | 46 '%(chrome_version)s as stable.') |
40 | 47 |
41 | 48 |
42 def _GetSvnUrl(): | 49 def _GetSvnUrl(): |
43 """Returns the path to the svn url for the given chrome branch.""" | 50 """Returns the path to the svn url for the given chrome branch.""" |
44 return os.path.join(BASE_CHROME_SVN_URL, 'trunk') | 51 return os.path.join(BASE_CHROME_SVN_URL, 'trunk') |
45 | 52 |
46 | 53 |
47 def _GetTipOfTrunkSvnRevision(): | 54 def _GetTipOfTrunkSvnRevision(): |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 unstable_ebuild: ebuild corresponding to the unstable ebuild for chrome. | 235 unstable_ebuild: ebuild corresponding to the unstable ebuild for chrome. |
229 chrome_rev: one of CHROME_REV | 236 chrome_rev: one of CHROME_REV |
230 TIP_OF_TRUNK - Requires commit value. Revs the ebuild for the TOT | 237 TIP_OF_TRUNK - Requires commit value. Revs the ebuild for the TOT |
231 version and uses the portage suffix of _alpha. | 238 version and uses the portage suffix of _alpha. |
232 LATEST_RELEASE - This uses the portage suffix of _rc as they are release | 239 LATEST_RELEASE - This uses the portage suffix of _rc as they are release |
233 candidates for the next sticky version. | 240 candidates for the next sticky version. |
234 STICKY - Revs the sticky version. | 241 STICKY - Revs the sticky version. |
235 chrome_version: The \d.\d.\d.\d version of Chrome. | 242 chrome_version: The \d.\d.\d.\d version of Chrome. |
236 commit: Used with TIP_OF_TRUNK. The svn revision of chrome. | 243 commit: Used with TIP_OF_TRUNK. The svn revision of chrome. |
237 overlay_dir: Path to the chromeos-chrome package dir. | 244 overlay_dir: Path to the chromeos-chrome package dir. |
| 245 Returns: |
| 246 Full portage version atom (including rc's, etc) that was revved. |
238 """ | 247 """ |
239 base_path = os.path.join(overlay_dir, 'chromeos-chrome-%s' % chrome_version) | 248 base_path = os.path.join(overlay_dir, 'chromeos-chrome-%s' % chrome_version) |
240 # Case where we have the last stable candidate with same version just rev. | 249 # Case where we have the last stable candidate with same version just rev. |
241 if stable_candidate and stable_candidate.chrome_version == chrome_version: | 250 if stable_candidate and stable_candidate.chrome_version == chrome_version: |
242 new_ebuild_path = '%s-r%d.ebuild' % ( | 251 new_ebuild_path = '%s-r%d.ebuild' % ( |
243 stable_candidate.ebuild_path_no_revision, | 252 stable_candidate.ebuild_path_no_revision, |
244 stable_candidate.current_revision + 1) | 253 stable_candidate.current_revision + 1) |
245 else: | 254 else: |
246 if chrome_rev == TIP_OF_TRUNK: | 255 if chrome_rev == TIP_OF_TRUNK: |
247 portage_suffix = '_alpha' | 256 portage_suffix = '_alpha' |
248 else: | 257 else: |
249 portage_suffix = '_rc' | 258 portage_suffix = '_rc' |
250 | 259 |
251 new_ebuild_path = base_path + ('%s-r1.ebuild' % portage_suffix) | 260 new_ebuild_path = base_path + ('%s-r1.ebuild' % portage_suffix) |
252 | 261 |
253 cros_mark_as_stable.EBuildStableMarker.MarkAsStable( | 262 cros_mark_as_stable.EBuildStableMarker.MarkAsStable( |
254 unstable_ebuild.ebuild_path, new_ebuild_path, 'CROS_SVN_COMMIT', commit) | 263 unstable_ebuild.ebuild_path, new_ebuild_path, 'CROS_SVN_COMMIT', commit) |
255 RunCommand(['git', 'add', new_ebuild_path]) | 264 RunCommand(['git', 'add', new_ebuild_path]) |
256 if stable_candidate: | 265 if stable_candidate: |
257 RunCommand(['git', 'rm', stable_candidate.ebuild_path]) | 266 RunCommand(['git', 'rm', stable_candidate.ebuild_path]) |
258 | 267 |
259 cros_mark_as_stable.EBuildStableMarker.CommitChange( | 268 cros_mark_as_stable.EBuildStableMarker.CommitChange( |
260 _GIT_COMMIT_MESSAGE % {'chrome_rev': chrome_rev, | 269 _GIT_COMMIT_MESSAGE % {'chrome_rev': chrome_rev, |
261 'chrome_version': chrome_version}) | 270 'chrome_version': chrome_version}) |
262 | 271 |
| 272 new_ebuild = ChromeEBuild(new_ebuild_path) |
| 273 return '%s-%s' % (new_ebuild.package, new_ebuild.version) |
263 | 274 |
264 def main(argv): | 275 |
265 usage = '%s OPTIONS commit|clean|push' | 276 def main(): |
| 277 usage = '%s OPTIONS [%s]' % (__file__, '|'.join(CHROME_REV)) |
266 parser = optparse.OptionParser(usage) | 278 parser = optparse.OptionParser(usage) |
267 parser.add_option('-c', '--chrome_rev', default=None, | 279 parser.add_option('-s', '--srcroot', default=os.path.join(os.environ['HOME'], |
268 help='One of %s' % CHROME_REV) | 280 'trunk', 'src'), |
269 parser.add_option('-s', '--srcroot', default='.', | |
270 help='Path to the src directory') | 281 help='Path to the src directory') |
271 parser.add_option('-t', '--tracking_branch', default='cros/master', | 282 parser.add_option('-t', '--tracking_branch', default='cros/master', |
272 help='Branch we are tracking changes against') | 283 help='Branch we are tracking changes against') |
273 (options, argv) = parser.parse_args(argv) | 284 (options, args) = parser.parse_args() |
274 | 285 |
275 if len(argv) != 2 or argv[1] not in ( | 286 if len(args) != 1 or args[0] not in CHROME_REV: |
276 cros_mark_as_stable.COMMAND_DICTIONARY.keys()): | 287 parser.error('Commit requires arg set to one of %s.' % CHROME_REV) |
277 parser.error('Arguments are invalid, see usage.') | |
278 | 288 |
279 command = argv[1] | |
280 overlay_dir = os.path.abspath(_CHROME_OVERLAY_DIR % | 289 overlay_dir = os.path.abspath(_CHROME_OVERLAY_DIR % |
281 {'srcroot': options.srcroot}) | 290 {'srcroot': options.srcroot}) |
282 | 291 chrome_rev = args[0] |
283 os.chdir(overlay_dir) | |
284 if command == 'clean': | |
285 cros_mark_as_stable.Clean(options.tracking_branch) | |
286 return | |
287 elif command == 'push': | |
288 cros_mark_as_stable.PushChange(_STABLE_BRANCH_NAME, options.tracking_branch) | |
289 return | |
290 | |
291 if not options.chrome_rev or options.chrome_rev not in CHROME_REV: | |
292 parser.error('Commit requires type set to one of %s.' % CHROME_REV) | |
293 | |
294 chrome_rev = options.chrome_rev | |
295 version_to_uprev = None | 292 version_to_uprev = None |
296 commit_to_use = None | 293 commit_to_use = None |
297 | 294 |
298 (unstable_ebuild, stable_ebuilds) = FindChromeCandidates(overlay_dir) | 295 (unstable_ebuild, stable_ebuilds) = FindChromeCandidates(overlay_dir) |
299 sticky_version = _GetStickyVersion(stable_ebuilds) | 296 sticky_version = _GetStickyVersion(stable_ebuilds) |
300 sticky_branch = sticky_version.rpartition('.')[0] | 297 sticky_branch = sticky_version.rpartition('.')[0] |
301 | 298 |
| 299 |
302 if chrome_rev == TIP_OF_TRUNK: | 300 if chrome_rev == TIP_OF_TRUNK: |
303 version_to_uprev = _GetTipOfTrunkVersion() | 301 version_to_uprev = _GetTipOfTrunkVersion() |
304 commit_to_use = _GetTipOfTrunkSvnRevision() | 302 commit_to_use = _GetTipOfTrunkSvnRevision() |
305 elif chrome_rev == LATEST_RELEASE: | 303 elif chrome_rev == LATEST_RELEASE: |
306 version_to_uprev = _GetLatestRelease() | 304 version_to_uprev = _GetLatestRelease() |
307 else: | 305 else: |
308 version_to_uprev = _GetLatestRelease(sticky_branch) | 306 version_to_uprev = _GetLatestRelease(sticky_branch) |
309 | 307 |
310 stable_candidate = FindChromeUprevCandidate(stable_ebuilds, chrome_rev, | 308 stable_candidate = FindChromeUprevCandidate(stable_ebuilds, chrome_rev, |
311 sticky_branch) | 309 sticky_branch) |
312 # There are some cases we don't need to do anything. Check for them. | 310 # There are some cases we don't need to do anything. Check for them. |
313 if stable_candidate and (version_to_uprev == stable_candidate.chrome_version | 311 if stable_candidate and (version_to_uprev == stable_candidate.chrome_version |
314 and not commit_to_use): | 312 and not commit_to_use): |
315 Info('Found nothing to do for chrome_rev %s with version %s.' % ( | 313 Info('Found nothing to do for chrome_rev %s with version %s.' % ( |
316 chrome_rev, version_to_uprev)) | 314 chrome_rev, version_to_uprev)) |
317 else: | 315 else: |
| 316 os.chdir(overlay_dir) |
318 work_branch = cros_mark_as_stable.GitBranch( | 317 work_branch = cros_mark_as_stable.GitBranch( |
319 _STABLE_BRANCH_NAME, options.tracking_branch) | 318 cros_mark_as_stable.STABLE_BRANCH_NAME, options.tracking_branch) |
320 work_branch.CreateBranch() | 319 work_branch.CreateBranch() |
321 try: | 320 try: |
322 MarkChromeEBuildAsStable(stable_candidate, unstable_ebuild, chrome_rev, | 321 chrome_version_atom = MarkChromeEBuildAsStable( |
323 version_to_uprev, commit_to_use, overlay_dir) | 322 stable_candidate, unstable_ebuild, chrome_rev, version_to_uprev, |
| 323 commit_to_use, overlay_dir) |
| 324 # Explicit print to communicate to caller. |
| 325 print 'CHROME_VERSION_ATOM=%s' % chrome_version_atom |
324 except: | 326 except: |
325 work_branch.Delete() | 327 work_branch.Delete() |
326 raise | 328 raise |
327 | 329 |
328 | 330 |
329 if __name__ == '__main__': | 331 if __name__ == '__main__': |
330 main(sys.argv) | 332 main() |
OLD | NEW |