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: