Mercurial > kallithea
comparison 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 |
comparison
equal
deleted
inserted
replaced
3640:4f80df0d45c8 | 3641:b44979649915 |
---|---|
851 raise JSONRPCError( | 851 raise JSONRPCError( |
852 'failed to fork repository `%s` as `%s`' % (repo_name, | 852 'failed to fork repository `%s` as `%s`' % (repo_name, |
853 fork_name) | 853 fork_name) |
854 ) | 854 ) |
855 | 855 |
856 def delete_repo(self, apiuser, repoid): | 856 def delete_repo(self, apiuser, repoid, forks=Optional(None)): |
857 """ | 857 """ |
858 Deletes a given repository | 858 Deletes a given repository |
859 | 859 |
860 :param apiuser: | 860 :param apiuser: |
861 :param repoid: | 861 :param repoid: |
862 :param forks: detach or delete, what do do with attached forks for repo | |
862 """ | 863 """ |
863 repo = get_repo_or_error(repoid) | 864 repo = get_repo_or_error(repoid) |
864 | 865 |
865 if HasPermissionAnyApi('hg.admin')(user=apiuser) is False: | 866 if HasPermissionAnyApi('hg.admin')(user=apiuser) is False: |
866 # check if we have admin permission for this repo ! | 867 # check if we have admin permission for this repo ! |
867 if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, | 868 if HasRepoPermissionAnyApi('repository.admin')(user=apiuser, |
868 repo_name=repo.repo_name) is False: | 869 repo_name=repo.repo_name) is False: |
869 raise JSONRPCError('repository `%s` does not exist' % (repoid)) | 870 raise JSONRPCError('repository `%s` does not exist' % (repoid)) |
870 | 871 |
871 try: | 872 try: |
872 RepoModel().delete(repo) | 873 handle_forks = Optional.extract(forks) |
873 Session().commit() | 874 _forks_msg = '' |
874 return dict( | 875 _forks = [f for f in repo.forks] |
875 msg='Deleted repository `%s`' % repo.repo_name, | 876 if handle_forks == 'detach': |
877 _forks_msg = ' ' + _('Detached %s forks') % len(_forks) | |
878 elif handle_forks == 'delete': | |
879 _forks_msg = ' ' + _('Deleted %s forks') % len(_forks) | |
880 elif _forks: | |
881 raise JSONRPCError( | |
882 'Cannot delete `%s` it still contains attached forks' | |
883 % repo.repo_name | |
884 ) | |
885 | |
886 RepoModel().delete(repo, forks=forks) | |
887 Session().commit() | |
888 return dict( | |
889 msg='Deleted repository `%s`%s' % (repo.repo_name, _forks_msg), | |
876 success=True | 890 success=True |
877 ) | 891 ) |
878 except Exception: | 892 except Exception: |
879 log.error(traceback.format_exc()) | 893 log.error(traceback.format_exc()) |
880 raise JSONRPCError( | 894 raise JSONRPCError( |