Mercurial > kallithea
changeset 839:ad66bd0e5601 beta
moved db migration do db manage script, added my cycles for upgrades
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sat, 11 Dec 2010 14:33:15 +0100 |
parents | 12eb1a018199 |
children | ee6f345736a6 |
files | rhodecode/lib/db_manage.py rhodecode/lib/dbmigrate/__init__.py |
diffstat | 2 files changed, 75 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/lib/db_manage.py Sat Dec 11 04:39:13 2010 +0100 +++ b/rhodecode/lib/db_manage.py Sat Dec 11 14:33:15 2010 +0100 @@ -43,6 +43,9 @@ from sqlalchemy.engine import create_engine +from rhodecode.lib.dbmigrate.migrate.versioning import api +from rhodecode.lib.dbmigrate.migrate.exceptions import \ + DatabaseNotControlledError log = logging.getLogger(__name__) @@ -101,6 +104,76 @@ raise log.info('db version set to: %s', __dbversion__) + + def upgrade(self): + """Upgrades given database schema to given revision following + all needed steps, + + :param revision: revision to upgrade to + """ + upgrade = ask_ok('You are about to perform database upgrade, make ' + 'sure You backed up your database before. ' + 'Continue ? [y/n]') + if not upgrade: + sys.exit('Nothing done') + + repository_path = 'rhodecode/lib/dbmigrate' + db_uri = self.dburi + + try: + curr_version = api.db_version(db_uri, repository_path) + msg = ('Found current database under version' + ' control with version %s' % curr_version) + + except (RuntimeError, DatabaseNotControlledError), e: + curr_version = 1 + msg = ('Current database is not under version control. Setting' + ' as version %s' % curr_version) + api.version_control(db_uri, repository_path, curr_version) + + print (msg) + + if curr_version == __dbversion__: + sys.exit('This database is already at the newest version') + + #====================================================================== + # UPGRADE STEPS + #====================================================================== + class UpgradeSteps(object): + + def __init__(self, klass): + self.klass = klass + + def step_0(self): + #step 0 is the schema upgrade, and than follow proper upgrades + print ('attempting to do database upgrade to version %s' \ + % __dbversion__) + api.upgrade(db_uri, repository_path, __dbversion__) + print ('Schema upgrade completed') + + def step_1(self): + pass + + def step_2(self): + print ('Patching repo paths for newer version of RhodeCode') + self.klass.fix_repo_paths() + + print ('Patching default user of RhodeCode') + self.klass.fix_default_user() + + log.info('Changing ui settings') + self.klass.create_ui_settings() + + + upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1) + + #CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE + for step in upgrade_steps: + print ('performing upgrade step %s' % step) + callable = getattr(UpgradeSteps(self), 'step_%s' % step)() + + + def fix_repo_paths(self): """Fixes a old rhodecode version path into new one without a '*' """
--- a/rhodecode/lib/dbmigrate/__init__.py Sat Dec 11 04:39:13 2010 +0100 +++ b/rhodecode/lib/dbmigrate/__init__.py Sat Dec 11 14:33:15 2010 +0100 @@ -28,10 +28,7 @@ import logging from sqlalchemy import engine_from_config -from rhodecode import __dbversion__ -from rhodecode.lib.dbmigrate.migrate.versioning import api -from rhodecode.lib.dbmigrate.migrate.exceptions import \ - DatabaseNotControlledError + from rhodecode.lib.utils import BasePasterCommand, Command, add_cache from rhodecode.lib.db_manage import DbManage @@ -55,45 +52,13 @@ add_cache(config) - - - repository_path = 'rhodecode/lib/dbmigrate' db_uri = config['sqlalchemy.db1.url'] - try: - curr_version = api.db_version(db_uri, repository_path) - msg = ('Found current database under version' - ' control with version %s' % curr_version) - - except (RuntimeError, DatabaseNotControlledError), e: - curr_version = 1 - msg = ('Current database is not under version control setting' - ' as version %s' % curr_version) - api.version_control(db_uri, repository_path, curr_version) - - self.notify_msg(msg) - - #now we have our dbversion we can do upgrade - self.notify_msg('attempting to do database upgrade to version %s' \ - % __dbversion__) - - api.upgrade(db_uri, repository_path, __dbversion__) - self.notify_msg('Schema upgrade completed') - - #we need to make now some extra operations into database - self.notify_msg('Propagating database updates') - dbmanage = DbManage(log_sql=True, dbconf=db_uri, root=config['here'], tests=False) - self.notify_msg('Patching repo paths for newer version of RhodeCode') - dbmanage.fix_repo_paths() + dbmanage.upgrade() - self.notify_msg('Patching default user of RhodeCode') - dbmanage.fix_default_user() - - self.notify_msg('Changing ui settings') - dbmanage.create_ui_settings() def update_parser(self):