Change preflight cleanup process to always be run before any run and add lazy unmount before every run.

Change-Id: If7db175f828fccdd4caa342a0370e842503f16dc

BUG=8015
TEST=Ran it with cbuildbot with/without --clobber with/without old state.

Review URL: http://codereview.chromium.org/4007005
This commit is contained in:
Chris Sosa 2010-10-21 18:22:50 -07:00
parent 676dff53cf
commit dcd1de0bb9

View File

@ -218,8 +218,41 @@ def _GetVMConstants(buildroot):
return (vdisk_size.strip(), statefulfs_size.strip())
def _GitCleanup(buildroot):
"""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=..',
'--tracking_branch="cros/master"', 'clean'],
cwd=cwd, error_ok=True)
def _CleanUpMountPoints(buildroot):
"""Cleans up any stale mount points from previous runs."""
mount_output = RunCommand(['mount'], redirect_stdout=True)
mount_pts_in_buildroot = RunCommand(['grep', buildroot], input=mount_output,
redirect_stdout=True, error_ok=True)
for mount_pt_str in mount_pts_in_buildroot.splitlines():
mount_pt = mount_pt_str.rpartition(' type ')[0].partition(' on ')[2]
RunCommand(['sudo', 'umount', '-l', mount_pt], error_ok=True)
def _WipeOldOutput(buildroot):
"""Wipes out build output directories."""
RunCommand(['rm', '-rf', 'src/build/images'], cwd=buildroot)
# =========================== Main Commands ===================================
def _PreFlightRinse(buildroot):
"""Cleans up any leftover state from previous runs."""
_GitCleanup(buildroot)
_CleanUpMountPoints(buildroot)
RunCommand(['sudo', 'killall', 'kvm'], error_ok=True)
def _FullCheckout(buildroot, rw_checkout=True, retries=_DEFAULT_RETRIES):
"""Performs a full checkout and clobbers any previous checkouts."""
RunCommand(['sudo', 'rm', '-rf', buildroot])
@ -229,12 +262,6 @@ def _FullCheckout(buildroot, rw_checkout=True, retries=_DEFAULT_RETRIES):
RepoSync(buildroot, rw_checkout, retries)
def _PreFlightRinse(buildroot):
"""Cleans up any leftover state from previous runs."""
RunCommand(['sudo', 'killall', 'kvm'], error_ok=True)
_UprevCleanup(buildroot, error_ok=True)
def _IncrementalCheckout(buildroot, rw_checkout=True,
retries=_DEFAULT_RETRIES):
"""Performs a checkout without clobbering previous checkout."""
@ -260,10 +287,6 @@ def _Build(buildroot):
RunCommand(['./build_packages'], cwd=cwd, enter_chroot=True)
def _WipeOldOutput(buildroot):
RunCommand(['rm', '-rf', 'src/build/images'], cwd=buildroot)
def _EnableLocalAccount(buildroot):
cwd = os.path.join(buildroot, 'src', 'scripts')
# Set local account for test images.
@ -338,14 +361,6 @@ def _UprevPackages(buildroot, revisionfile, board):
_UprevAllPackages(buildroot)
def _UprevCleanup(buildroot, error_ok=False):
"""Clean up after a previous uprev attempt."""
cwd = os.path.join(buildroot, 'src', 'scripts')
RunCommand(['./cros_mark_as_stable', '--srcroot=..',
'--tracking_branch="cros/master"', 'clean'],
cwd=cwd, error_ok=error_ok)
def _UprevPush(buildroot):
"""Pushes uprev changes to the main line."""
cwd = os.path.join(buildroot, 'src', 'scripts')
@ -398,10 +413,6 @@ def main():
buildroot = options.buildroot
revisionfile = options.revisionfile
# Passed option to clobber.
if options.clobber:
RunCommand(['sudo', 'rm', '-rf', buildroot])
if len(args) >= 1:
buildconfig = _GetConfig(args[-1])
else:
@ -410,10 +421,10 @@ def main():
sys.exit(1)
try:
if not os.path.isdir(buildroot):
_PreFlightRinse(buildroot)
if options.clobber or not os.path.isdir(buildroot):
_FullCheckout(buildroot)
else:
_PreFlightRinse(buildroot)
_IncrementalCheckout(buildroot)
chroot_path = os.path.join(buildroot, 'chroot')
@ -446,8 +457,6 @@ def main():
if cbuildbot_comm.HaveSlavesCompleted(config):
_UprevPush(buildroot)
else:
# At least one of the slaves failed or we timed out.
_UprevCleanup(buildroot)
Die('CBUILDBOT - One of the slaves has failed!!!')
else:
@ -455,7 +464,6 @@ def main():
if buildconfig['important']:
cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
_UprevCleanup(buildroot)
except:
# Send failure to master bot.
if not buildconfig['master'] and buildconfig['important']: