Mercurial > kallithea
changeset 2524:9d4b80743a2a beta
New repo model create function
- fixed some sessions calls
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 01 Jul 2012 15:47:54 +0200 |
parents | 788ae4f7d8df |
children | c35980ae7958 |
files | rhodecode/controllers/admin/repos.py rhodecode/lib/celerylib/__init__.py rhodecode/lib/celerylib/tasks.py rhodecode/model/repo.py rhodecode/model/users_group.py |
diffstat | 5 files changed, 58 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/controllers/admin/repos.py Sun Jul 01 12:45:21 2012 +0200 +++ b/rhodecode/controllers/admin/repos.py Sun Jul 01 15:47:54 2012 +0200 @@ -146,7 +146,7 @@ form_result = RepoForm(repo_groups=c.repo_groups_choices, landing_revs=c.landing_revs_choices)()\ .to_python(dict(request.POST)) - RepoModel().create(form_result, self.rhodecode_user) + RepoModel().create(form_result, self.rhodecode_user.user_id) if form_result['clone_uri']: h.flash(_('created repository %s from %s') \ % (form_result['repo_name'], form_result['clone_uri']),
--- a/rhodecode/lib/celerylib/__init__.py Sun Jul 01 12:45:21 2012 +0200 +++ b/rhodecode/lib/celerylib/__init__.py Sun Jul 01 15:47:54 2012 +0200 @@ -112,7 +112,7 @@ if CELERY_ON: engine = engine_from_config(config, 'sqlalchemy.db1.') init_model(engine) - sa = meta.Session + sa = meta.Session() return sa
--- a/rhodecode/lib/celerylib/tasks.py Sun Jul 01 12:45:21 2012 +0200 +++ b/rhodecode/lib/celerylib/tasks.py Sun Jul 01 15:47:54 2012 +0200 @@ -373,7 +373,7 @@ base_path = Repository.base_path() - fork_repo = RepoModel(DBS).create(form_data, cur_user, + fork_repo = RepoModel(DBS).create(form_data, cur_user.user_id, just_db=True, fork=True) alias = form_data['repo_type']
--- a/rhodecode/model/repo.py Sun Jul 01 12:45:21 2012 +0200 +++ b/rhodecode/model/repo.py Sun Jul 01 15:47:54 2012 +0200 @@ -49,6 +49,7 @@ class RepoModel(BaseModel): cls = Repository + URL_SEPARATOR = Repository.url_sep() def __get_users_group(self, users_group): return self._get_instance(UsersGroup, users_group, @@ -203,37 +204,38 @@ log.error(traceback.format_exc()) raise - def create(self, form_data, cur_user, just_db=False, fork=False): + def create_repo(self, repo_name, repo_type, description, owner, + private=False, clone_uri=None, repos_group=None, + landing_rev='tip', just_db=False, fork_of=None, + copy_fork_permissions=False): from rhodecode.model.scm import ScmModel + owner = self._get_user(owner) + fork_of = self._get_repo(fork_of) + repo_group = self.__get_repos_group(repos_group) try: - if fork: - fork_parent_id = form_data['fork_parent_id'] # repo name is just a name of repository # while repo_name_full is a full qualified name that is combined # with name and path of group - repo_name = form_data['repo_name'] - repo_name_full = form_data['repo_name_full'] + repo_name = repo_name.split(self.URL_SEPARATOR)[-1] + repo_name_full = repo_name new_repo = Repository() new_repo.enable_statistics = False + new_repo.repo_name = repo_name_full + new_repo.repo_type = repo_type + new_repo.user = owner + new_repo.group = repo_group + new_repo.description = description or repo_name + new_repo.private = private + new_repo.clone_uri = clone_uri + new_repo.landing_rev = landing_rev - for k, v in form_data.items(): - if k == 'repo_name': - v = repo_name_full - if k == 'repo_group': - k = 'group_id' - if k == 'description': - v = v or repo_name - - setattr(new_repo, k, v) - - if fork: - parent_repo = Repository.get(fork_parent_id) + if fork_of: + parent_repo = fork_of new_repo.fork = parent_repo - new_repo.user_id = cur_user.user_id self.sa.add(new_repo) def _create_default_perms(): @@ -245,7 +247,7 @@ default = p.permission.permission_name break - default_perm = 'repository.none' if form_data['private'] else default + default_perm = 'repository.none' if private else default repo_to_perm.permission_id = self.sa.query(Permission)\ .filter(Permission.permission_name == default_perm)\ @@ -256,9 +258,9 @@ self.sa.add(repo_to_perm) - if fork: - if form_data.get('copy_permissions'): - repo = Repository.get(fork_parent_id) + if fork_of: + if copy_fork_permissions: + repo = fork_of user_perms = UserRepoToPerm.query()\ .filter(UserRepoToPerm.repository == repo).all() group_perms = UsersGroupRepoToPerm.query()\ @@ -277,20 +279,37 @@ _create_default_perms() if not just_db: - self.__create_repo(repo_name, form_data['repo_type'], - form_data['repo_group'], - form_data['clone_uri']) + self.__create_repo(repo_name, repo_type, + repo_group, + clone_uri) log_create_repository(new_repo.get_dict(), - created_by=cur_user.username) + created_by=owner.username) # now automatically start following this repository as owner ScmModel(self.sa).toggle_following_repo(new_repo.repo_id, - cur_user.user_id) + owner.user_id) return new_repo except: log.error(traceback.format_exc()) raise + def create(self, form_data, cur_user, just_db=False, fork=None): + + repo_name = form_data['repo_name_full'] + repo_type = form_data['repo_type'] + description = form_data['description'] + owner = cur_user + private = form_data['private'] + clone_uri = form_data.get('clone_uri') + repos_group = form_data['repo_group'] + landing_rev = form_data['landing_rev'] + copy_fork_permissions = form_data.get('copy_permissions') + fork_of = form_data.get('fork_parent_id') + return self.create_repo( + repo_name, repo_type, description, owner, private, clone_uri, + repos_group, landing_rev, just_db, fork_of, copy_fork_permissions + ) + def create_fork(self, form_data, cur_user): """ Simple wrapper into executing celery task for fork creation @@ -303,12 +322,13 @@ def delete(self, repo): repo = self._get_repo(repo) - try: - self.sa.delete(repo) - self.__delete_repo(repo) - except: - log.error(traceback.format_exc()) - raise + if repo: + try: + self.sa.delete(repo) + self.__delete_repo(repo) + except: + log.error(traceback.format_exc()) + raise def grant_user_permission(self, repo, user, perm): """
--- a/rhodecode/model/users_group.py Sun Jul 01 12:45:21 2012 +0200 +++ b/rhodecode/model/users_group.py Sun Jul 01 15:47:54 2012 +0200 @@ -37,6 +37,8 @@ class UsersGroupModel(BaseModel): + cls = UsersGroup + def __get_users_group(self, users_group): return self._get_instance(UsersGroup, users_group, callback=UsersGroup.get_by_group_name)