changeset 2003:7dfcdf4c7dd2 beta

implements #361 API method for deleting repositories
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 19 Feb 2012 20:12:01 +0200
parents bdc0ad168006
children f2b7bebc6790
files docs/api/api.rst rhodecode/controllers/api/api.py rhodecode/model/repo.py
diffstat 3 files changed, 43 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/docs/api/api.rst	Sun Feb 19 20:00:18 2012 +0200
+++ b/docs/api/api.rst	Sun Feb 19 20:12:01 2012 +0200
@@ -503,6 +503,29 @@
     error:  null
 
 
+delete_repo
+-----------
+
+Deletes a repository. This command can be executed only using api_key
+belonging to user with admin rights.
+
+
+INPUT::
+
+    api_key : "<api_key>"
+    method :  "delete_repo"
+    args:     {
+                "repo_name" :   "<reponame>",
+              }
+
+OUTPUT::
+
+    result: {
+              "msg": "Deleted repository <reponame>",
+            }
+    error:  null
+
+
 grant_user_permission
 ---------------------
 
--- a/rhodecode/controllers/api/api.py	Sun Feb 19 20:00:18 2012 +0200
+++ b/rhodecode/controllers/api/api.py	Sun Feb 19 20:12:01 2012 +0200
@@ -493,6 +493,25 @@
             raise JSONRPCError('failed to create repository %s' % repo_name)
 
     @HasPermissionAnyDecorator('hg.admin')
+    def delete_repo(self, apiuser, repo_name):
+        """
+        Deletes a given repository
+
+        :param repo_name:
+        """
+        if not Repository.get_by_repo_name(repo_name):
+            raise JSONRPCError("repo %s does not exist" % repo_name)
+        try:
+            RepoModel().delete(repo_name)
+            Session.commit()
+            return dict(
+                msg='Deleted repository %s' % repo_name
+            )
+        except Exception:
+            log.error(traceback.format_exc())
+            raise JSONRPCError('failed to delete repository %s' % repo_name)
+
+    @HasPermissionAnyDecorator('hg.admin')
     def grant_user_permission(self, repo_name, username, perm):
         """
         Grant permission for user on given repository, or update existing one
--- a/rhodecode/model/repo.py	Sun Feb 19 20:00:18 2012 +0200
+++ b/rhodecode/model/repo.py	Sun Feb 19 20:12:01 2012 +0200
@@ -302,6 +302,7 @@
         run_task(tasks.create_repo_fork, form_data, cur_user)
 
     def delete(self, repo):
+        repo = self.__get_repo(repo)
         try:
             self.sa.delete(repo)
             self.__delete_repo(repo)