Mercurial > public > src > rhodecode
diff pylons_app/model/repo_model.py @ 578:a08f610e545e
Implemented server side forks
added ability to pass session to user/repo models
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 01 Oct 2010 00:16:09 +0200 |
parents | 3ed2d46a2ca7 |
children |
line wrap: on
line diff
--- a/pylons_app/model/repo_model.py Thu Sep 30 18:35:03 2010 +0200 +++ b/pylons_app/model/repo_model.py Fri Oct 01 00:16:09 2010 +0200 @@ -27,6 +27,7 @@ from pylons_app.model.db import Repository, RepoToPerm, User, Permission from pylons_app.model.meta import Session from pylons_app.model.user_model import UserModel +from pylons_app.lib.celerylib.tasks import create_repo_fork, run_task import logging import os import shutil @@ -35,11 +36,15 @@ class RepoModel(object): - def __init__(self): - self.sa = Session() + def __init__(self, sa=None): + if not sa: + self.sa = Session() + else: + self.sa = sa def get(self, id): - return self.sa.query(Repository).filter(Repository.repo_name == id).scalar() + return self.sa.query(Repository)\ + .filter(Repository.repo_name == id).scalar() def get_users_js(self): @@ -100,20 +105,32 @@ self.sa.rollback() raise - def create(self, form_data, cur_user, just_db=False): + def create(self, form_data, cur_user, just_db=False, fork=False): try: - repo_name = form_data['repo_name'] + if fork: + repo_name = str(form_data['fork_name']) + org_name = str(form_data['repo_name']) + + else: + org_name = repo_name = str(form_data['repo_name']) new_repo = Repository() for k, v in form_data.items(): + if k == 'repo_name': + v = repo_name setattr(new_repo, k, v) + if fork: + parent_repo = self.sa.query(Repository)\ + .filter(Repository.repo_name == org_name).scalar() + new_repo.fork = parent_repo + new_repo.user_id = cur_user.user_id self.sa.add(new_repo) #create default permission repo_to_perm = RepoToPerm() default = 'repository.read' - for p in UserModel().get_default().user_perms: + for p in UserModel(self.sa).get_default().user_perms: if p.permission.permission_name.startswith('repository.'): default = p.permission.permission_name break @@ -136,7 +153,10 @@ log.error(traceback.format_exc()) self.sa.rollback() raise - + + def create_fork(self, form_data, cur_user): + run_task(create_repo_fork, form_data, cur_user) + def delete(self, repo): try: self.sa.delete(repo)