Mercurial > kallithea
comparison rhodecode/lib/db_manage.py @ 2779:d0d3158850d4 beta
migrations: fix old hook values
- nicer notifications
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 02 Sep 2012 22:17:21 +0200 |
parents | 7562f46b1e90 |
children | dd222038535d d03d51b6541e |
comparison
equal
deleted
inserted
replaced
2777:0e73626f6040 | 2779:d0d3158850d4 |
---|---|
38 from rhodecode.model.db import User, Permission, RhodeCodeUi, \ | 38 from rhodecode.model.db import User, Permission, RhodeCodeUi, \ |
39 RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup, \ | 39 RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup, \ |
40 UserRepoGroupToPerm | 40 UserRepoGroupToPerm |
41 | 41 |
42 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 | 43 from rhodecode.model.repos_group import ReposGroupModel |
45 #from rhodecode.model import meta | 44 #from rhodecode.model import meta |
46 from rhodecode.model.meta import Session, Base | 45 from rhodecode.model.meta import Session, Base |
47 | 46 |
48 | 47 |
49 log = logging.getLogger(__name__) | 48 log = logging.getLogger(__name__) |
49 | |
50 | |
51 def notify(msg): | |
52 """ | |
53 Notification for migrations messages | |
54 """ | |
55 ml = len(msg) + (4 * 2) | |
56 print >> sys.stdout, ('*** %s ***\n%s' % (msg, '*' * ml)).upper() | |
50 | 57 |
51 | 58 |
52 class DbManage(object): | 59 class DbManage(object): |
53 def __init__(self, log_sql, dbconf, root, tests=False): | 60 def __init__(self, log_sql, dbconf, root, tests=False): |
54 self.dbname = dbconf.split('/')[-1] | 61 self.dbname = dbconf.split('/')[-1] |
128 curr_version = 1 | 135 curr_version = 1 |
129 msg = ('Current database is not under version control. Setting' | 136 msg = ('Current database is not under version control. Setting' |
130 ' as version %s' % curr_version) | 137 ' as version %s' % curr_version) |
131 api.version_control(db_uri, repository_path, curr_version) | 138 api.version_control(db_uri, repository_path, curr_version) |
132 | 139 |
133 print (msg) | 140 notify(msg) |
134 | 141 |
135 if curr_version == __dbversion__: | 142 if curr_version == __dbversion__: |
136 sys.exit('This database is already at the newest version') | 143 sys.exit('This database is already at the newest version') |
137 | 144 |
138 #====================================================================== | 145 #====================================================================== |
139 # UPGRADE STEPS | 146 # UPGRADE STEPS |
140 #====================================================================== | 147 #====================================================================== |
148 | |
141 class UpgradeSteps(object): | 149 class UpgradeSteps(object): |
142 """ | 150 """ |
143 Those steps follow schema versions so for example schema | 151 Those steps follow schema versions so for example schema |
144 for example schema with seq 002 == step_2 and so on. | 152 for example schema with seq 002 == step_2 and so on. |
145 """ | 153 """ |
147 def __init__(self, klass): | 155 def __init__(self, klass): |
148 self.klass = klass | 156 self.klass = klass |
149 | 157 |
150 def step_0(self): | 158 def step_0(self): |
151 # step 0 is the schema upgrade, and than follow proper upgrades | 159 # step 0 is the schema upgrade, and than follow proper upgrades |
152 print ('attempting to do database upgrade to version %s' \ | 160 notify('attempting to do database upgrade to version %s' \ |
153 % __dbversion__) | 161 % __dbversion__) |
154 api.upgrade(db_uri, repository_path, __dbversion__) | 162 api.upgrade(db_uri, repository_path, __dbversion__) |
155 print ('Schema upgrade completed') | 163 notify('Schema upgrade completed') |
156 | 164 |
157 def step_1(self): | 165 def step_1(self): |
158 pass | 166 pass |
159 | 167 |
160 def step_2(self): | 168 def step_2(self): |
161 print ('Patching repo paths for newer version of RhodeCode') | 169 notify('Patching repo paths for newer version of RhodeCode') |
162 self.klass.fix_repo_paths() | 170 self.klass.fix_repo_paths() |
163 | 171 |
164 print ('Patching default user of RhodeCode') | 172 notify('Patching default user of RhodeCode') |
165 self.klass.fix_default_user() | 173 self.klass.fix_default_user() |
166 | 174 |
167 log.info('Changing ui settings') | 175 log.info('Changing ui settings') |
168 self.klass.create_ui_settings() | 176 self.klass.create_ui_settings() |
169 | 177 |
170 def step_3(self): | 178 def step_3(self): |
171 print ('Adding additional settings into RhodeCode db') | 179 notify('Adding additional settings into RhodeCode db') |
172 self.klass.fix_settings() | 180 self.klass.fix_settings() |
173 print ('Adding ldap defaults') | 181 notify('Adding ldap defaults') |
174 self.klass.create_ldap_options(skip_existing=True) | 182 self.klass.create_ldap_options(skip_existing=True) |
175 | 183 |
176 def step_4(self): | 184 def step_4(self): |
177 print ('create permissions and fix groups') | 185 notify('create permissions and fix groups') |
178 self.klass.create_permissions() | 186 self.klass.create_permissions() |
179 self.klass.fixup_groups() | 187 self.klass.fixup_groups() |
180 | 188 |
181 def step_5(self): | 189 def step_5(self): |
182 pass | 190 pass |
183 | 191 |
184 def step_6(self): | 192 def step_6(self): |
185 print ('re-checking permissions') | 193 |
194 notify('re-checking permissions') | |
186 self.klass.create_permissions() | 195 self.klass.create_permissions() |
187 | 196 |
188 print ('installing new hooks') | 197 notify('fixing old PULL hook') |
198 _pull = RhodeCodeUi.get_by_key('preoutgoing.pull_logger') | |
199 if _pull: | |
200 _pull.ui_key = RhodeCodeUi.HOOK_PULL | |
201 Session().add(_pull) | |
202 | |
203 notify('fixing old PUSH hook') | |
204 _push = RhodeCodeUi.get_by_key('pretxnchangegroup.push_logger') | |
205 if _push: | |
206 _push.ui_key = RhodeCodeUi.HOOK_PUSH | |
207 Session().add(_push) | |
208 | |
209 notify('installing new pre-push hook') | |
189 hooks4 = RhodeCodeUi() | 210 hooks4 = RhodeCodeUi() |
190 hooks4.ui_section = 'hooks' | 211 hooks4.ui_section = 'hooks' |
191 hooks4.ui_key = RhodeCodeUi.HOOK_PRE_PUSH | 212 hooks4.ui_key = RhodeCodeUi.HOOK_PRE_PUSH |
192 hooks4.ui_value = 'python:rhodecode.lib.hooks.pre_push' | 213 hooks4.ui_value = 'python:rhodecode.lib.hooks.pre_push' |
193 Session().add(hooks4) | 214 Session().add(hooks4) |
194 | 215 |
216 notify('installing new pre-pull hook') | |
195 hooks6 = RhodeCodeUi() | 217 hooks6 = RhodeCodeUi() |
196 hooks6.ui_section = 'hooks' | 218 hooks6.ui_section = 'hooks' |
197 hooks6.ui_key = RhodeCodeUi.HOOK_PRE_PULL | 219 hooks6.ui_key = RhodeCodeUi.HOOK_PRE_PULL |
198 hooks6.ui_value = 'python:rhodecode.lib.hooks.pre_pull' | 220 hooks6.ui_value = 'python:rhodecode.lib.hooks.pre_pull' |
199 Session().add(hooks6) | 221 Session().add(hooks6) |
200 | 222 |
201 print ('installing hgsubversion option') | 223 notify('installing hgsubversion option') |
202 # enable hgsubversion disabled by default | 224 # enable hgsubversion disabled by default |
203 hgsubversion = RhodeCodeUi() | 225 hgsubversion = RhodeCodeUi() |
204 hgsubversion.ui_section = 'extensions' | 226 hgsubversion.ui_section = 'extensions' |
205 hgsubversion.ui_key = 'hgsubversion' | 227 hgsubversion.ui_key = 'hgsubversion' |
206 hgsubversion.ui_value = '' | 228 hgsubversion.ui_value = '' |
207 hgsubversion.ui_active = False | 229 hgsubversion.ui_active = False |
208 Session().add(hgsubversion) | 230 Session().add(hgsubversion) |
209 | 231 |
210 print ('installing hg git option') | 232 notify('installing hg git option') |
211 # enable hggit disabled by default | 233 # enable hggit disabled by default |
212 hggit = RhodeCodeUi() | 234 hggit = RhodeCodeUi() |
213 hggit.ui_section = 'extensions' | 235 hggit.ui_section = 'extensions' |
214 hggit.ui_key = 'hggit' | 236 hggit.ui_key = 'hggit' |
215 hggit.ui_value = '' | 237 hggit.ui_value = '' |
216 hggit.ui_active = False | 238 hggit.ui_active = False |
217 Session().add(hggit) | 239 Session().add(hggit) |
218 | 240 |
219 print ('re-check default permissions') | 241 notify('re-check default permissions') |
220 self.klass.populate_default_permissions() | 242 self.klass.populate_default_permissions() |
221 | 243 |
222 upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1) | 244 upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1) |
223 | 245 |
224 # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE | 246 # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE |
247 _step = None | |
225 for step in upgrade_steps: | 248 for step in upgrade_steps: |
226 print ('performing upgrade step %s' % step) | 249 notify('performing upgrade step %s' % step) |
227 getattr(UpgradeSteps(self), 'step_%s' % step)() | 250 getattr(UpgradeSteps(self), 'step_%s' % step)() |
228 self.sa.commit() | 251 self.sa.commit() |
252 _step = step | |
253 | |
254 notify('upgrade to version %s successful' % _step) | |
229 | 255 |
230 def fix_repo_paths(self): | 256 def fix_repo_paths(self): |
231 """ | 257 """ |
232 Fixes a old rhodecode version path into new one without a '*' | 258 Fixes a old rhodecode version path into new one without a '*' |
233 """ | 259 """ |