X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=mediagoblin%2Fgmg_commands%2Fmigrate.py;h=bd3bcb206f6ad6aaff833796b55a0dfe8b779eb8;hb=a0033abb9b6c7d9b42cb82b91bba27d7fe238038;hp=9e01d51c63ced38f2a990817345ae068a4e25ade;hpb=fa4e6b279bddb30074c63cfc795a527a8a60c06d;p=mediagoblin.git diff --git a/mediagoblin/gmg_commands/migrate.py b/mediagoblin/gmg_commands/migrate.py index 9e01d51c..bd3bcb20 100644 --- a/mediagoblin/gmg_commands/migrate.py +++ b/mediagoblin/gmg_commands/migrate.py @@ -1,5 +1,5 @@ # GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011 Free Software Foundation, Inc +# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -14,28 +14,56 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import sys +from mediagoblin.db import util as db_util +from mediagoblin.db.open import setup_connection_and_db_from_config +from mediagoblin.init import setup_global_and_app_config + +# This MUST be imported so as to set up the appropriate migrations! from mediagoblin.db import migrations -from mediagoblin.gmg_commands import util as commands_util def migrate_parser_setup(subparser): - subparser.add_argument( - '-cf', '--conf_file', default='mediagoblin.ini', - help="Config file used to set up environment") + pass + + +def _print_started_migration(migration_number, migration_func): + sys.stdout.write( + "Running migration %s, '%s'... " % ( + migration_number, migration_func.func_name)) + sys.stdout.flush() + + +def _print_finished_migration(migration_number, migration_func): + sys.stdout.write("done.\n") + sys.stdout.flush() def migrate(args): - mgoblin_app = commands_util.setup_app(args) - print "Applying migrations..." + global_config, app_config = setup_global_and_app_config(args.conf_file) + connection, db = setup_connection_and_db_from_config( + app_config, use_pymongo=True) + migration_manager = db_util.MigrationManager(db) + + # Clear old indexes + print "== Clearing old indexes... ==" + removed_indexes = db_util.remove_deprecated_indexes(db) + + for collection, index_name in removed_indexes: + print "Removed index '%s' in collection '%s'" % ( + index_name, collection) - for model_name in migrations.MIGRATE_CLASSES: - model = getattr(mgoblin_app.db, model_name) + # Migrate + print "\n== Applying migrations... ==" + migration_manager.migrate_new( + pre_callback=_print_started_migration, + post_callback=_print_finished_migration) - if not hasattr(model, 'migration_handler') or not model.collection: - continue + # Add new indexes + print "\n== Adding new indexes... ==" + new_indexes = db_util.add_new_indexes(db) - migration = model.migration_handler(model) - migration.migrate_all(collection=model.collection) - - print "... done." + for collection, index_name in new_indexes: + print "Added index '%s' to collection '%s'" % ( + index_name, collection)