# HG changeset patch # User Marcin Kuzminski # Date 1349734115 -7200 # Node ID 1b275d04ac0766630729232fbd698b90cc9d8c33 # Parent 9c778306eb73b915431b726a94066a08c679d6a3 #595 add rcextension hook for repository delete diff -r 9c778306eb73 -r 1b275d04ac07 docs/changelog.rst --- a/docs/changelog.rst Mon Oct 08 23:38:07 2012 +0200 +++ b/docs/changelog.rst Tue Oct 09 00:08:35 2012 +0200 @@ -17,6 +17,7 @@ - #574 Show pull request status also in shortlog (if any) - remember selected tab in my account page - Bumped mercurial version to 2.3.2 +- #595 rcextension hook for repository delete fixes +++++ diff -r 9c778306eb73 -r 1b275d04ac07 rhodecode/config/rcextensions/__init__.py --- a/rhodecode/config/rcextensions/__init__.py Mon Oct 08 23:38:07 2012 +0200 +++ b/rhodecode/config/rcextensions/__init__.py Tue Oct 09 00:08:35 2012 +0200 @@ -40,12 +40,38 @@ :param group_id: :param created_by: """ - return 0 CREATE_REPO_HOOK = _crhook #============================================================================== +# POST DELETE REPOSITORY HOOK +#============================================================================== +# this function will be executed after each repository deletion +def _dlhook(*args, **kwargs): + """ + Post create repository HOOK + kwargs available: + :param repo_name: + :param repo_type: + :param description: + :param private: + :param created_on: + :param enable_downloads: + :param repo_id: + :param user_id: + :param enable_statistics: + :param clone_uri: + :param fork_id: + :param group_id: + :param deleted_by: + :param deleted_on: + """ + return 0 +DELETE_REPO_HOOK = _dlhook + + +#============================================================================== # POST PUSH HOOK #============================================================================== diff -r 9c778306eb73 -r 1b275d04ac07 rhodecode/lib/hooks.py --- a/rhodecode/lib/hooks.py Mon Oct 08 23:38:07 2012 +0200 +++ b/rhodecode/lib/hooks.py Tue Oct 09 00:08:35 2012 +0200 @@ -24,6 +24,7 @@ # along with this program. If not, see . import os import sys +import time import binascii from inspect import isfunction @@ -38,6 +39,7 @@ from rhodecode.lib.utils2 import safe_str from rhodecode.model.db import Repository, User + def _get_scm_size(alias, root_path): if not alias.startswith('.'): @@ -262,7 +264,6 @@ :param repository: dict dump of repository object :param created_by: username who created repository - :param created_date: date of creation available keys of repository_dict: @@ -291,6 +292,45 @@ return 0 + +def log_delete_repository(repository_dict, deleted_by, **kwargs): + """ + Post delete repository Hook. This is a dummy function for admins to re-use + if needed. It's taken from rhodecode-extensions module and executed + if present + + :param repository: dict dump of repository object + :param deleted_by: username who deleted the repository + + available keys of repository_dict: + + 'repo_type', + 'description', + 'private', + 'created_on', + 'enable_downloads', + 'repo_id', + 'user_id', + 'enable_statistics', + 'clone_uri', + 'fork_id', + 'group_id', + 'repo_name' + + """ + from rhodecode import EXTENSIONS + callback = getattr(EXTENSIONS, 'DELETE_REPO_HOOK', None) + if isfunction(callback): + kw = {} + kw.update(repository_dict) + kw.update({'deleted_by': deleted_by, + 'deleted_on': time.time()}) + kw.update(kwargs) + return callback(**kw) + + return 0 + + handle_git_pre_receive = (lambda repo_path, revs, env: handle_git_receive(repo_path, revs, env, hook_type='pre')) handle_git_post_receive = (lambda repo_path, revs, env: diff -r 9c778306eb73 -r 1b275d04ac07 rhodecode/model/repo.py --- a/rhodecode/model/repo.py Mon Oct 08 23:38:07 2012 +0200 +++ b/rhodecode/model/repo.py Tue Oct 09 00:08:35 2012 +0200 @@ -33,7 +33,7 @@ from rhodecode.lib.compat import json from rhodecode.lib.utils2 import LazyProperty, safe_str, safe_unicode from rhodecode.lib.caching_query import FromCache -from rhodecode.lib.hooks import log_create_repository +from rhodecode.lib.hooks import log_create_repository, log_delete_repository from rhodecode.model import BaseModel from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \ @@ -336,9 +336,13 @@ def delete(self, repo): repo = self._get_repo(repo) if repo: + old_repo_dict = repo.get_dict() + owner = repo.user try: self.sa.delete(repo) self.__delete_repo(repo) + log_delete_repository(old_repo_dict, + deleted_by=owner.username) except: log.error(traceback.format_exc()) raise