Mercurial > kallithea
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>