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=..', |
sosa
2010/11/12 19:18:46
put on sep line and below
|
'--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): |
+ """Return the list of overlays to use for a given buildbot. |
+ |
+ Args: |
+ 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): |
+ 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!!!') |