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 """