From aba0f506811ba2a8ff0bee6a0995f8690ffaa48e Mon Sep 17 00:00:00 2001
From: "jan.dittberner" <unknown>
Date: Wed, 30 Jul 2008 12:30:09 +0000
Subject: [PATCH] - integrate patch by Toshio Kuratomi sent to migrate-users
 2008/07/30   06:08 (GMT+01:00) - pylint clean
 migrate/versioning/migrate_repository.py

---
 migrate/versioning/migrate_repository.py | 70 +++++++++++++++---------
 setup.py                                 |  1 +
 2 files changed, 44 insertions(+), 27 deletions(-)

diff --git a/migrate/versioning/migrate_repository.py b/migrate/versioning/migrate_repository.py
index ab48690..7ab1e3c 100644
--- a/migrate/versioning/migrate_repository.py
+++ b/migrate/versioning/migrate_repository.py
@@ -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
 
 
 def usage():
-    
+    """Gives usage information."""
     print '''Usage: %(prog)s repository-to-migrate
 
 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.
 ''' % {'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
     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)
     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)
 
-def deleteDirectory(dirpath):
+
+def delete_directory(dirpath):
+    """Delete a directory and print a message."""
     print '    Deleting directory: %s' % dirpath
     os.rmdir(dirpath)
     
 
 def migrate_repository(repos):
+    """Does the actual migration to the new repository format."""
     print 'Migrating repository at: %s to new format' % repos
     versions = '%s/versions' % repos
     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.
-    for dir in numdirs:
-        origdir = '%s/%s' % (versions, dir)
+    for dirname in numdirs:
+        origdir = '%s/%s' % (versions, dirname)
         print '  Working on directory: %s' % origdir
         files = os.listdir(origdir)
         files.sort()
-        for file in files:
+        for filename in files:
             
             # Delete compiled Python files.
-            if file.endswith('.pyc') or file.endswith('.pyo'):
-                deleteFile('%s/%s' % (origdir, file))
-                
+            if filename.endswith('.pyc') or filename.endswith('.pyo'):
+                delete_file('%s/%s' % (origdir, filename))
+
             # Delete empty __init__.py files.
             origfile = '%s/__init__.py' % origdir
             if os.path.exists(origfile) and len(open(origfile).read()) == 0:
-                deleteFile(origfile)
+                delete_file(origfile)
 
             # Move sql upgrade scripts.
-            if file.endswith('.sql'):
-                version, dbms, op, ext = file.split('.', 3)
-                origfile = '%s/%s' % (origdir, file)
-                # For instance:  2.postgres.upgrade.sql -> 002_postgres_upgrade.sql
-                tgtfile = '%s/%03d_%s_%s.sql' % (versions, int(version), dbms, op)
-                moveFile(origfile, tgtfile)
+            if filename.endswith('.sql'):
+                version, dbms, operation = filename.split('.', 3)[0:3]
+                origfile = '%s/%s' % (origdir, filename)
+                # For instance:  2.postgres.upgrade.sql ->
+                #  002_postgres_upgrade.sql
+                tgtfile = '%s/%03d_%s_%s.sql' % (
+                    versions, int(version), dbms, operation)
+                move_file(origfile, tgtfile)
 
         # Move Python upgrade script.
-        pyfile = '%s.py' % dir
+        pyfile = '%s.py' % dirname
         pyfilepath = '%s/%s' % (origdir, pyfile)
         if os.path.exists(pyfilepath):
-            tgtfile = '%s/%03d.py' % (versions, int(dir))
-            moveFile(pyfilepath, tgtfile)
+            tgtfile = '%s/%03d.py' % (versions, int(dirname))
+            move_file(pyfilepath, tgtfile)
 
         # 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:
         usage()
     migrate_repository(sys.argv[1])
 
+
+if __name__ == '__main__':
+    main()
+
diff --git a/setup.py b/setup.py
index 6f02484..a69a02d 100644
--- a/setup.py
+++ b/setup.py
@@ -35,6 +35,7 @@ Migrate extends SQLAlchemy to have database changeset handling. It provides a da
     entry_points = """
     [console_scripts]
     migrate = migrate.versioning.shell:main
+    migrate-repository = migrate.versioning.migrate_repository:main
     """,
     test_suite = "py.test.cmdline.main",
 )