import optparse import sys import os import shutil import migrate import wizard.deploy as wd import wizard.shell as sh from wizard import * def massmigrate(argv, global_options, logger = None): usage = """usage: %prog massmigrate [ARGS] APPLICATION Mass migrates an application to the new repository format. Essentially equivalent to running '%prog migrate' on all autoinstalls for a particular application found by parallel-find, but with advanced reporting. NOTE: --verbose implies --no-parallelize, as it results in output going to stdout/stderr.""" parser = WizardOptionParser(usage) parser.add_option("--no-parallelize", dest="no_parallelize", action="store_true", default=False, help="Turn off parallelization") parser.add_option("--dry-run", dest="dry_run", action="store_true", default=False, help="Print commands that would be run. Implies --no-parallelize") options, args, logger = parser.parse_all(argv, logger) if len(args) > 1: parser.error("too many arguments") elif not args: parser.error("must specify application to migrate") if options.verbose or options.dry_run: options.no_parallelize = True app = args[0] base_args = [] if options.verbose: base_args.append("--verbose") if options.dry_run: base_args.append("--dry-run") deploys = [] for line in wd.getInstallLines(global_options): try: deploy = wd.Deployment.parse(line) except wd.DeploymentParseError, wd.NoSuchApplication: continue name = deploy.getApplication().name if name != app: continue deploys.append(deploy) # parallelization code would go here for deploy in deploys: sub_argv = base_args + [deploy.location] logger.info("$ wizard migrate " + " ".join(sub_argv)) migrate.migrate(sub_argv, global_options, logger)