diff -r 1cbeefa59343 -r 5e6d44511317 mercurial/hgweb/webcommands.py --- a/mercurial/hgweb/webcommands.py Sun Mar 26 16:51:19 2017 -0700 +++ b/mercurial/hgweb/webcommands.py Thu Jan 19 17:41:00 2017 +0100 @@ -28,6 +28,7 @@ from .. import ( archival, + context, encoding, error, graphmod, @@ -968,6 +969,8 @@ except ValueError: pass + lrange = webutil.linerange(req) + lessvars = copy.copy(tmpl.defaults['sessionvars']) lessvars['revcount'] = max(revcount / 2, 1) morevars = copy.copy(tmpl.defaults['sessionvars']) @@ -996,24 +999,49 @@ path = fctx.path() return webutil.diffs(web, tmpl, ctx, basectx, [path], diffstyle) - for i in revs: - iterfctx = fctx.filectx(i) - diffs = None - if patch: - diffs = diff(iterfctx) - entries.append(dict( - parity=next(parity), - filerev=i, - file=f, - diff=diffs, - rename=webutil.renamelink(iterfctx), - **webutil.commonentry(repo, iterfctx))) - entries.reverse() + linerange = None + if lrange is not None: + linerange = webutil.formatlinerange(*lrange) + # deactivate numeric nav links when linerange is specified as this + # would required a dedicated "revnav" class + nav = None + ancestors = context.blockancestors(fctx, *lrange) + for i, (c, lr) in enumerate(ancestors, 1): + diffs = None + if patch: + diffs = diff(c) + # follow renames accross filtered (not in range) revisions + path = c.path() + entries.append(dict( + parity=next(parity), + filerev=c.rev(), + file=path, + diff=diffs, + linerange=webutil.formatlinerange(*lr), + **webutil.commonentry(repo, c))) + if i == revcount: + break + lessvars['linerange'] = webutil.formatlinerange(*lrange) + morevars['linerange'] = lessvars['linerange'] + else: + for i in revs: + iterfctx = fctx.filectx(i) + diffs = None + if patch: + diffs = diff(iterfctx) + entries.append(dict( + parity=next(parity), + filerev=i, + file=f, + diff=diffs, + rename=webutil.renamelink(iterfctx), + **webutil.commonentry(repo, iterfctx))) + entries.reverse() + revnav = webutil.filerevnav(web.repo, fctx.path()) + nav = revnav.gen(end - 1, revcount, count) latestentry = entries[:1] - revnav = webutil.filerevnav(web.repo, fctx.path()) - nav = revnav.gen(end - 1, revcount, count) return tmpl("filelog", file=f, nav=nav, @@ -1021,6 +1049,7 @@ entries=entries, patch=patch, latestentry=latestentry, + linerange=linerange, revcount=revcount, morevars=morevars, lessvars=lessvars,