Changeset - 3cb5a35a319d
[Not reviewed]
default
0 2 1
Marcin Kuzminski - 12 years ago 2013-06-11 14:22:54
marcin@python-works.com
added migrations for column change for gists expiration date
3 files changed with 47 insertions and 1 deletions:
0 comments (0 inline, 0 general)
rhodecode/__init__.py
Show inline comments
 
@@ -6,57 +6,57 @@
 
    RhodeCode, a web based repository management based on pylons
 
    versioning implementation: http://www.python.org/dev/peps/pep-0386/
 

	
 
    :created_on: Apr 9, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
import sys
 
import platform
 

	
 
VERSION = (1, 7, 1)
 
BACKENDS = {
 
    'hg': 'Mercurial repository',
 
    'git': 'Git repository',
 
}
 

	
 
CELERY_ON = False
 
CELERY_EAGER = False
 

	
 
# link to config for pylons
 
CONFIG = {}
 

	
 
# Linked module for extensions
 
EXTENSIONS = {}
 

	
 
try:
 
    from rhodecode.lib import get_current_revision
 
    _rev = get_current_revision(quiet=True)
 
    if _rev and len(VERSION) > 3:
 
        VERSION += ('%s' % _rev[0],)
 
except ImportError:
 
    pass
 

	
 
__version__ = ('.'.join((str(each) for each in VERSION[:3])) +
 
               '.'.join(VERSION[3:]))
 
__dbversion__ = 13  # defines current db version for migrations
 
__dbversion__ = 14  # defines current db version for migrations
 
__platform__ = platform.system()
 
__license__ = 'GPLv3'
 
__py_version__ = sys.version_info
 
__author__ = 'Marcin Kuzminski'
 
__url__ = 'http://rhodecode.org'
 

	
 
is_windows = __platform__ in ['Windows']
 
is_unix = not is_windows
rhodecode/lib/db_manage.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
"""
 
    rhodecode.lib.db_manage
 
    ~~~~~~~~~~~~~~~~~~~~~~~
 

	
 
    Database creation, and setup module for RhodeCode. Used for creation
 
    of database as well as for migration operations
 

	
 
    :created_on: Apr 10, 2010
 
    :author: marcink
 
    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
 
    :license: GPLv3, see COPYING for more details.
 
"""
 
# This program is free software: you can redistribute it and/or modify
 
# it under the terms of the GNU General Public License as published by
 
# the Free Software Foundation, either version 3 of the License, or
 
# (at your option) any later version.
 
#
 
# This program is distributed in the hope that it will be useful,
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import os
 
import sys
 
import time
 
import uuid
 
import logging
 
from os.path import dirname as dn, join as jn
 
import datetime
 

	
 
from rhodecode import __dbversion__, __py_version__
 

	
 
from rhodecode.model.user import UserModel
 
from rhodecode.lib.utils import ask_ok
 
from rhodecode.model import init_model
 
from rhodecode.model.db import User, Permission, RhodeCodeUi, \
 
    RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup, \
 
    UserRepoGroupToPerm, CacheInvalidation, UserGroup
 

	
 
from sqlalchemy.engine import create_engine
 
from rhodecode.model.repos_group import ReposGroupModel
 
#from rhodecode.model import meta
 
from rhodecode.model.meta import Session, Base
 
from rhodecode.model.repo import RepoModel
 
from rhodecode.model.permission import PermissionModel
 
from rhodecode.model.users_group import UserGroupModel
 

	
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def notify(msg):
 
    """
 
    Notification for migrations messages
 
    """
 
    ml = len(msg) + (4 * 2)
 
    print('\n%s\n*** %s ***\n%s' % ('*' * ml, msg, '*' * ml)).upper()
 

	
 

	
 
class UpgradeSteps(object):
 
    """
 
    Those steps follow schema versions so for example schema
 
    for example schema with seq 002 == step_2 and so on.
 
    """
 

	
 
    def __init__(self, klass):
 
        self.klass = klass
 

	
 
    def step_1(self):
 
        pass
 

	
 
    def step_2(self):
 
        notify('Patching repo paths for newer version of RhodeCode')
 
        self.klass.fix_repo_paths()
 

	
 
        notify('Patching default user of RhodeCode')
 
        self.klass.fix_default_user()
 
@@ -171,96 +172,103 @@ class UpgradeSteps(object):
 
                   'Please validate and check default permissions '
 
                   'in admin panel')
 

	
 
    def step_8(self):
 
        self.klass.create_permissions()
 
        self.klass.populate_default_permissions()
 
        self.klass.create_default_options(skip_existing=True)
 
        Session().commit()
 

	
 
    def step_9(self):
 
        pass
 

	
 
    def step_10(self):
 
        pass
 

	
 
    def step_11(self):
 
        self.klass.update_repo_info()
 

	
 
    def step_12(self):
 
        self.klass.create_permissions()
 
        Session().commit()
 

	
 
        self.klass.populate_default_permissions()
 
        Session().commit()
 

	
 
        #fix all usergroups
 
        ug_model = UserGroupModel()
 
        for ug in UserGroup.get_all():
 
            perm_obj = ug_model._create_default_perms(ug)
 
            Session().add(perm_obj)
 
        Session().commit()
 

	
 
        adm = User.get_first_admin()
 
        # fix owners of UserGroup
 
        for ug in Session().query(UserGroup).all():
 
            ug.user_id = adm.user_id
 
            Session().add(ug)
 
        Session().commit()
 

	
 
        # fix owners of RepoGroup
 
        for ug in Session().query(RepoGroup).all():
 
            ug.user_id = adm.user_id
 
            Session().add(ug)
 
        Session().commit()
 

	
 
    def step_13(self):
 
        pass
 

	
 
    def step_14(self):
 
        # fix nullable columns on last_update
 
        for r in RepoModel().get_all():
 
            if r.updated_on is None:
 
                r.updated_on = datetime.datetime.fromtimestamp(0)
 
                Session().add(r)
 
        Session().commit()
 

	
 
class DbManage(object):
 
    def __init__(self, log_sql, dbconf, root, tests=False, cli_args={}):
 
        self.dbname = dbconf.split('/')[-1]
 
        self.tests = tests
 
        self.root = root
 
        self.dburi = dbconf
 
        self.log_sql = log_sql
 
        self.db_exists = False
 
        self.cli_args = cli_args
 
        self.init_db()
 

	
 
        force_ask = self.cli_args.get('force_ask')
 
        if force_ask is not None:
 
            global ask_ok
 
            ask_ok = lambda *args, **kwargs: force_ask
 

	
 
    def init_db(self):
 
        engine = create_engine(self.dburi, echo=self.log_sql)
 
        init_model(engine)
 
        self.sa = Session()
 

	
 
    def create_tables(self, override=False):
 
        """
 
        Create a auth database
 
        """
 

	
 
        log.info("Any existing database is going to be destroyed")
 
        if self.tests:
 
            destroy = True
 
        else:
 
            destroy = ask_ok('Are you sure to destroy old database ? [y/n]')
 
        if not destroy:
 
            sys.exit('Nothing tables created')
 
        if destroy:
 
            Base.metadata.drop_all()
 

	
 
        checkfirst = not override
 
        Base.metadata.create_all(checkfirst=checkfirst)
 
        log.info('Created tables for %s' % self.dbname)
 

	
 
    def set_db_version(self):
 
        ver = DbMigrateVersion()
 
        ver.version = __dbversion__
 
        ver.repository_id = 'rhodecode_db_migrations'
 
        ver.repository_path = 'versions'
 
        self.sa.add(ver)
 
        log.info('db version set to: %s' % __dbversion__)
rhodecode/lib/dbmigrate/versions/014_version_1_7_1.py
Show inline comments
 
new file 100644
 
import logging
 
import datetime
 

	
 
from sqlalchemy import *
 
from sqlalchemy.exc import DatabaseError
 
from sqlalchemy.orm import relation, backref, class_mapper, joinedload
 
from sqlalchemy.orm.session import Session
 
from sqlalchemy.ext.declarative import declarative_base
 

	
 
from rhodecode.lib.dbmigrate.migrate import *
 
from rhodecode.lib.dbmigrate.migrate.changeset import *
 

	
 
from rhodecode.model.meta import Base
 
from rhodecode.model import meta
 
from rhodecode.lib.dbmigrate.versions import _reset_base
 

	
 
log = logging.getLogger(__name__)
 

	
 

	
 
def upgrade(migrate_engine):
 
    """
 
    Upgrade operations go here.
 
    Don't create your own engine; bind migrate_engine to your metadata
 
    """
 
    _reset_base(migrate_engine)
 

	
 
    #==========================================================================
 
    # Gist
 
    #==========================================================================
 
    from rhodecode.lib.dbmigrate.schema.db_1_7_0 import Gist
 
    tbl = Gist.__table__
 
    user_id = tbl.columns.gist_expires
 
    user_id.alter(type=Float(53))
 

	
 

	
 
def downgrade(migrate_engine):
 
    meta = MetaData()
 
    meta.bind = migrate_engine
0 comments (0 inline, 0 general)