diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py index 77b74bdd3a..9ea7270ee2 100755 --- a/bin/cbuildbot.py +++ b/bin/cbuildbot.py @@ -13,6 +13,8 @@ import sys from cbuildbot_config import config +_DEFAULT_RETRIES=3 + # Utility functions def RunCommand(cmd, error_ok=False, error_message=None, exit_code=False, @@ -51,19 +53,34 @@ def MakeDir(path, parents=False): else: raise +def RepoSync(buildroot, retries=_DEFAULT_RETRIES): + while retries > 0: + try: + RunCommand(['repo', 'sync'], cwd=buildroot) + retries = 0 + except: + retries -= 1 + if retries > 0: + print >>sys.stderr, 'CBUILDBOT -- Repo Sync Failed, retrying' + else: + print >>sys.stderr, 'CBUILDBOT -- Retries exhausted' + raise + # Main functions -def _FullCheckout(buildroot): +def _FullCheckout(buildroot, rw_checkout=True, retries=_DEFAULT_RETRIES): + RunCommand(['sudo', 'rm', '-rf', buildroot]) MakeDir(buildroot, parents=True) RunCommand(['repo', 'init', '-u', 'http://src.chromium.org/git/manifest'], cwd=buildroot, input='\n\ny\n') - RunCommand(['repo', 'sync'], cwd=buildroot) - RunCommand(['repo', 'forall', '-c', 'git', 'config', - 'url.ssh://git@gitrw.chromium.org:9222.pushinsteadof', - 'http://src.chromium.org/git'], cwd=buildroot) + RepoSync(buildroot, retries) + if rw_checkout: + RunCommand(['repo', 'forall', '-c', 'git', 'config', + 'url.ssh://git@gitrw.chromium.org:9222.pushinsteadof', + 'http://src.chromium.org/git'], cwd=buildroot) -def _IncrementalCheckout(buildroot): - RunCommand(['repo', 'sync'], cwd=buildroot) +def _IncrementalCheckout(buildroot, retries=_DEFAULT_RETRIES): + RepoSync(buildroot, retries) # Always re-run in case of new git repos or repo sync # failed in a previous run because of a forced Stop Build. RunCommand(['repo', 'forall', '-c', 'git', 'config', diff --git a/bin/cros_repo_sync_all b/bin/cros_repo_sync_all new file mode 120000 index 0000000000..750a2e2e8f --- /dev/null +++ b/bin/cros_repo_sync_all @@ -0,0 +1 @@ +cros_repo_sync_all.py \ No newline at end of file diff --git a/bin/cros_repo_sync_all.py b/bin/cros_repo_sync_all.py new file mode 100755 index 0000000000..40057d2075 --- /dev/null +++ b/bin/cros_repo_sync_all.py @@ -0,0 +1,35 @@ +#!/usr/bin/python + +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Stop gap sync function until cbuildbot is integrated into all builders""" + +import cbuildbot +import optparse +import sys + +"""Number of retries to retry repo sync before giving up""" +_NUMBER_OF_RETRIES=3 + +def main(): + parser = optparse.OptionParser() + parser.add_option('-r', '--buildroot', + help='root directory where sync occurs') + parser.add_option('-c', '--clobber', action='store_true', default=False, + help='clobber build directory and do a full checkout') + (options, args) = parser.parse_args() + if options.buildroot: + if options.clobber: + cbuildbot._FullCheckout(options.buildroot, rw_checkout=False, + retries=_NUMBER_OF_RETRIES) + else: + cbuildbot._IncrementalCheckout(options.buildroot, + retries=_NUMBER_OF_RETRIES) + else: + print >>sys.stderr, 'ERROR: Must set buildroot' + sys.exit(1) + +if __name__ == '__main__': + main()