# HG changeset patch # User Marcin Kuzminski # Date 1285344809 -7200 # Node ID 3d6d548ad3cc3415662edadb455b370170266bf0 # Parent ac32a026c3063427e4afc5b67ce945e9f6941b14 Added user action mapper to map push to changeset. made exception in simplehg python 2.5 ready diff -r ac32a026c306 -r 3d6d548ad3cc pylons_app/lib/hooks.py --- 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() diff -r ac32a026c306 -r 3d6d548ad3cc pylons_app/lib/middleware/simplehg.py --- 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: diff -r ac32a026c306 -r 3d6d548ad3cc pylons_app/model/db.py --- 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): diff -r ac32a026c306 -r 3d6d548ad3cc pylons_app/templates/admin/admin_log.html --- 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 @@ ${h.link_to(l.user.username,h.url('edit_user', id=l.user.user_id))} ${h.link_to(l.repository,h.url('summary_home',repo_name=l.repository))} - ${l.action} + + % 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 + ${l.action_date} ${l.user_ip}