3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
4 # |
4 # |
5 # This software may be used and distributed according to the terms |
5 # This software may be used and distributed according to the terms |
6 # of the GNU General Public License, incorporated herein by reference. |
6 # of the GNU General Public License, incorporated herein by reference. |
7 |
7 |
8 import os, mimetypes, re, cgi |
8 import os, mimetypes, re, cgi, copy |
9 import webutil |
9 import webutil |
10 from mercurial import revlog, archival, templatefilters |
10 from mercurial import revlog, archival, templatefilters |
11 from mercurial.node import short, hex, nullid |
11 from mercurial.node import short, hex, nullid |
12 from mercurial.util import binary, datestr |
12 from mercurial.util import binary, datestr |
13 from mercurial.repo import RepoError |
13 from mercurial.repo import RepoError |
617 |
617 |
618 def graph(web, req, tmpl): |
618 def graph(web, req, tmpl): |
619 rev = webutil.changectx(web.repo, req).rev() |
619 rev = webutil.changectx(web.repo, req).rev() |
620 bg_height = 39 |
620 bg_height = 39 |
621 |
621 |
|
622 revcount = 25 |
|
623 if 'revcount' in req.form: |
|
624 revcount = int(req.form.get('revcount', [revcount])[0]) |
|
625 tmpl.defaults['sessionvars']['revcount'] = revcount |
|
626 |
|
627 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
|
628 lessvars['revcount'] = revcount / 2 |
|
629 morevars = copy.copy(tmpl.defaults['sessionvars']) |
|
630 morevars['revcount'] = revcount * 2 |
|
631 |
622 max_rev = len(web.repo) - 1 |
632 max_rev = len(web.repo) - 1 |
623 revcount = min(max_rev, int(req.form.get('revcount', [25])[0])) |
633 revcount = min(max_rev, revcount) |
624 revnode = web.repo.changelog.node(rev) |
634 revnode = web.repo.changelog.node(rev) |
625 revnode_hex = hex(revnode) |
635 revnode_hex = hex(revnode) |
626 uprev = min(max_rev, rev + revcount) |
636 uprev = min(max_rev, rev + revcount) |
627 downrev = max(0, rev - revcount) |
637 downrev = max(0, rev - revcount) |
628 lessrev = max(0, rev - revcount / 2) |
|
629 |
|
630 count = len(web.repo) |
638 count = len(web.repo) |
631 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx) |
639 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx) |
632 |
640 |
633 tree = list(graphmod.graph(web.repo, rev, downrev)) |
641 tree = list(graphmod.graph(web.repo, rev, downrev)) |
634 canvasheight = (len(tree) + 1) * bg_height - 27; |
642 canvasheight = (len(tree) + 1) * bg_height - 27; |
635 |
|
636 data = [] |
643 data = [] |
637 for i, (ctx, vtx, edges) in enumerate(tree): |
644 for i, (ctx, vtx, edges) in enumerate(tree): |
638 node = short(ctx.node()) |
645 node = short(ctx.node()) |
639 age = templatefilters.age(ctx.date()) |
646 age = templatefilters.age(ctx.date()) |
640 desc = templatefilters.firstline(ctx.description()) |
647 desc = templatefilters.firstline(ctx.description()) |
643 branch = ctx.branch() |
650 branch = ctx.branch() |
644 branch = branch, web.repo.branchtags().get(branch) == ctx.node() |
651 branch = branch, web.repo.branchtags().get(branch) == ctx.node() |
645 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags())) |
652 data.append((node, vtx, edges, desc, user, age, branch, ctx.tags())) |
646 |
653 |
647 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev, |
654 return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev, |
648 lessrev=lessrev, revcountmore=revcount and 2 * revcount or 1, |
655 lessvars=lessvars, morevars=morevars, downrev=downrev, |
649 revcountless=revcount / 2, downrev=downrev, |
656 canvasheight=canvasheight, jsdata=data, bg_height=bg_height, |
650 canvasheight=canvasheight, bg_height=bg_height, |
657 node=revnode_hex, changenav=changenav) |
651 jsdata=data, node=revnode_hex, changenav=changenav) |
|