import os
-import itertools
import shutil
import logging
-import errno
-import sys
from wizard import command, deploy, shell, util
def main(argv, baton):
options, args = parse_args(argv, baton)
- dir = args[0]
+ if args:
+ dir = args[0]
+ else:
+ dir = os.getcwd()
shell.drop_priviledges(dir, options.log_file)
logging.info("Migrating %s" % dir)
logging.debug("uid is %d" % os.getuid())
- deployment = deploy.Deployment(".")
+ deployment = deploy.ProductionCopy(".")
# deal with old-style migration, remove this later
if os.path.isfile(".scripts/old-version") and not os.path.isfile(".scripts-version"):
else:
deployment.verifyVersion()
version = deployment.app_version
- repo = version.application.repository(options.srv_path)
- tag = version.scripts_tag
+ repo = version.application.repository(options.srv_path)
+ tag = version.scripts_tag
- # XXX: turn this into a context
- try:
+ with util.LockDirectory(".scripts-migrate-lock"):
try:
- try:
- os.open(".scripts-migrate-lock", os.O_CREAT | os.O_EXCL)
- except OSError as e:
- if e.errno == errno.EEXIST:
- raise DirectoryLockedError
- elif e.errno == errno.EACCES:
- raise command.PermissionsError(dir)
- raise
- if options.force: perform_force(options)
+ if options.force:
+ perform_force(options)
make_repository(sh, options, repo, tag)
check_variables(deployment, options)
except KeyboardInterrupt:
- # revert it; barring a particularly zany race condition
- # this is safe
+ # revert it; barring zany race conditions this is safe
if os.path.exists(".scripts"):
shutil.rmtree(".scripts")
if os.path.exists(".git"):
shutil.rmtree(".git")
- finally:
- try:
- os.unlink(".scripts-migrate-lock")
- except OSError:
- pass
def parse_args(argv, baton):
usage = """usage: %prog migrate [ARGS] DIR
options, args = parser.parse_all(argv)
if len(args) > 1:
parser.error("too many arguments")
- elif not args:
- parser.error("must specify directory")
return (options, args)
def perform_force(options):
pass
class AlreadyMigratedError(Error):
+ quiet = True
def __init__(self, dir):
self.dir = dir
def __str__(self):
return """
-ERROR: Directory already contains a .git and
-.scripts directory. If you force this migration,
-both of these directories will be removed.
-"""
-
-class DirectoryLockedError(Error):
- def __init__(self, dir):
- self.dir = dir
- def __str__(self):
- return """
-
-ERROR: Could not acquire lock on directory. Maybe there is
-another migration process running?
+This autoinstall is already migrated; move along, nothing to
+see here. (If you really want to, you can force a re-migration
+with --force, but this will blow away the existing .git and
+.scripts directories (i.e. your history and Wizard configuration).)
"""