diff --git a/rhodecode/lib/db_manage.py b/rhodecode/lib/db_manage.py --- a/rhodecode/lib/db_manage.py +++ b/rhodecode/lib/db_manage.py @@ -37,9 +37,11 @@ from rhodecode.model.user import UserMod 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 @@ class DbManage(object): 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 @@ class DbManage(object): 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') diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -50,7 +50,7 @@ from rhodecode.lib.caching_query import 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 @@ def repo2db_mapper(initial_repo_list, re 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):