##// END OF EJS Templates
fix: startup, report nicer error in case DB is damaged or empty when starting services
fix: startup, report nicer error in case DB is damaged or empty when starting services

File last commit:

r3057:26663955 default
r5462:6ef12567 default
Show More
022_version_2_0_2.py
70 lines | 2.1 KiB | text/x-python | PythonLexer
project: added all source files and assets
r1 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.lib.utils2 import str2bool
from rhodecode.model.meta import Base
from rhodecode.model import meta
from rhodecode.lib.dbmigrate.versions import _reset_base, notify
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)
from rhodecode.lib.dbmigrate.schema import db_2_0_2
# issue fixups
fixups(db_2_0_2, meta.Session)
def downgrade(migrate_engine):
meta = MetaData()
meta.bind = migrate_engine
def fixups(models, _SESSION):
notify('fixing new schema for landing_rev')
for repo in models.Repository.get_all():
core: use py3 compatible prints
r3057 print(u'repo %s old landing rev is: %s' % (repo, repo.landing_rev))
project: added all source files and assets
r1 _rev = repo.landing_rev[1]
_rev_type = 'rev' # default
if _rev in ['default', 'master']:
_rev_type = 'branch'
elif _rev in ['tip']:
_rev_type = 'rev'
else:
try:
scm = repo.scm_instance
if scm:
known_branches = scm.branches.keys()
known_bookmarks = scm.bookmarks.keys()
if _rev in known_branches:
_rev_type = 'branch'
elif _rev in known_bookmarks:
_rev_type = 'book'
except Exception as e:
core: use py3 compatible prints
r3057 print(e)
print('continue...')
project: added all source files and assets
r1 #we don't want any error to break the process
pass
_new_landing_rev = '%s:%s' % (_rev_type, _rev)
core: use py3 compatible prints
r3057 print(u'setting to %s' % _new_landing_rev)
project: added all source files and assets
r1 repo.landing_rev = _new_landing_rev
_SESSION().add(repo)
_SESSION().commit()