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(