815 static = [os.path.join(p, 'static') for p in tp] |
815 static = [os.path.join(p, 'static') for p in tp] |
816 return [staticfile(static, fname, req)] |
816 return [staticfile(static, fname, req)] |
817 |
817 |
818 def graph(web, req, tmpl): |
818 def graph(web, req, tmpl): |
819 |
819 |
820 rev = webutil.changectx(web.repo, req).rev() |
820 ctx = webutil.changectx(web.repo, req) |
|
821 rev = ctx.rev() |
|
822 |
821 bg_height = 39 |
823 bg_height = 39 |
822 revcount = web.maxshortchanges |
824 revcount = web.maxshortchanges |
823 if 'revcount' in req.form: |
825 if 'revcount' in req.form: |
824 revcount = int(req.form.get('revcount', [revcount])[0]) |
826 revcount = int(req.form.get('revcount', [revcount])[0]) |
825 revcount = max(revcount, 1) |
827 revcount = max(revcount, 1) |
828 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
830 lessvars = copy.copy(tmpl.defaults['sessionvars']) |
829 lessvars['revcount'] = max(revcount / 2, 1) |
831 lessvars['revcount'] = max(revcount / 2, 1) |
830 morevars = copy.copy(tmpl.defaults['sessionvars']) |
832 morevars = copy.copy(tmpl.defaults['sessionvars']) |
831 morevars['revcount'] = revcount * 2 |
833 morevars['revcount'] = revcount * 2 |
832 |
834 |
833 max_rev = len(web.repo) - 1 |
835 count = len(web.repo) |
834 revcount = min(max_rev, revcount) |
836 pos = rev |
835 revnode = web.repo.changelog.node(rev) |
837 start = max(0, pos - revcount + 1) |
836 revnode_hex = hex(revnode) |
838 end = min(count, start + revcount) |
837 uprev = min(max_rev, rev + revcount) |
839 pos = end - 1 |
|
840 |
|
841 uprev = min(max(0, count - 1), rev + revcount) |
838 downrev = max(0, rev - revcount) |
842 downrev = max(0, rev - revcount) |
839 count = len(web.repo) |
843 changenav = webutil.revnavgen(pos, revcount, count, web.repo.changectx) |
840 changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx) |
844 |
841 startrev = rev |
845 dag = graphmod.dagwalker(web.repo, range(start, end)[::-1]) |
842 # if starting revision is less than 60 set it to uprev |
|
843 if rev < web.maxshortchanges: |
|
844 startrev = uprev |
|
845 |
|
846 dag = graphmod.dagwalker(web.repo, range(startrev, downrev - 1, -1)) |
|
847 tree = list(graphmod.colored(dag, web.repo)) |
846 tree = list(graphmod.colored(dag, web.repo)) |
848 |
847 |
849 def getcolumns(tree): |
848 def getcolumns(tree): |
850 cols = 0 |
849 cols = 0 |
851 for (id, type, ctx, vtx, edges) in tree: |
850 for (id, type, ctx, vtx, edges) in tree: |
913 canvaswidth=(cols + 1) * bg_height, |
912 canvaswidth=(cols + 1) * bg_height, |
914 truecanvasheight=rows * bg_height, |
913 truecanvasheight=rows * bg_height, |
915 canvasheight=canvasheight, bg_height=bg_height, |
914 canvasheight=canvasheight, bg_height=bg_height, |
916 jsdata=lambda **x: graphdata(True, **x), |
915 jsdata=lambda **x: graphdata(True, **x), |
917 nodes=lambda **x: graphdata(False, **x), |
916 nodes=lambda **x: graphdata(False, **x), |
918 node=revnode_hex, changenav=changenav) |
917 node=ctx.hex(), changenav=changenav) |
919 |
918 |
920 def _getdoc(e): |
919 def _getdoc(e): |
921 doc = e[0].__doc__ |
920 doc = e[0].__doc__ |
922 if doc: |
921 if doc: |
923 doc = _(doc).split('\n')[0] |
922 doc = _(doc).split('\n')[0] |