- integrate patch by Toshio Kuratomi sent to migrate-users 2008/07/30
06:08 (GMT+01:00) - pylint clean migrate/versioning/migrate_repository.py
This commit is contained in:
parent
52499b1f28
commit
aba0f50681
@ -1,10 +1,11 @@
|
|||||||
''' Script to migrate repository. This shouldn't use any other migrate modules, so that it can work in any version. '''
|
""" Script to migrate repository. This shouldn't use any other migrate
|
||||||
|
modules, so that it can work in any version. """
|
||||||
|
|
||||||
import os, os.path, sys
|
import os, os.path, sys
|
||||||
|
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
|
"""Gives usage information."""
|
||||||
print '''Usage: %(prog)s repository-to-migrate
|
print '''Usage: %(prog)s repository-to-migrate
|
||||||
|
|
||||||
Upgrade your repository to the new flat format.
|
Upgrade your repository to the new flat format.
|
||||||
@ -12,67 +13,82 @@ Upgrade your repository to the new flat format.
|
|||||||
NOTE: You should probably make a backup before running this.
|
NOTE: You should probably make a backup before running this.
|
||||||
''' % {'prog': sys.argv[0]}
|
''' % {'prog': sys.argv[0]}
|
||||||
|
|
||||||
raise SystemExit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def deleteFile(filepath):
|
def delete_file(filepath):
|
||||||
|
"""Deletes a file and prints a message."""
|
||||||
print ' Deleting file: %s' % filepath
|
print ' Deleting file: %s' % filepath
|
||||||
os.remove(filepath)
|
os.remove(filepath)
|
||||||
|
|
||||||
def moveFile(src, tgt):
|
|
||||||
|
def move_file(src, tgt):
|
||||||
|
"""Moves a file and prints a message."""
|
||||||
print ' Moving file %s to %s' % (src, tgt)
|
print ' Moving file %s to %s' % (src, tgt)
|
||||||
if os.path.exists(tgt):
|
if os.path.exists(tgt):
|
||||||
raise Exception('Cannot move file %s because target %s already exists' % (src, tgt))
|
raise Exception(
|
||||||
|
'Cannot move file %s because target %s already exists' % (src, tgt))
|
||||||
os.rename(src, tgt)
|
os.rename(src, tgt)
|
||||||
|
|
||||||
def deleteDirectory(dirpath):
|
|
||||||
|
def delete_directory(dirpath):
|
||||||
|
"""Delete a directory and print a message."""
|
||||||
print ' Deleting directory: %s' % dirpath
|
print ' Deleting directory: %s' % dirpath
|
||||||
os.rmdir(dirpath)
|
os.rmdir(dirpath)
|
||||||
|
|
||||||
|
|
||||||
def migrate_repository(repos):
|
def migrate_repository(repos):
|
||||||
|
"""Does the actual migration to the new repository format."""
|
||||||
print 'Migrating repository at: %s to new format' % repos
|
print 'Migrating repository at: %s to new format' % repos
|
||||||
versions = '%s/versions' % repos
|
versions = '%s/versions' % repos
|
||||||
dirs = os.listdir(versions)
|
dirs = os.listdir(versions)
|
||||||
numdirs = [ int(dir) for dir in dirs if dir.isdigit() ] # Only use int's in list.
|
# Only use int's in list.
|
||||||
|
numdirs = [ int(dirname) for dirname in dirs if dirname.isdigit() ]
|
||||||
numdirs.sort() # Sort list.
|
numdirs.sort() # Sort list.
|
||||||
for dir in numdirs:
|
for dirname in numdirs:
|
||||||
origdir = '%s/%s' % (versions, dir)
|
origdir = '%s/%s' % (versions, dirname)
|
||||||
print ' Working on directory: %s' % origdir
|
print ' Working on directory: %s' % origdir
|
||||||
files = os.listdir(origdir)
|
files = os.listdir(origdir)
|
||||||
files.sort()
|
files.sort()
|
||||||
for file in files:
|
for filename in files:
|
||||||
|
|
||||||
# Delete compiled Python files.
|
# Delete compiled Python files.
|
||||||
if file.endswith('.pyc') or file.endswith('.pyo'):
|
if filename.endswith('.pyc') or filename.endswith('.pyo'):
|
||||||
deleteFile('%s/%s' % (origdir, file))
|
delete_file('%s/%s' % (origdir, filename))
|
||||||
|
|
||||||
# Delete empty __init__.py files.
|
# Delete empty __init__.py files.
|
||||||
origfile = '%s/__init__.py' % origdir
|
origfile = '%s/__init__.py' % origdir
|
||||||
if os.path.exists(origfile) and len(open(origfile).read()) == 0:
|
if os.path.exists(origfile) and len(open(origfile).read()) == 0:
|
||||||
deleteFile(origfile)
|
delete_file(origfile)
|
||||||
|
|
||||||
# Move sql upgrade scripts.
|
# Move sql upgrade scripts.
|
||||||
if file.endswith('.sql'):
|
if filename.endswith('.sql'):
|
||||||
version, dbms, op, ext = file.split('.', 3)
|
version, dbms, operation = filename.split('.', 3)[0:3]
|
||||||
origfile = '%s/%s' % (origdir, file)
|
origfile = '%s/%s' % (origdir, filename)
|
||||||
# For instance: 2.postgres.upgrade.sql -> 002_postgres_upgrade.sql
|
# For instance: 2.postgres.upgrade.sql ->
|
||||||
tgtfile = '%s/%03d_%s_%s.sql' % (versions, int(version), dbms, op)
|
# 002_postgres_upgrade.sql
|
||||||
moveFile(origfile, tgtfile)
|
tgtfile = '%s/%03d_%s_%s.sql' % (
|
||||||
|
versions, int(version), dbms, operation)
|
||||||
|
move_file(origfile, tgtfile)
|
||||||
|
|
||||||
# Move Python upgrade script.
|
# Move Python upgrade script.
|
||||||
pyfile = '%s.py' % dir
|
pyfile = '%s.py' % dirname
|
||||||
pyfilepath = '%s/%s' % (origdir, pyfile)
|
pyfilepath = '%s/%s' % (origdir, pyfile)
|
||||||
if os.path.exists(pyfilepath):
|
if os.path.exists(pyfilepath):
|
||||||
tgtfile = '%s/%03d.py' % (versions, int(dir))
|
tgtfile = '%s/%03d.py' % (versions, int(dirname))
|
||||||
moveFile(pyfilepath, tgtfile)
|
move_file(pyfilepath, tgtfile)
|
||||||
|
|
||||||
# Try to remove directory. Will fail if it's not empty.
|
# Try to remove directory. Will fail if it's not empty.
|
||||||
deleteDirectory(origdir)
|
delete_directory(origdir)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
def main():
|
||||||
|
"""Main function to be called when using this script."""
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
usage()
|
usage()
|
||||||
migrate_repository(sys.argv[1])
|
migrate_repository(sys.argv[1])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
||||||
|
1
setup.py
1
setup.py
@ -35,6 +35,7 @@ Migrate extends SQLAlchemy to have database changeset handling. It provides a da
|
|||||||
entry_points = """
|
entry_points = """
|
||||||
[console_scripts]
|
[console_scripts]
|
||||||
migrate = migrate.versioning.shell:main
|
migrate = migrate.versioning.shell:main
|
||||||
|
migrate-repository = migrate.versioning.migrate_repository:main
|
||||||
""",
|
""",
|
||||||
test_suite = "py.test.cmdline.main",
|
test_suite = "py.test.cmdline.main",
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user