diff pylons_app/lib/hooks.py @ 503:3d6d548ad3cc

Added user action mapper to map push to changeset. made exception in simplehg python 2.5 ready
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 24 Sep 2010 18:13:29 +0200
parents b27d32cb3157
children 39203995f2c4
line wrap: on
line diff
--- a/pylons_app/lib/hooks.py	Thu Sep 23 21:25:30 2010 +0200
+++ b/pylons_app/lib/hooks.py	Fri Sep 24 18:13:29 2010 +0200
@@ -26,12 +26,13 @@
 import sys
 import os
 from pylons_app.lib import helpers as h
+from pylons_app.model import meta
+from pylons_app.model.db import UserLog, User
 
 def repo_size(ui, repo, hooktype=None, **kwargs):
 
     if hooktype != 'changegroup':
         return False
-    
     size_hg, size_root = 0, 0
     for path, dirs, files in os.walk(repo.root):
         if path.find('.hg') != -1:
@@ -43,6 +44,35 @@
                 
     size_hg_f = h.format_byte_size(size_hg)
     size_root_f = h.format_byte_size(size_root)
-    size_total_f = h.format_byte_size(size_root + size_hg)                            
+    size_total_f = h.format_byte_size(size_root + size_hg)
     sys.stdout.write('Repository size .hg:%s repo:%s total:%s\n' \
                      % (size_hg_f, size_root_f, size_total_f))
+    
+    user_action_mapper(ui, repo, hooktype, **kwargs)
+
+def user_action_mapper(ui, repo, hooktype=None, **kwargs):
+    """
+    Maps user last push action to new changeset id, from mercurial
+    @param ui:
+    @param repo:
+    @param hooktype:
+    """
+    
+    try:
+        sa = meta.Session
+        username = kwargs['url'].split(':')[-1]
+        user_log = sa.query(UserLog)\
+            .filter(UserLog.user == sa.query(User)\
+                                        .filter(User.username == username).one())\
+            .order_by(UserLog.user_log_id.desc()).first()
+            
+        if not user_log.revision:
+            user_log.revision = str(repo['tip'])
+            sa.add(user_log)
+            sa.commit()
+        
+    except Exception, e:
+        sa.rollback()
+        raise
+    finally:
+        meta.Session.remove()