Mercurial > kallithea
view pylons_app/controllers/changelog.py @ 245:a83a1799480c
Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Thu, 03 Jun 2010 00:04:48 +0200 |
parents | 7a97f0b100cd |
children | 3782a6d698af |
line wrap: on
line source
from mercurial.graphmod import revisions as graph_rev, colored, CHANGESET from mercurial.node import short from pylons import request, session, tmpl_context as c from pylons_app.lib.auth import LoginRequired from pylons_app.lib.base import BaseController, render from pylons_app.lib.filters import age as _age, person from pylons_app.model.hg_model import _full_changelog_cached from simplejson import dumps from webhelpers.paginate import Page import logging log = logging.getLogger(__name__) class ChangelogController(BaseController): @LoginRequired() def __before__(self): super(ChangelogController, self).__before__() def index(self): limit = 100 default = 20 if request.params.get('size'): try: int_size = int(request.params.get('size')) except ValueError: int_size = default int_size = int_size if int_size <= limit else limit c.size = int_size session['changelog_size'] = c.size session.save() else: c.size = session.get('changelog_size', default) changesets = _full_changelog_cached(c.repo_name) p = int(request.params.get('page', 1)) c.pagination = Page(changesets, page=p, item_count=len(changesets), items_per_page=c.size) #self._graph(c.repo, c.size,p) return render('changelog/changelog.html') def _graph(self, repo, size, p): revcount = size if not repo.revisions:return dumps([]), 0 max_rev = repo.revisions[-1] offset = 1 if p == 1 else ((p - 1) * revcount) rev_start = repo.revisions[(-1 * offset)] c.bg_height = 120 revcount = min(max_rev, revcount) rev_end = max(0, rev_start - revcount) dag = graph_rev(repo.repo, rev_start, rev_end) c.dag = tree = list(colored(dag)) canvasheight = (len(tree) + 1) * c.bg_height - 27 data = [] for (id, type, ctx, vtx, edges) in tree: if type != CHANGESET: continue node = short(ctx.node()) age = _age(ctx.date()) desc = ctx.description() user = person(ctx.user()) branch = ctx.branch() branch = branch, repo.repo.branchtags().get(branch) == ctx.node() data.append((node, vtx, edges, desc, user, age, branch, ctx.tags())) c.jsdata = dumps(data) c.canvasheight = canvasheight