comparison rhodecode/model/repo.py @ 3641:b44979649915 beta

recursive forks detach - added API attrs for option to delete or detach forks - deleting repos with attached forks raises an special Exception
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 31 Mar 2013 16:18:09 +0200
parents 10b4e34841a4
children 34093903b505 3563bb7b4b82
comparison
equal deleted inserted replaced
3640:4f80df0d45c8 3641:b44979649915
40 from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \ 40 from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \
41 Statistics, UserGroup, UserGroupRepoToPerm, RhodeCodeUi, RepoGroup,\ 41 Statistics, UserGroup, UserGroupRepoToPerm, RhodeCodeUi, RepoGroup,\
42 RhodeCodeSetting, RepositoryField 42 RhodeCodeSetting, RepositoryField
43 from rhodecode.lib import helpers as h 43 from rhodecode.lib import helpers as h
44 from rhodecode.lib.auth import HasRepoPermissionAny 44 from rhodecode.lib.auth import HasRepoPermissionAny
45 from rhodecode.lib.exceptions import AttachedForksError
45 46
46 log = logging.getLogger(__name__) 47 log = logging.getLogger(__name__)
47 48
48 49
49 class RepoModel(BaseModel): 50 class RepoModel(BaseModel):
463 :param cur_user: 464 :param cur_user:
464 """ 465 """
465 from rhodecode.lib.celerylib import tasks, run_task 466 from rhodecode.lib.celerylib import tasks, run_task
466 run_task(tasks.create_repo_fork, form_data, cur_user) 467 run_task(tasks.create_repo_fork, form_data, cur_user)
467 468
468 def delete(self, repo): 469 def delete(self, repo, forks=None):
470 """
471 Delete given repository, forks parameter defines what do do with
472 attached forks. Throws AttachedForksError if deleted repo has attached
473 forks
474
475 :param repo:
476 :param forks: str 'delete' or 'detach'
477 """
469 repo = self._get_repo(repo) 478 repo = self._get_repo(repo)
470 if repo: 479 if repo:
480 if forks == 'detach':
481 for r in repo.forks:
482 r.fork = None
483 self.sa.add(r)
484 elif forks == 'delete':
485 for r in repo.forks:
486 self.delete(r, forks='delete')
487 elif [f for f in repo.forks]:
488 raise AttachedForksError()
489
471 old_repo_dict = repo.get_dict() 490 old_repo_dict = repo.get_dict()
472 owner = repo.user 491 owner = repo.user
473 try: 492 try:
474 self.sa.delete(repo) 493 self.sa.delete(repo)
475 self.__delete_repo(repo) 494 self.__delete_repo(repo)