##// END OF EJS Templates
Step6a for migrations from 1.3.6...
marcink -
r2765:186b1cf7 beta
parent child Browse files
Show More
@@ -31,17 +31,20 b' import logging'
31 from os.path import dirname as dn, join as jn
31 from os.path import dirname as dn, join as jn
32
32
33 from rhodecode import __dbversion__
33 from rhodecode import __dbversion__
34 from rhodecode.model import meta
35
34
36 from rhodecode.model.user import UserModel
35 from rhodecode.model.user import UserModel
37 from rhodecode.lib.utils import ask_ok
36 from rhodecode.lib.utils import ask_ok
38 from rhodecode.model import init_model
37 from rhodecode.model import init_model
39 from rhodecode.model.db import User, Permission, RhodeCodeUi, \
38 from rhodecode.model.db import User, Permission, RhodeCodeUi, \
40 RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup,\
39 RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup, \
41 UserRepoGroupToPerm
40 UserRepoGroupToPerm
42
41
43 from sqlalchemy.engine import create_engine
42 from sqlalchemy.engine import create_engine
43 from sqlalchemy.schema import MetaData
44 from rhodecode.model.repos_group import ReposGroupModel
44 from rhodecode.model.repos_group import ReposGroupModel
45 #from rhodecode.model import meta
46 from rhodecode.model.meta import Session, Base
47
45
48
46 log = logging.getLogger(__name__)
49 log = logging.getLogger(__name__)
47
50
@@ -59,7 +62,7 b' class DbManage(object):'
59 def init_db(self):
62 def init_db(self):
60 engine = create_engine(self.dburi, echo=self.log_sql)
63 engine = create_engine(self.dburi, echo=self.log_sql)
61 init_model(engine)
64 init_model(engine)
62 self.sa = meta.Session()
65 self.sa = Session()
63
66
64 def create_tables(self, override=False, defaults={}):
67 def create_tables(self, override=False, defaults={}):
65 """
68 """
@@ -74,10 +77,10 b' class DbManage(object):'
74 if not destroy:
77 if not destroy:
75 sys.exit()
78 sys.exit()
76 if destroy:
79 if destroy:
77 meta.Base.metadata.drop_all()
80 Base.metadata.drop_all()
78
81
79 checkfirst = not override
82 checkfirst = not override
80 meta.Base.metadata.create_all(checkfirst=checkfirst)
83 Base.metadata.create_all(checkfirst=checkfirst)
81 log.info('Created tables for %s' % self.dbname)
84 log.info('Created tables for %s' % self.dbname)
82
85
83 def set_db_version(self):
86 def set_db_version(self):
@@ -179,7 +182,42 b' class DbManage(object):'
179 pass
182 pass
180
183
181 def step_6(self):
184 def step_6(self):
182 pass
185 print ('re-checking permissions')
186 self.klass.create_permissions()
187
188 print ('installing new hooks')
189 hooks4 = RhodeCodeUi()
190 hooks4.ui_key = RhodeCodeUi.HOOK_PRE_PUSH
191 hooks4.ui_value = 'python:rhodecode.lib.hooks.pre_push'
192 Session().add(hooks4)
193
194 hooks6 = RhodeCodeUi()
195 hooks6.ui_section = 'hooks'
196 hooks6.ui_key = RhodeCodeUi.HOOK_PRE_PULL
197 hooks6.ui_value = 'python:rhodecode.lib.hooks.pre_pull'
198 Session().add(hooks6)
199
200 print ('installing hgsubversion option')
201 # enable hgsubversion disabled by default
202 hgsubversion = RhodeCodeUi()
203 hgsubversion.ui_section = 'extensions'
204 hgsubversion.ui_key = 'hgsubversion'
205 hgsubversion.ui_value = ''
206 hgsubversion.ui_active = False
207 Session().add(hgsubversion)
208
209 print ('installing hg git option')
210 # enable hggit disabled by default
211 hggit = RhodeCodeUi()
212 hggit.ui_section = 'extensions'
213 hggit.ui_key = 'hggit'
214 hggit.ui_value = ''
215 hggit.ui_active = False
216 Session().add(hggit)
217
218 print ('re-check default permissions')
219 self.klass.populate_default_permissions()
220
183 upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
221 upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
184
222
185 # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE
223 # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE
@@ -276,9 +314,9 b' class DbManage(object):'
276 self.create_user(username, password, email, True)
314 self.create_user(username, password, email, True)
277 else:
315 else:
278 log.info('creating admin and regular test users')
316 log.info('creating admin and regular test users')
279 from rhodecode.tests import TEST_USER_ADMIN_LOGIN,\
317 from rhodecode.tests import TEST_USER_ADMIN_LOGIN, \
280 TEST_USER_ADMIN_PASS, TEST_USER_ADMIN_EMAIL,\
318 TEST_USER_ADMIN_PASS, TEST_USER_ADMIN_EMAIL, \
281 TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS,\
319 TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS, \
282 TEST_USER_REGULAR_EMAIL, TEST_USER_REGULAR2_LOGIN, \
320 TEST_USER_REGULAR_EMAIL, TEST_USER_REGULAR2_LOGIN, \
283 TEST_USER_REGULAR2_PASS, TEST_USER_REGULAR2_EMAIL
321 TEST_USER_REGULAR2_PASS, TEST_USER_REGULAR2_EMAIL
284
322
@@ -524,30 +562,21 b' class DbManage(object):'
524
562
525 default_user = User.get_by_username('default')
563 default_user = User.get_by_username('default')
526
564
527 reg_perm = UserToPerm()
565 for def_perm in ['hg.register.manual_activate', 'hg.create.repository',
528 reg_perm.user = default_user
566 'hg.fork.repository', 'repository.read']:
529 reg_perm.permission = self.sa.query(Permission)\
530 .filter(Permission.permission_name == 'hg.register.manual_activate')\
531 .scalar()
532 self.sa.add(reg_perm)
533
534 create_repo_perm = UserToPerm()
535 create_repo_perm.user = default_user
536 create_repo_perm.permission = self.sa.query(Permission)\
537 .filter(Permission.permission_name == 'hg.create.repository')\
538 .scalar()
539 self.sa.add(create_repo_perm)
540
567
541 default_fork_perm = UserToPerm()
568 perm = self.sa.query(Permission)\
542 default_fork_perm.user = default_user
569 .filter(Permission.permission_name == def_perm)\
543 default_fork_perm.permission = self.sa.query(Permission)\
570 .scalar()
544 .filter(Permission.permission_name == 'hg.fork.repository')\
571 if not perm:
545 .scalar()
572 raise Exception(
546 self.sa.add(default_fork_perm)
573 'CRITICAL: permission %s not found inside database !!'
547
574 % def_perm
548 default_repo_perm = UserToPerm()
575 )
549 default_repo_perm.user = default_user
576 if not UserToPerm.query()\
550 default_repo_perm.permission = self.sa.query(Permission)\
577 .filter(UserToPerm.permission == perm)\
551 .filter(Permission.permission_name == 'repository.read')\
578 .filter(UserToPerm.user == default_user).scalar():
552 .scalar()
579 reg_perm = UserToPerm()
553 self.sa.add(default_repo_perm)
580 reg_perm.user = default_user
581 reg_perm.permission = perm
582 self.sa.add(reg_perm)
@@ -94,6 +94,7 b' class ANSIColumnGenerator(AlterTableVisi'
94
94
95 table = self.start_alter_table(column)
95 table = self.start_alter_table(column)
96 self.append("ADD ")
96 self.append("ADD ")
97
97 self.append(self.get_column_specification(column))
98 self.append(self.get_column_specification(column))
98
99
99 for cons in column.constraints:
100 for cons in column.constraints:
@@ -49,6 +49,7 b' class SQLiteHelper(SQLiteCommon):'
49 else:
49 else:
50 column = delta
50 column = delta
51 table = self._to_table(column.table)
51 table = self._to_table(column.table)
52
52 self.recreate_table(table,column,delta)
53 self.recreate_table(table,column,delta)
53
54
54 class SQLiteColumnGenerator(SQLiteSchemaGenerator,
55 class SQLiteColumnGenerator(SQLiteSchemaGenerator,
@@ -1290,3 +1290,31 b' class DbMigrateVersion(Base, BaseModel):'
1290 repository_id = Column('repository_id', String(250), primary_key=True)
1290 repository_id = Column('repository_id', String(250), primary_key=True)
1291 repository_path = Column('repository_path', Text)
1291 repository_path = Column('repository_path', Text)
1292 version = Column('version', Integer)
1292 version = Column('version', Integer)
1293
1294 ## this is migration from 1_4_0, but now it's here to overcome a problem of
1295 ## attaching a FK to this from 1_3_0 !
1296
1297
1298 class PullRequest(Base, BaseModel):
1299 __tablename__ = 'pull_requests'
1300 __table_args__ = (
1301 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1302 'mysql_charset': 'utf8'},
1303 )
1304
1305 STATUS_NEW = u'new'
1306 STATUS_OPEN = u'open'
1307 STATUS_CLOSED = u'closed'
1308
1309 pull_request_id = Column('pull_request_id', Integer(), nullable=False, primary_key=True)
1310 title = Column('title', Unicode(256), nullable=True)
1311 description = Column('description', UnicodeText(10240), nullable=True)
1312 status = Column('status', Unicode(256), nullable=False, default=STATUS_NEW)
1313 created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
1314 updated_on = Column('updated_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
1315 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None)
1316 _revisions = Column('revisions', UnicodeText(20500)) # 500 revisions max
1317 org_repo_id = Column('org_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
1318 org_ref = Column('org_ref', Unicode(256), nullable=False)
1319 other_repo_id = Column('other_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
1320 other_ref = Column('other_ref', Unicode(256), nullable=False) No newline at end of file
@@ -5,21 +5,156 b' from sqlalchemy import *'
5 from sqlalchemy.exc import DatabaseError
5 from sqlalchemy.exc import DatabaseError
6 from sqlalchemy.orm import relation, backref, class_mapper
6 from sqlalchemy.orm import relation, backref, class_mapper
7 from sqlalchemy.orm.session import Session
7 from sqlalchemy.orm.session import Session
8 from sqlalchemy.ext.declarative import declarative_base
8
9
9 from rhodecode.lib.dbmigrate.migrate import *
10 from rhodecode.lib.dbmigrate.migrate import *
10 from rhodecode.lib.dbmigrate.migrate.changeset import *
11 from rhodecode.lib.dbmigrate.migrate.changeset import *
11
12
12 from rhodecode.model.meta import Base
13 from rhodecode.model.meta import Base
14 from rhodecode.model import meta
13
15
14 log = logging.getLogger(__name__)
16 log = logging.getLogger(__name__)
15
17
16
18
17 def upgrade(migrate_engine):
19 def upgrade(migrate_engine):
18 """ Upgrade operations go here.
20 """
21 Upgrade operations go here.
19 Don't create your own engine; bind migrate_engine to your metadata
22 Don't create your own engine; bind migrate_engine to your metadata
20 """
23 """
21
24
22 #TODO when 1.4 is ready fill it !
25 #==========================================================================
26 # USEREMAILMAP
27 #==========================================================================
28 from rhodecode.lib.dbmigrate.schema.db_1_4_0 import UserEmailMap
29 tbl = UserEmailMap.__table__
30 tbl.create()
31 #==========================================================================
32 # PULL REQUEST
33 #==========================================================================
34 from rhodecode.lib.dbmigrate.schema.db_1_4_0 import PullRequest
35 tbl = PullRequest.__table__
36 tbl.create()
37
38 #==========================================================================
39 # PULL REQUEST REVIEWERS
40 #==========================================================================
41 from rhodecode.lib.dbmigrate.schema.db_1_4_0 import PullRequestReviewers
42 tbl = PullRequestReviewers.__table__
43 tbl.create()
44
45 #==========================================================================
46 # CHANGESET STATUS
47 #==========================================================================
48 from rhodecode.lib.dbmigrate.schema.db_1_4_0 import ChangesetStatus
49 tbl = ChangesetStatus.__table__
50 tbl.create()
51
52 ## RESET COMPLETLY THE metadata for sqlalchemy to use the 1_3_0 Base
53 Base = declarative_base()
54 Base.metadata.clear()
55 Base.metadata = MetaData()
56 Base.metadata.bind = migrate_engine
57 meta.Base = Base
58
59 #==========================================================================
60 # USERS TABLE
61 #==========================================================================
62 from rhodecode.lib.dbmigrate.schema.db_1_3_0 import User
63 tbl = User.__table__
64
65 # change column name -> firstname
66 col = User.__table__.columns.name
67 col.alter(index=Index('u_username_idx', 'username'))
68 col.alter(index=Index('u_email_idx', 'email'))
69 col.alter(name="firstname", table=tbl)
70
71 inherit_default_permissions = Column("inherit_default_permissions",
72 Boolean(), nullable=True, unique=None,
73 default=True)
74 inherit_default_permissions.create(table=tbl)
75 inherit_default_permissions.alter(nullable=False, default=True, table=tbl)
76
77 #==========================================================================
78 # REPOSITORIES
79 #==========================================================================
80 from rhodecode.lib.dbmigrate.schema.db_1_3_0 import Repository
81 tbl = Repository.__table__
82
83 enable_locking = Column("enable_locking", Boolean(), nullable=True,
84 unique=None, default=False)
85 enable_locking.create(table=tbl)
86 enable_locking.alter(nullable=False, default=False, table=tbl)
87
88 _locked = Column("locked", String(255), nullable=True, unique=False,
89 default=None)
90 _locked.create(table=tbl)
91
92 landing_rev = Column("landing_revision", String(255), nullable=True,
93 unique=False, default='tip')
94 landing_rev.create(table=tbl)
95 landing_rev.alter(nullable=False, default='tip', table=tbl)
96
97 #==========================================================================
98 # GROUPS
99 #==========================================================================
100 from rhodecode.lib.dbmigrate.schema.db_1_3_0 import RepoGroup
101 tbl = RepoGroup.__table__
102 enable_locking = Column("enable_locking", Boolean(), nullable=True,
103 unique=None, default=False)
104 enable_locking.create(table=tbl)
105 enable_locking.alter(nullable=False, default=False)
106
107 #==========================================================================
108 # CACHE INVALIDATION
109 #==========================================================================
110 from rhodecode.lib.dbmigrate.schema.db_1_3_0 import CacheInvalidation
111 tbl = CacheInvalidation.__table__
112
113 # change column name -> firstname
114 col = CacheInvalidation.__table__.columns.cache_key
115 col.alter(index=Index('key_idx', 'cache_key'))
116
117 #==========================================================================
118 # NOTIFICATION
119 #==========================================================================
120 from rhodecode.lib.dbmigrate.schema.db_1_3_0 import Notification
121 tbl = Notification.__table__
122
123 # change column name -> firstname
124 col = Notification.__table__.columns.type
125 col.alter(index=Index('notification_type_idx', 'type'),)
126
127 #==========================================================================
128 # CHANGESET_COMMENTS
129 #==========================================================================
130 from rhodecode.lib.dbmigrate.schema.db_1_3_0 import ChangesetComment
131
132 tbl = ChangesetComment.__table__
133
134 col = ChangesetComment.__table__.columns.revision
135 col.alter(index=Index('cc_revision_idx', 'revision'),)
136
137 hl_lines = Column('hl_lines', Unicode(512), nullable=True)
138 hl_lines.create(table=tbl)
139
140 created_on = Column('created_on', DateTime(timezone=False), nullable=True,
141 default=datetime.datetime.now)
142 created_on.create(table=tbl)
143 created_on.alter(nullable=False, default=datetime.datetime.now)
144 modified_at = Column('modified_at', DateTime(timezone=False), nullable=False,
145 default=datetime.datetime.now)
146 modified_at.alter(type=DateTime(timezone=False), table=tbl)
147
148 pull_request_id = Column("pull_request_id", Integer(),
149 ForeignKey('pull_requests.pull_request_id'),
150 nullable=True)
151 pull_request_id.create(table=tbl)
152 ## RESET COMPLETLY THE metadata for sqlalchemy back after using 1_3_0
153 Base = declarative_base()
154 Base.metadata.clear()
155 Base.metadata = MetaData()
156 Base.metadata.bind = migrate_engine
157 meta.Base = Base
23
158
24
159
25 def downgrade(migrate_engine):
160 def downgrade(migrate_engine):
@@ -469,7 +469,8 b' class UserEmailMap(Base, BaseModel):'
469 email_id = Column("email_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
469 email_id = Column("email_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
470 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
470 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
471 _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
471 _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
472
472
473 test = Column("test", String(255),nullable=False,default=True)
473 user = relationship('User', lazy='joined')
474 user = relationship('User', lazy='joined')
474
475
475 @validates('_email')
476 @validates('_email')
General Comments 0
You need to be logged in to leave comments. Login now