def work(caf, profile: '--profile', n: ('-j', int), targets: 'TARGET', limit: ('--limit', int), queue: '--queue', myid: '--id', dry: '--dry', do_init: 'init', do_build: 'build', verbose: '--verbose', last_queue: '--last', maxdepth: ('--maxdepth', int)): """ Execute all prepared build tasks. Usage: caf [[init] build] work [-v] [--limit N] [--profile PROFILE [-j N] | [--id ID] [--dry]] [--last | --queue URL | [TARGET...] [--maxdepth N]] Options: -n, --dry Dry run (do not write to disk). --id ID ID of worker [default: 1]. -p, --profile PROFILE Run worker via ~/.config/caf/worker_PROFILE. -q, --queue URL Take tasks from web queue. --last As above, but use the last submitted queue. -j N Number of launched workers [default: 1]. -l, --limit N Limit number of tasks to N. -v, --verbose Be more verbose. --maxdepth N Maximal depth. """ import subprocess if do_init: build(['caf', 'init', 'build'], caf) elif do_build: build(['caf', 'build'], caf) if profile: for _ in range(n): cmd = ['{}/.config/caf/worker_{}'.format(os.environ['HOME'], profile), '-v' if verbose else None, ('--limit', limit), ('--queue', queue), targets, ('--maxdepth', maxdepth)] try: subprocess.check_call(filter_cmd(cmd)) except subprocess.CalledProcessError: error('Running ~/.config/caf/worker_{} did not succeed.' .format(profile)) else: if queue or last_queue: if last_queue: with open('.caf/LAST_QUEUE') as f: queue = f.read().strip() url = caf.get_queue_url(queue, 'get') or queue worker = QueueWorker(myid, caf.cache, url, dry=dry, limit=limit, debug=verbose) else: roots = [caf.out/t for t in targets] \ if targets else (caf.out).glob('*') tasks = OrderedDict() for path in find_tasks(*roots, unsealed=True, maxdepth=maxdepth): cellarid = get_stored(path) if cellarid not in tasks: tasks[cellarid] = str(path) worker = LocalWorker(myid, caf.cache, list(reversed(tasks.items())), dry=dry, limit=limit, debug=verbose) worker.work()