changeset 2904:1b275d04ac07 beta

#595 add rcextension hook for repository delete
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 09 Oct 2012 00:08:35 +0200
parents 9c778306eb73
children 28b85b1b46cf
files docs/changelog.rst rhodecode/config/rcextensions/__init__.py rhodecode/lib/hooks.py rhodecode/model/repo.py
diffstat 4 files changed, 74 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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
 +++++
--- 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
 #==============================================================================
 
--- 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 <http://www.gnu.org/licenses/>.
 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:
--- 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