diff --git a/docs/api/api.rst b/docs/api/api.rst --- a/docs/api/api.rst +++ b/docs/api/api.rst @@ -503,6 +503,29 @@ OUTPUT:: 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 : "" + method : "delete_repo" + args: { + "repo_name" : "", + } + +OUTPUT:: + + result: { + "msg": "Deleted repository ", + } + error: null + + grant_user_permission --------------------- diff --git a/rhodecode/controllers/api/api.py b/rhodecode/controllers/api/api.py --- a/rhodecode/controllers/api/api.py +++ b/rhodecode/controllers/api/api.py @@ -493,6 +493,25 @@ class ApiController(JSONRPCController): 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 diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -302,6 +302,7 @@ class RepoModel(BaseModel): 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)