# HG changeset patch # User Edward Lee # Date 2007-09-05 03:25:37 # Node ID 800e2756c9abbc2b48ea5b3ec90e466eabd801a5 # Parent 23889160905a1b09fffe1c07378e9fc1827606eb Add line anchors to annotate, changeset, diff, file views for hgweb diff --git a/mercurial/hgweb/common.py b/mercurial/hgweb/common.py --- a/mercurial/hgweb/common.py +++ b/mercurial/hgweb/common.py @@ -76,3 +76,9 @@ def paritygen(stripecount, offset=0): parity = 1 - parity count = 0 +def countgen(start=0, step=1): + """count forever -- useful for line numbers""" + while True: + yield start + start += step + diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py --- a/mercurial/hgweb/hgweb_mod.py +++ b/mercurial/hgweb/hgweb_mod.py @@ -12,7 +12,7 @@ from mercurial.node import * from mercurial.i18n import gettext as _ from mercurial import mdiff, ui, hg, util, archival, streamclone, patch from mercurial import revlog, templater -from common import get_mtime, staticfile, style_map, paritygen +from common import get_mtime, staticfile, style_map, paritygen, countgen def _up(p): if p[0] != "/": @@ -170,16 +170,25 @@ class hgweb(object): file=f, filenode=hex(fn or nullid)) + blockcount = countgen() def prettyprintlines(diff): - for l in diff.splitlines(1): + blockno = blockcount.next() + for lineno, l in enumerate(diff.splitlines(1)): + if blockno == 0: + lineno = lineno + 1 + else: + lineno = "%d.%d" % (blockno, lineno + 1) + type = "diffline" if l.startswith('+'): - yield self.t("difflineplus", line=l) + type = "difflineplus" elif l.startswith('-'): - yield self.t("difflineminus", line=l) + type = "difflineminus" elif l.startswith('@'): - yield self.t("difflineat", line=l) - else: - yield self.t("diffline", line=l) + type = "difflineat" + yield self.t(type, + line=l, + lineid="l%s" % lineno, + linenumber="% 8s" % lineno) r = self.repo c1 = r.changectx(node1) @@ -398,9 +407,10 @@ class hgweb(object): mt = mt or 'text/plain' def lines(): - for l, t in enumerate(text.splitlines(1)): + for lineno, t in enumerate(text.splitlines(1)): yield {"line": t, - "linenumber": "% 6d" % (l + 1), + "lineid": "l%d" % (lineno + 1), + "linenumber": "% 6d" % (lineno + 1), "parity": parity.next()} yield self.t("filerevision", @@ -427,7 +437,7 @@ class hgweb(object): def annotate(**map): last = None - for f, l in fctx.annotate(follow=True): + for lineno, (f, l) in enumerate(fctx.annotate(follow=True)): fnode = f.filenode() name = self.repo.ui.shortuser(f.user()) @@ -439,7 +449,9 @@ class hgweb(object): "rev": f.rev(), "author": name, "file": f.path(), - "line": l} + "line": l, + "lineid": "l%d" % (lineno + 1), + "linenumber": "% 6d" % (lineno + 1)} yield self.t("fileannotate", file=f, diff --git a/templates/gitweb/map b/templates/gitweb/map --- a/templates/gitweb/map +++ b/templates/gitweb/map @@ -22,12 +22,12 @@ filerevision = filerevision.tmpl fileannotate = fileannotate.tmpl filediff = filediff.tmpl filelog = filelog.tmpl -fileline = '
   #linenumber# #line|escape#
' -annotateline = '#author|obfuscate#@#rev#
#line|escape#
' -difflineplus = '
#line|escape#
' -difflineminus = '
#line|escape#
' -difflineat = '
#line|escape#
' -diffline = '
#line|escape#
' +fileline = '
#linenumber# #line|escape#
' +annotateline = '#author|obfuscate#@#rev#
#linenumber#
#line|escape#
' +difflineplus = '
#linenumber# #line|escape#
' +difflineminus = '
#linenumber# #line|escape#
' +difflineat = '
#linenumber# #line|escape#
' +diffline = '
#linenumber# #line|escape#
' changelogparent = 'parent #rev#:#node|short#' changesetparent = 'parent {rev}{node|short}' filerevparent = 'parent {rev}{rename%filerename}{node|short}' diff --git a/templates/map b/templates/map --- a/templates/map +++ b/templates/map @@ -21,13 +21,13 @@ filerevision = filerevision.tmpl fileannotate = fileannotate.tmpl filediff = filediff.tmpl filelog = filelog.tmpl -fileline = '
#linenumber##line|escape#
' +fileline = '
#linenumber##line|escape#
' filelogentry = filelogentry.tmpl -annotateline = '#author|obfuscate#@#rev#
#line|escape#
' -difflineplus = '#line|escape#' -difflineminus = '#line|escape#' -difflineat = '#line|escape#' -diffline = '#line|escape#' +annotateline = '#author|obfuscate#@#rev##linenumber#
#line|escape#
' +difflineplus = '#linenumber##line|escape#' +difflineminus = '#linenumber##line|escape#' +difflineat = '#linenumber##line|escape#' +diffline = '#linenumber##line|escape#' changelogparent = 'parent #rev#:#node|short#' changesetparent = 'parent #rev#:#node|short#' filerevparent = 'parent:{rename%filerename}{node|short}'