Chromium Code Reviews| Index: bin/cbuildbot.py |
| diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py |
| index 372ddcaf5ff646d2a966b897cffe00c95d9beea7..a228e9a739ec1c657d0632c9a65c5f82b75f2f25 100755 |
| --- a/bin/cbuildbot.py |
| +++ b/bin/cbuildbot.py |
| @@ -181,38 +181,36 @@ def _ParseRevisionString(revision_string, repo_dictionary): |
| return revisions.items() |
| -def _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board): |
| +def _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board, |
| + overlays): |
| """Uprevs based on revision list.""" |
| if not revision_list: |
| Info('No packages found to uprev') |
| return |
| - package_str = '' |
| + packages = [] |
| for package, revision in revision_list: |
| - package_str += package + ' ' |
| - |
| - package_str = package_str.strip() |
| + assert ':' not in package, 'Invalid package name: %s' % package |
| + packages.append(package) |
| cwd = os.path.join(buildroot, 'src', 'scripts') |
| - # TODO(davidjames): --foo="bar baz" only works here because we're using |
| - # enter_chroot. |
| - RunCommand(['./cros_mark_as_stable', |
| + RunCommand(['./cros_mark_as_stable', '--srcroot=..', |
| '--board=%s' % board, |
| - '--tracking_branch="%s"' % tracking_branch, |
| - '--packages="%s"' % package_str, |
| + '--tracking_branch=%s' % tracking_branch, |
| + '--overlays=%s' % ':'.join(overlays), |
| + '--packages=%s' % ':'.join(packages), |
| 'commit'], |
| - cwd=cwd, enter_chroot=True) |
| + cwd=cwd) |
| -def _UprevAllPackages(buildroot, tracking_branch, board): |
| +def _UprevAllPackages(buildroot, tracking_branch, board, overlays): |
| """Uprevs all packages that have been updated since last uprev.""" |
| cwd = os.path.join(buildroot, 'src', 'scripts') |
| - # TODO(davidjames): --foo="bar baz" only works here because we're using |
| - # enter_chroot. |
| - RunCommand(['./cros_mark_as_stable', '--all', |
| + RunCommand(['./cros_mark_as_stable', '--all', '--srcroot=..', |
| '--board=%s' % board, |
| - '--tracking_branch="%s"' % tracking_branch, 'commit'], |
| - cwd=cwd, enter_chroot=True) |
| + '--overlays=%s' % ':'.join(overlays), |
| + '--tracking_branch=%s' % tracking_branch, 'commit'], |
| + cwd=cwd) |
| def _GetVMConstants(buildroot): |
| @@ -228,12 +226,13 @@ def _GetVMConstants(buildroot): |
| return (vdisk_size.strip(), statefulfs_size.strip()) |
| -def _GitCleanup(buildroot, board, tracking_branch): |
| +def _GitCleanup(buildroot, board, tracking_branch, overlays): |
| """Clean up git branch after previous uprev attempt.""" |
| cwd = os.path.join(buildroot, 'src', 'scripts') |
| if os.path.exists(cwd): |
| RunCommand(['./cros_mark_as_stable', '--srcroot=..', |
| '--board=%s' % board, |
| + '--overlays=%s' % ':'.join(overlays), |
| '--tracking_branch=%s' % tracking_branch, 'clean'], |
| cwd=cwd, error_ok=True) |
| @@ -257,9 +256,9 @@ def _WipeOldOutput(buildroot): |
| # =========================== Main Commands =================================== |
| -def _PreFlightRinse(buildroot, board, tracking_branch): |
| +def _PreFlightRinse(buildroot, board, tracking_branch, overlays): |
| """Cleans up any leftover state from previous runs.""" |
| - _GitCleanup(buildroot, board, tracking_branch) |
| + _GitCleanup(buildroot, board, tracking_branch, overlays) |
| _CleanUpMountPoints(buildroot) |
| RunCommand(['sudo', 'killall', 'kvm'], error_ok=True) |
| @@ -347,7 +346,7 @@ def _RunSmokeSuite(buildroot, results_dir): |
| ], cwd=cwd, error_ok=False) |
| -def _UprevPackages(buildroot, tracking_branch, revisionfile, board): |
| +def _UprevPackages(buildroot, tracking_branch, revisionfile, board, overlays): |
| """Uprevs a package based on given revisionfile. |
| If revisionfile is set to None or does not resolve to an actual file, this |
| @@ -376,26 +375,19 @@ def _UprevPackages(buildroot, tracking_branch, revisionfile, board): |
| # print >> sys.stderr, 'CBUILDBOT Revision list found %s' % revisions |
| # revision_list = _ParseRevisionString(revisions, |
| # _CreateRepoDictionary(buildroot, board)) |
| - # _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board) |
| + # _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board, |
| + # overlays) |
| #else: |
| Info('CBUILDBOT Revving all') |
| - _UprevAllPackages(buildroot, tracking_branch, board) |
| + _UprevAllPackages(buildroot, tracking_branch, board, overlays) |
| def _UprevPush(buildroot, tracking_branch, board, overlays): |
| """Pushes uprev changes to the main line.""" |
| cwd = os.path.join(buildroot, 'src', 'scripts') |
| - public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot |
| - private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot |
| - if overlays == 'private': |
| - overlays = [private_overlay] |
| - elif overlays == 'public': |
| - overlays = [public_overlay] |
| - else: |
| - overlays = [public_overlay, private_overlay] |
| RunCommand(['./cros_mark_as_stable', '--srcroot=..', |
| '--board=%s' % board, |
| - '--overlays=%s' % " ".join(overlays), |
| + '--overlays=%s' % ':'.join(overlays), |
| '--tracking_branch=%s' % tracking_branch, |
| '--push_options=--bypass-hooks -f', 'push'], |
| cwd=cwd) |
| @@ -467,6 +459,32 @@ def _GetConfig(config_name): |
| return buildconfig |
| +def ResolveOverlays(buildroot, overlays): |
|
diandersAtChromium
2010/11/12 19:25:30
Why is this public, anyway? Could be _ResolveOver
davidjames
2010/11/12 21:18:05
Done.
|
| + """Return the list of overlays to use for a given buildbot. |
| + |
| + Args: |
|
diandersAtChromium
2010/11/12 19:25:30
Need to add buildroot; make sure to mention that p
davidjames
2010/11/12 21:18:05
Done.
|
| + overlays: A string describing which overlays you want. |
| + 'private': Just the private overlay. |
| + 'public': Just the public overlay. |
| + 'both': Both the public and private overlays. |
| + """ |
| + public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot |
| + private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot |
| + if overlays == 'private': |
| + dirs = [private_overlay] |
| + elif overlays == 'public': |
| + dirs = [public_overlay] |
| + elif overlays == 'both': |
| + dirs = [public_overlay, private_overlay] |
| + else: |
| + Die('Incorrect overlay configuration: %s' % overlays) |
| + for dir in dirs: |
| + assert ':' not in dir, 'Overlay must not contain colons: %s' % dir |
| + if not os.path.exists(dir): |
|
diandersAtChromium
2010/11/12 19:25:30
os.path.isdir?
davidjames
2010/11/12 21:18:05
Done.
|
| + Die('Missing overlay: %s' % dir) |
| + return dirs |
| + |
| + |
| def main(): |
| # Parse options |
| usage = "usage: %prog [options] cbuildbot_config" |
| @@ -491,7 +509,7 @@ def main(): |
| (options, args) = parser.parse_args() |
| - buildroot = options.buildroot |
| + buildroot = os.path.abspath(options.buildroot) |
| revisionfile = options.revisionfile |
| tracking_branch = options.tracking_branch |
| @@ -502,8 +520,11 @@ def main(): |
| parser.print_usage() |
| sys.exit(1) |
| + # Calculate list of overlay directories. |
| + overlays = ResolveOverlays(buildroot, buildconfig['overlays']) |
| + |
| try: |
| - _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch) |
| + _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays) |
| if options.clobber or not os.path.isdir(buildroot): |
| _FullCheckout(buildroot, tracking_branch, url=options.url) |
| else: |
| @@ -519,7 +540,7 @@ def main(): |
| if buildconfig['uprev']: |
| _UprevPackages(buildroot, tracking_branch, revisionfile, |
| - board=buildconfig['board']) |
| + buildconfig['board'], overlays) |
| _EnableLocalAccount(buildroot) |
| _Build(buildroot) |
| @@ -545,7 +566,7 @@ def main(): |
| # Master bot needs to check if the other slaves completed. |
| if cbuildbot_comm.HaveSlavesCompleted(config): |
| _UprevPush(buildroot, tracking_branch, buildconfig['board'], |
| - buildconfig['overlays']) |
| + overlays) |
| else: |
| Die('CBUILDBOT - One of the slaves has failed!!!') |