changeset 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 ac32a026c306
children d280aa1c85c6
files pylons_app/lib/hooks.py pylons_app/lib/middleware/simplehg.py pylons_app/model/db.py pylons_app/templates/admin/admin_log.html
diffstat 4 files changed, 43 insertions(+), 6 deletions(-) [+]
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()    
--- a/pylons_app/lib/middleware/simplehg.py	Thu Sep 23 21:25:30 2010 +0200
+++ b/pylons_app/lib/middleware/simplehg.py	Fri Sep 24 18:13:29 2010 +0200
@@ -121,7 +121,7 @@
             return HTTPNotFound()(environ, start_response)
         try:
             app = wsgiapplication(self.__make_app)
-        except RepoError as e:
+        except RepoError, e:
             if str(e).find('not found') != -1:
                 return HTTPNotFound()(environ, start_response)
         except Exception:
@@ -195,7 +195,7 @@
             sa.commit()
             log.info('Adding user %s, action %s on %s',
                                             user.username, action, repo)
-        except Exception as e:
+        except Exception, e:
             sa.rollback()
             log.error('could not log user action:%s', str(e))
         finally:
--- a/pylons_app/model/db.py	Thu Sep 23 21:25:30 2010 +0200
+++ b/pylons_app/model/db.py	Fri Sep 24 18:13:29 2010 +0200
@@ -70,7 +70,7 @@
     repository = Column("repository", TEXT(length=None, convert_unicode=False, assert_unicode=None), ForeignKey(u'repositories.repo_name'), nullable=False, unique=None, default=None)
     action = Column("action", TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     action_date = Column("action_date", DATETIME(timezone=False), nullable=True, unique=None, default=None)
-    
+    revision = Column('revision', TEXT(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
     user = relation('User')
     
 class Repository(Base):
--- a/pylons_app/templates/admin/admin_log.html	Thu Sep 23 21:25:30 2010 +0200
+++ b/pylons_app/templates/admin/admin_log.html	Fri Sep 24 18:13:29 2010 +0200
@@ -13,7 +13,14 @@
 	<tr class="parity${cnt%2}">
 		<td>${h.link_to(l.user.username,h.url('edit_user', id=l.user.user_id))}</td>
 		<td>${h.link_to(l.repository,h.url('summary_home',repo_name=l.repository))}</td>
-		<td>${l.action}</td>
+		<td>
+		% if l.action == 'push' and l.revision:
+		  ${h.link_to('%s - %s' % (l.action,l.revision),
+		  h.url('changeset_home',repo_name=l.repository,revision=l.revision))}
+		%else:
+		  ${l.action}
+		%endif
+		</td>
 		<td>${l.action_date}</td>
 		<td>${l.user_ip}</td>
 	</tr>