diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -31,7 +31,8 @@ from datetime import datetime from rhodecode.lib.vcs.backends import get_backend from rhodecode.lib.compat import json -from rhodecode.lib.utils2 import LazyProperty, safe_str, safe_unicode +from rhodecode.lib.utils2 import LazyProperty, safe_str, safe_unicode,\ + remove_prefix from rhodecode.lib.caching_query import FromCache from rhodecode.lib.hooks import log_create_repository, log_delete_repository @@ -131,6 +132,16 @@ class RepoModel(BaseModel): defaults['repo_group'] = getattr(group[-1] if group else None, 'group_id', None) + for strip, k in [(0, 'repo_type'), (1, 'repo_enable_downloads'), + (1, 'repo_description'), (1, 'repo_enable_locking'), + (1, 'repo_landing_rev'), (0, 'clone_uri'), + (1, 'repo_private'), (1, 'repo_enable_statistics')]: + attr = k + if strip: + attr = remove_prefix(k, 'repo_') + + defaults[k] = defaults[attr] + # fill owner if repo_info.user: defaults.update({'user': repo_info.user.username}) @@ -151,12 +162,12 @@ class RepoModel(BaseModel): return defaults - def update(self, repo_name, form_data): + def update(self, org_repo_name, **kwargs): try: - cur_repo = self.get_by_repo_name(repo_name, cache=False) + cur_repo = self.get_by_repo_name(org_repo_name, cache=False) # update permissions - for member, perm, member_type in form_data['perms_updates']: + for member, perm, member_type in kwargs['perms_updates']: if member_type == 'user': # this updates existing one RepoModel().grant_user_permission( @@ -167,7 +178,7 @@ class RepoModel(BaseModel): repo=cur_repo, group_name=member, perm=perm ) # set new permissions - for member, perm, member_type in form_data['perms_new']: + for member, perm, member_type in kwargs['perms_new']: if member_type == 'user': RepoModel().grant_user_permission( repo=cur_repo, user=member, perm=perm @@ -177,26 +188,30 @@ class RepoModel(BaseModel): repo=cur_repo, group_name=member, perm=perm ) - # update current repo - for k, v in form_data.items(): - if k == 'user': - cur_repo.user = User.get_by_username(v) - elif k == 'repo_name': - pass - elif k == 'repo_group': - cur_repo.group = RepoGroup.get(v) + if 'user' in kwargs: + cur_repo.user = User.get_by_username(kwargs['user']) + + if 'repo_group' in kwargs: + cur_repo.group = RepoGroup.get(kwargs['repo_group']) - else: - setattr(cur_repo, k, v) + for strip, k in [(0, 'repo_type'), (1, 'repo_enable_downloads'), + (1, 'repo_description'), (1, 'repo_enable_locking'), + (1, 'repo_landing_rev'), (0, 'clone_uri'), + (1, 'repo_private'), (1, 'repo_enable_statistics')]: + if k in kwargs: + val = kwargs[k] + if strip: + k = remove_prefix(k, 'repo_') + setattr(cur_repo, k, val) - new_name = cur_repo.get_new_name(form_data['repo_name']) + new_name = cur_repo.get_new_name(kwargs['repo_name']) cur_repo.repo_name = new_name self.sa.add(cur_repo) - if repo_name != new_name: + if org_repo_name != new_name: # rename repository - self.__rename_repo(old=repo_name, new=new_name) + self.__rename_repo(old=org_repo_name, new=new_name) return cur_repo except: