Mercurial > kallithea
diff rhodecode/controllers/api/api.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 | 7cde75eac0fe |
children | 05006e3e286b 3563bb7b4b82 |
line wrap: on
line diff
--- a/rhodecode/controllers/api/api.py Sat Mar 30 16:17:56 2013 +0100 +++ b/rhodecode/controllers/api/api.py Sun Mar 31 16:18:09 2013 +0200 @@ -853,12 +853,13 @@ fork_name) ) - def delete_repo(self, apiuser, repoid): + def delete_repo(self, apiuser, repoid, forks=Optional(None)): """ Deletes a given repository :param apiuser: :param repoid: + :param forks: detach or delete, what do do with attached forks for repo """ repo = get_repo_or_error(repoid) @@ -866,13 +867,26 @@ # check if we have admin permission for this repo ! if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, repo_name=repo.repo_name) is False: - raise JSONRPCError('repository `%s` does not exist' % (repoid)) + raise JSONRPCError('repository `%s` does not exist' % (repoid)) try: - RepoModel().delete(repo) + handle_forks = Optional.extract(forks) + _forks_msg = '' + _forks = [f for f in repo.forks] + if handle_forks == 'detach': + _forks_msg = ' ' + _('Detached %s forks') % len(_forks) + elif handle_forks == 'delete': + _forks_msg = ' ' + _('Deleted %s forks') % len(_forks) + elif _forks: + raise JSONRPCError( + 'Cannot delete `%s` it still contains attached forks' + % repo.repo_name + ) + + RepoModel().delete(repo, forks=forks) Session().commit() return dict( - msg='Deleted repository `%s`' % repo.repo_name, + msg='Deleted repository `%s`%s' % (repo.repo_name, _forks_msg), success=True ) except Exception: