import logging
import os
import os.path
+import pwd
import wizard
-from wizard import deploy
-from wizard import util
-from wizard import shell
-from wizard import sset
-from wizard.command import _base
+from wizard import deploy, util, shell, sset, command
from wizard.command import migrate
-def main(argv, global_options):
- options, args = parse_args(argv)
+def main(argv, baton):
+ options, args = parse_args(argv, baton)
app = args[0]
base_args = calculate_base_args(options)
sh = make_shell(options)
# loop stuff
errors = {}
uid = None
- for line in deploy.getInstallLines(global_options):
+ for line in deploy.getInstallLines(options.versions_path):
# validate and filter the deployments
try:
d = deploy.Deployment.parse(line)
except deploy.DeploymentParseError, deploy.NoSuchApplication:
continue
- name = d.getApplication().name
+ name = d.application.name
if name != app: continue
if d.location in seen:
continue
# security check: see if the user's directory is the prefix of what
if not my_uid:
- uid = get_dir_uid(d.location)
+ uid = util.get_dir_uid(d.location)
real = os.path.realpath(d.location)
if not real.startswith(pwd.getpwuid(uid).pw_dir + "/"):
logging.error("Security check failed, owner of deployment and owner of home directory mismatch for %s" % d.location)
for name, deploys in errors.items():
logging.warning("%s from %d installs" % (name, len(deploys)))
-def parse_args(argv):
+def parse_args(argv, baton):
usage = """usage: %prog massmigrate [ARGS] APPLICATION
Mass migrates an application to the new repository format.
stat every install to find out if it migrated it yet).
This command is intended to be run as root on a server with
-the scripts AFS patch. You may run it in userspace for
-testing purposes, but then you MUST NOT run this on untrusted
-repositories.
-"""
- parser = _base.WizardOptionParser(usage)
+the scripts AFS patch. You may run it as an unpriviledged
+user for testing purposes, but then you MUST NOT run this on
+untrusted repositories."""
+ parser = command.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=10, help="Maximum subprocesses to run concurrently")
parser.add_option("--seen", dest="seen",
default=None, help="File to read/write paths of already processed installs. These will be skipped.")
+ baton.push(parser, "versions_path")
options, args, = parser.parse_all(argv)
if len(args) > 1:
parser.error("too many arguments")
return options, args
def calculate_base_args(options):
- base_args = _base.makeBaseArgs(options, dry_run="--dry-run")
+ base_args = command.makeBaseArgs(options, dry_run="--dry-run")
if not options.debug:
base_args.append("--quiet")
return base_args