changeset 1985:40f04021fa61 beta

Added group permission autofix for older version of rhodecode which didn't have default permissions for repos groups
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 07 Feb 2012 07:23:31 +0200
parents ed3b20284830
children 367d76f5fcf5
files rhodecode/lib/db_manage.py rhodecode/lib/utils.py
diffstat 2 files changed, 37 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/db_manage.py	Tue Feb 07 07:22:47 2012 +0200
+++ b/rhodecode/lib/db_manage.py	Tue Feb 07 07:23:31 2012 +0200
@@ -37,9 +37,11 @@
 from rhodecode.lib.utils import ask_ok
 from rhodecode.model import init_model
 from rhodecode.model.db import User, Permission, RhodeCodeUi, \
-    RhodeCodeSetting, UserToPerm, DbMigrateVersion
+    RhodeCodeSetting, UserToPerm, DbMigrateVersion, RepoGroup,\
+    UserRepoGroupToPerm
 
 from sqlalchemy.engine import create_engine
+from rhodecode.model.repos_group import ReposGroupModel
 
 log = logging.getLogger(__name__)
 
@@ -170,7 +172,7 @@
 
             def step_4(self):
                 print ('TODO:')
-                raise NotImplementedError()
+                self.klass.fixup_groups()
 
         upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
 
@@ -348,6 +350,21 @@
             setting = RhodeCodeSetting(k, v)
             self.sa.add(setting)
 
+    def fixup_groups(self):
+        def_usr = User.get_by_username('default')
+        for g in RepoGroup.query().all():
+            g.group_name = g.get_new_name(g.name)
+            self.sa.add(g)
+            # get default perm
+            default = UserRepoGroupToPerm.query()\
+                .filter(UserRepoGroupToPerm.group == g)\
+                .filter(UserRepoGroupToPerm.user == def_usr)\
+                .scalar()
+
+            if default is None:
+                log.debug('missing default permission for group %s adding' % g)
+                ReposGroupModel()._create_default_perms(g)
+
     def config_prompt(self, test_repo_path='', retries=3):
         if retries == 3:
             log.info('Setting up repositories config')
--- a/rhodecode/lib/utils.py	Tue Feb 07 07:22:47 2012 +0200
+++ b/rhodecode/lib/utils.py	Tue Feb 07 07:23:31 2012 +0200
@@ -50,7 +50,7 @@
 
 from rhodecode.model import meta
 from rhodecode.model.db import Repository, User, RhodeCodeUi, \
-    UserLog, RepoGroup, RhodeCodeSetting
+    UserLog, RepoGroup, RhodeCodeSetting, UserRepoGroupToPerm
 from rhodecode.model.meta import Session
 from rhodecode.model.repos_group import ReposGroupModel
 
@@ -415,6 +415,23 @@
         raise Exception('Missing administrative account !')
     added = []
 
+    # fixup groups paths to new format on the fly. Helps with migration from
+    # old rhodecode versions also set permissions if they are not present !
+    # TODO: remove this in future, before release
+    def_usr = User.get_by_username('default')
+    for g in RepoGroup.query().all():
+        g.group_name = g.get_new_name(g.name)
+        sa.add(g)
+        # get default perm
+        default = UserRepoGroupToPerm.query()\
+            .filter(UserRepoGroupToPerm.group == g)\
+            .filter(UserRepoGroupToPerm.user == def_usr)\
+            .scalar()
+
+        if default is None:
+            log.debug('missing default permission for group %s adding' % g)
+            ReposGroupModel()._create_default_perms(g)
+
     for name, repo in initial_repo_list.items():
         group = map_groups(name.split(Repository.url_sep()))
         if not rm.get_by_repo_name(name, cache=False):