Chromium Code Reviews| 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 | 8 |
| 9 import optparse | 9 import optparse |
| 10 import os | 10 import os |
| 11 import re | 11 import re |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 25 CHROME_REV = [TIP_OF_TRUNK, LATEST_RELEASE, STICKY] | 25 CHROME_REV = [TIP_OF_TRUNK, LATEST_RELEASE, STICKY] |
| 26 | 26 |
| 27 # Helper regex's for finding ebuilds. | 27 # Helper regex's for finding ebuilds. |
| 28 _CHROME_VERSION_REGEX = '\d+\.\d+\.\d+\.\d+' | 28 _CHROME_VERSION_REGEX = '\d+\.\d+\.\d+\.\d+' |
| 29 _NON_STICKY_REGEX = '%s[(_rc.*)|(_alpha.*)]+' % _CHROME_VERSION_REGEX | 29 _NON_STICKY_REGEX = '%s[(_rc.*)|(_alpha.*)]+' % _CHROME_VERSION_REGEX |
| 30 | 30 |
| 31 # Dir where all the action happens. | 31 # Dir where all the action happens. |
| 32 _CHROME_OVERLAY_DIR = ('%(srcroot)s/third_party/chromiumos-overlay' | 32 _CHROME_OVERLAY_DIR = ('%(srcroot)s/third_party/chromiumos-overlay' |
| 33 '/chromeos-base/chromeos-chrome') | 33 '/chromeos-base/chromeos-chrome') |
| 34 | 34 |
| 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 ' | 35 _GIT_COMMIT_MESSAGE = ('Marking %(chrome_rev)s for chrome ebuild with version ' |
| 39 '%(chrome_version)s as stable.') | 36 '%(chrome_version)s as stable.') |
| 40 | 37 |
| 41 | 38 |
| 42 def _GetSvnUrl(): | 39 def _GetSvnUrl(): |
| 43 """Returns the path to the svn url for the given chrome branch.""" | 40 """Returns the path to the svn url for the given chrome branch.""" |
| 44 return os.path.join(BASE_CHROME_SVN_URL, 'trunk') | 41 return os.path.join(BASE_CHROME_SVN_URL, 'trunk') |
| 45 | 42 |
| 46 | 43 |
| 47 def _GetTipOfTrunkSvnRevision(): | 44 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. | 225 unstable_ebuild: ebuild corresponding to the unstable ebuild for chrome. |
| 229 chrome_rev: one of CHROME_REV | 226 chrome_rev: one of CHROME_REV |
| 230 TIP_OF_TRUNK - Requires commit value. Revs the ebuild for the TOT | 227 TIP_OF_TRUNK - Requires commit value. Revs the ebuild for the TOT |
| 231 version and uses the portage suffix of _alpha. | 228 version and uses the portage suffix of _alpha. |
| 232 LATEST_RELEASE - This uses the portage suffix of _rc as they are release | 229 LATEST_RELEASE - This uses the portage suffix of _rc as they are release |
| 233 candidates for the next sticky version. | 230 candidates for the next sticky version. |
| 234 STICKY - Revs the sticky version. | 231 STICKY - Revs the sticky version. |
| 235 chrome_version: The \d.\d.\d.\d version of Chrome. | 232 chrome_version: The \d.\d.\d.\d version of Chrome. |
| 236 commit: Used with TIP_OF_TRUNK. The svn revision of chrome. | 233 commit: Used with TIP_OF_TRUNK. The svn revision of chrome. |
| 237 overlay_dir: Path to the chromeos-chrome package dir. | 234 overlay_dir: Path to the chromeos-chrome package dir. |
| 235 Returns: | |
| 236 Full portage version atom (including rc's, etc) that was revved. | |
| 238 """ | 237 """ |
| 239 base_path = os.path.join(overlay_dir, 'chromeos-chrome-%s' % chrome_version) | 238 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. | 239 # Case where we have the last stable candidate with same version just rev. |
| 241 if stable_candidate and stable_candidate.chrome_version == chrome_version: | 240 if stable_candidate and stable_candidate.chrome_version == chrome_version: |
| 242 new_ebuild_path = '%s-r%d.ebuild' % ( | 241 new_ebuild_path = '%s-r%d.ebuild' % ( |
| 243 stable_candidate.ebuild_path_no_revision, | 242 stable_candidate.ebuild_path_no_revision, |
| 244 stable_candidate.current_revision + 1) | 243 stable_candidate.current_revision + 1) |
| 245 else: | 244 else: |
| 246 if chrome_rev == TIP_OF_TRUNK: | 245 if chrome_rev == TIP_OF_TRUNK: |
| 247 portage_suffix = '_alpha' | 246 portage_suffix = '_alpha' |
| 248 else: | 247 else: |
| 249 portage_suffix = '_rc' | 248 portage_suffix = '_rc' |
| 250 | 249 |
| 251 new_ebuild_path = base_path + ('%s-r1.ebuild' % portage_suffix) | 250 new_ebuild_path = base_path + ('%s-r1.ebuild' % portage_suffix) |
| 252 | 251 |
| 253 cros_mark_as_stable.EBuildStableMarker.MarkAsStable( | 252 cros_mark_as_stable.EBuildStableMarker.MarkAsStable( |
| 254 unstable_ebuild.ebuild_path, new_ebuild_path, 'CROS_SVN_COMMIT', commit) | 253 unstable_ebuild.ebuild_path, new_ebuild_path, 'CROS_SVN_COMMIT', commit) |
| 255 RunCommand(['git', 'add', new_ebuild_path]) | 254 RunCommand(['git', 'add', new_ebuild_path]) |
| 256 if stable_candidate: | 255 if stable_candidate: |
| 257 RunCommand(['git', 'rm', stable_candidate.ebuild_path]) | 256 RunCommand(['git', 'rm', stable_candidate.ebuild_path]) |
| 258 | 257 |
| 259 cros_mark_as_stable.EBuildStableMarker.CommitChange( | 258 cros_mark_as_stable.EBuildStableMarker.CommitChange( |
| 260 _GIT_COMMIT_MESSAGE % {'chrome_rev': chrome_rev, | 259 _GIT_COMMIT_MESSAGE % {'chrome_rev': chrome_rev, |
| 261 'chrome_version': chrome_version}) | 260 'chrome_version': chrome_version}) |
| 262 | 261 |
| 262 new_ebuild = ChromeEBuild(new_ebuild_path) | |
| 263 return '%s-%s' % (new_ebuild.package, new_ebuild.version) | |
| 264 | |
| 263 | 265 |
| 264 def main(argv): | 266 def main(argv): |
| 265 usage = '%s OPTIONS commit|clean|push' | 267 usage = '%s OPTIONS [%s]' % ((__file__), '|'.join(CHROME_REV)) |
|
scottz
2010/11/23 02:44:40
__file__ withut the parens?
sosa
2010/11/23 21:09:19
Done.
| |
| 266 parser = optparse.OptionParser(usage) | 268 parser = optparse.OptionParser(usage) |
| 267 parser.add_option('-c', '--chrome_rev', default=None, | 269 parser.add_option('-s', '--srcroot', default=('%s/trunk/src' % |
|
scottz
2010/11/23 02:44:40
os.path.join(os.environ['HOME'], ....)
sosa
2010/11/23 21:09:19
Done.
| |
| 268 help='One of %s' % CHROME_REV) | 270 os.environ['HOME']), |
| 269 parser.add_option('-s', '--srcroot', default='.', | |
| 270 help='Path to the src directory') | 271 help='Path to the src directory') |
| 271 parser.add_option('-t', '--tracking_branch', default='cros/master', | 272 parser.add_option('-t', '--tracking_branch', default='cros/master', |
| 272 help='Branch we are tracking changes against') | 273 help='Branch we are tracking changes against') |
| 273 (options, argv) = parser.parse_args(argv) | 274 (options, argv) = parser.parse_args(argv) |
|
scottz
2010/11/23 02:44:40
I know this isn't your code but this is bad. We ar
sosa
2010/11/23 21:09:19
Done.
| |
| 274 | 275 |
| 275 if len(argv) != 2 or argv[1] not in ( | 276 if len(argv) != 2 or argv[1] not in CHROME_REV: |
| 276 cros_mark_as_stable.COMMAND_DICTIONARY.keys()): | 277 parser.error('Commit requires arg set to one of %s.' % CHROME_REV) |
| 277 parser.error('Arguments are invalid, see usage.') | |
| 278 | 278 |
| 279 command = argv[1] | |
| 280 overlay_dir = os.path.abspath(_CHROME_OVERLAY_DIR % | 279 overlay_dir = os.path.abspath(_CHROME_OVERLAY_DIR % |
| 281 {'srcroot': options.srcroot}) | 280 {'srcroot': options.srcroot}) |
| 282 | 281 chrome_rev = argv[1] |
| 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 | 282 version_to_uprev = None |
| 296 commit_to_use = None | 283 commit_to_use = None |
| 297 | 284 |
| 298 (unstable_ebuild, stable_ebuilds) = FindChromeCandidates(overlay_dir) | 285 (unstable_ebuild, stable_ebuilds) = FindChromeCandidates(overlay_dir) |
| 299 sticky_version = _GetStickyVersion(stable_ebuilds) | 286 sticky_version = _GetStickyVersion(stable_ebuilds) |
| 300 sticky_branch = sticky_version.rpartition('.')[0] | 287 sticky_branch = sticky_version.rpartition('.')[0] |
| 301 | 288 |
| 302 if chrome_rev == TIP_OF_TRUNK: | 289 if chrome_rev == TIP_OF_TRUNK: |
| 303 version_to_uprev = _GetTipOfTrunkVersion() | 290 version_to_uprev = _GetTipOfTrunkVersion() |
| 304 commit_to_use = _GetTipOfTrunkSvnRevision() | 291 commit_to_use = _GetTipOfTrunkSvnRevision() |
| 305 elif chrome_rev == LATEST_RELEASE: | 292 elif chrome_rev == LATEST_RELEASE: |
| 306 version_to_uprev = _GetLatestRelease() | 293 version_to_uprev = _GetLatestRelease() |
| 307 else: | 294 else: |
| 308 version_to_uprev = _GetLatestRelease(sticky_branch) | 295 version_to_uprev = _GetLatestRelease(sticky_branch) |
| 309 | 296 |
| 310 stable_candidate = FindChromeUprevCandidate(stable_ebuilds, chrome_rev, | 297 stable_candidate = FindChromeUprevCandidate(stable_ebuilds, chrome_rev, |
| 311 sticky_branch) | 298 sticky_branch) |
| 312 # There are some cases we don't need to do anything. Check for them. | 299 # 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 | 300 if stable_candidate and (version_to_uprev == stable_candidate.chrome_version |
| 314 and not commit_to_use): | 301 and not commit_to_use): |
| 315 Info('Found nothing to do for chrome_rev %s with version %s.' % ( | 302 Info('Found nothing to do for chrome_rev %s with version %s.' % ( |
| 316 chrome_rev, version_to_uprev)) | 303 chrome_rev, version_to_uprev)) |
| 317 else: | 304 else: |
| 305 os.chdir(overlay_dir) | |
| 318 work_branch = cros_mark_as_stable.GitBranch( | 306 work_branch = cros_mark_as_stable.GitBranch( |
| 319 _STABLE_BRANCH_NAME, options.tracking_branch) | 307 cros_mark_as_stable.STABLE_BRANCH_NAME, options.tracking_branch) |
| 320 work_branch.CreateBranch() | 308 work_branch.CreateBranch() |
| 321 try: | 309 try: |
| 322 MarkChromeEBuildAsStable(stable_candidate, unstable_ebuild, chrome_rev, | 310 portage_version_atom = MarkChromeEBuildAsStable( |
| 323 version_to_uprev, commit_to_use, overlay_dir) | 311 stable_candidate, unstable_ebuild, chrome_rev, version_to_uprev, |
| 312 commit_to_use, overlay_dir) | |
| 313 # Explicit print to communicate to caller. | |
|
scottz
2010/11/23 02:44:40
perhaps I do not understand all that is being done
sosa
2010/11/23 21:09:19
Good idea. Even though cbuildbot is the only expe
| |
| 314 print portage_version_atom | |
| 324 except: | 315 except: |
| 325 work_branch.Delete() | 316 work_branch.Delete() |
| 326 raise | 317 raise |
| 327 | 318 |
| 328 | 319 |
| 329 if __name__ == '__main__': | 320 if __name__ == '__main__': |
| 330 main(sys.argv) | 321 main(sys.argv) |
| OLD | NEW |