Mercurial > hg
changeset 14570:9f908ef5a595
web: provide diff summary to the changeset page
This is the same message displayed at the end of the "diff --stat" command.
For example, "9 files changed, 1651 insertions(+), 2 deletions(-)".
The webutil.diffstatgen function allows the diffstat data to be lazily
calculated only once and then re-used.
author | Steven Brown <StevenGBrown@gmail.com> |
---|---|
date | Sat, 11 Jun 2011 21:11:43 +0800 |
parents | 017ab404e588 |
children | 17c0cb1045e5 |
files | mercurial/hgweb/webcommands.py mercurial/hgweb/webutil.py |
diffstat | 2 files changed, 20 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hgweb/webcommands.py Sat Jun 11 14:14:53 2011 -0500 +++ b/mercurial/hgweb/webcommands.py Sat Jun 11 21:11:43 2011 +0800 @@ -271,7 +271,8 @@ diffs = webutil.diffs(web.repo, tmpl, ctx, None, parity, style) parity = paritygen(web.stripecount) - diffstat = webutil.diffstat(tmpl, ctx, parity) + diffstatgen = webutil.diffstatgen(ctx) + diffstat = webutil.diffstat(tmpl, ctx, diffstatgen, parity) return tmpl('changeset', diff=diffs, @@ -286,6 +287,7 @@ desc=ctx.description(), date=ctx.date(), files=files, + diffsummary=lambda **x: webutil.diffsummary(diffstatgen), diffstat=diffstat, archives=web.archivelist(ctx.hex()), tags=webutil.nodetagsdict(web.repo, ctx.node()),
--- a/mercurial/hgweb/webutil.py Sat Jun 11 14:14:53 2011 -0500 +++ b/mercurial/hgweb/webutil.py Sat Jun 11 21:11:43 2011 +0800 @@ -8,6 +8,7 @@ import os, copy from mercurial import match, patch, scmutil, error, ui, util +from mercurial.i18n import _ from mercurial.node import hex, nullid def up(p): @@ -211,11 +212,25 @@ yield tmpl('diffblock', parity=parity.next(), lines=prettyprintlines(''.join(block))) -def diffstat(tmpl, ctx, parity): - '''Return a diffstat template for each file in the diff.''' +def diffstatgen(ctx): + '''Generator function that provides the diffstat data.''' stats = patch.diffstatdata(util.iterlines(ctx.diff())) maxname, maxtotal, addtotal, removetotal, binary = patch.diffstatsum(stats) + while True: + yield stats, maxname, maxtotal, addtotal, removetotal, binary + +def diffsummary(statgen): + '''Return a short summary of the diff.''' + + stats, maxname, maxtotal, addtotal, removetotal, binary = statgen.next() + return _(' %d files changed, %d insertions(+), %d deletions(-)\n') % ( + len(stats), addtotal, removetotal) + +def diffstat(tmpl, ctx, statgen, parity): + '''Return a diffstat template for each file in the diff.''' + + stats, maxname, maxtotal, addtotal, removetotal, binary = statgen.next() files = ctx.files() def pct(i):