view mercurial/templates/gitweb/map @ 41722:37b33c34bf4f

templatekw: add a {negrev} keyword Revision numbers are getting much maligned for two reasons: they are too long in large repos and users get confused by their local-only nature. It just occurred to me that negative revision numbers avoid both of those problems. Since negative revision numbers change whenever the repo changes, it's much more obvious that they are a local-only convenience. Additionally, for the recent commits that we usually care about the most, negative revision numbers are always near zero. This commit adds a negrev templatekw to more easily expose negative revision numbers. It's not easy to reliably produce this output with existing keywords due to hidden commits while at the same time ensuring good performance.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Fri, 15 Feb 2019 14:43:31 -0500
parents d6aa1fc8292f
children
line wrap: on
line source

default = 'summary'
mimetype = 'text/html; charset={encoding}'
header = header.tmpl
footer = footer.tmpl
search = search.tmpl
changelog = changelog.tmpl
summary = summary.tmpl
error = error.tmpl
notfound = notfound.tmpl

help = help.tmpl
helptopics = helptopics.tmpl

helpentry = '
  <tr><td>
    <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
      {if(basename, '{basename|escape}', '{topic|escape}')}
    </a>
  </td><td>
    {summary|escape}
  </td></tr>'

naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
filenodelink = '
  <tr class="parity{parity}">
    <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
    <td></td>
    <td class="link">
      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
      <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
    </td>
  </tr>'
filenolink = '
  <tr class="parity{parity}">
    <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
    <td></td>
    <td class="link">
      file |
      annotate |
      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
      <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
      <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
    </td>
  </tr>'

nav = '{before%naventry} {after%naventry}'
navshort = '{before%navshortentry}{after%navshortentry}'
navgraph = '{before%navgraphentry}{after%navgraphentry}'
filenav = '{before%filenaventry}{after%filenaventry}'

fileellipses = '...'
changelogentry = changelogentry.tmpl
changeset = changeset.tmpl
manifest = manifest.tmpl
updirentry = '
  <tr class="parity{upparity}">
    <td style="font-family:monospace">drwxr-xr-x</td>
    <td style="font-family:monospace"></td>
    <td style="font-family:monospace"></td>
    <td>
      <a href="{url|urlescape}file/{symrev}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
    </td>
    <td class="link">&nbsp;</td>
  </tr>'
direntry = '
  <tr class="parity{parity}">
    <td style="font-family:monospace">drwxr-xr-x</td>
    <td style="font-family:monospace"></td>
    <td style="font-family:monospace"></td>
    <td>
      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
      <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
    </td>
    <td class="link">
      <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
    </td>
  </tr>'
fileentry = '
  <tr class="parity{parity}">
    <td style="font-family:monospace">{permissions|permissions}</td>
    <td style="font-family:monospace" align=right>{date|isodate}</td>
    <td style="font-family:monospace" align=right>{size}</td>
    <td class="list">
      <a class="list" href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
    </td>
    <td class="link">
      <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
      <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
      <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
    </td>
  </tr>'
filerevision = filerevision.tmpl
fileannotate = fileannotate.tmpl
filediff = filediff.tmpl
filecomparison = filecomparison.tmpl
filelog = filelog.tmpl
fileline = '
  <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
annotateline = '
  <tr id="{lineid}" style="font-family:monospace" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
    <td class="annotate linenr parity{blockparity}" style="text-align: right;">
      {if(blockhead,
          '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
             {rev}
           </a>')}
      <div class="annotate-info">
        <div>
          <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
            {node|short}</a>
          {desc|escape|firstline}
        </div>
        <div><em>{author|obfuscate}</em></div>
        <div>parents: {parents%annotateparent}</div>
        <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
        <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
      </div>
    </td>
    <td class="followlines-btn-parent"><pre><a class="linenr" href="#{lineid}">{linenumber}</a></pre></td>
    <td><pre>{line|escape}</pre></td>
  </tr>'
annotateparent = '
  <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
difflineplus = '
  <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
difflineminus = '
  <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
difflineat = '
  <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
diffline = '
  <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'

comparisonblock ='
  <tbody class="block">
  {lines}
  </tbody>'
comparisonline = '
  <tr id="{lineid}" style="font-family:monospace">
    <td class="{type}"><pre><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</pre></td>
    <td class="{type}"><pre><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</pre></td>
  </tr>'

changesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
changesetbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
changesetparent = '
  <tr>
    <td>parent {rev}</td>
    <td style="font-family:monospace">
      {changesetlink}
    </td>
  </tr>'
changesetparentdiff = '
  <tr>
    <td>parent {rev}</td>
    <td style="font-family:monospace">
      {changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}
    </td>
  </tr>'
difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
filerevbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
filerevparent = '
  <tr>
    <td>parent {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
        {rename%filerename}{node|short}
      </a>
    </td>
  </tr>'
filerename = '{file|escape}@'
filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
fileannotateparent = '
  <tr>
    <td>parent {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
        {rename%filerename}{node|short}
      </a>
    </td>
  </tr>'
changesetchild = '
  <tr>
    <td>child {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
    </td>
  </tr>'
filerevchild = '
  <tr>
    <td>child {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
    </tr>'
fileannotatechild = '
  <tr>
    <td>child {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
    </tr>'
tags = tags.tmpl
tagentry = '
  <tr class="parity{parity}">
    <td class="age"><i class="age">{date|rfc822date}</i></td>
    <td><a class="list" href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
    <td class="link">
      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
    </td>
  </tr>'
bookmarks = bookmarks.tmpl
bookmarkentry = '
  <tr class="parity{parity}">
    <td class="age"><i class="age">{date|rfc822date}</i></td>
    <td><a class="list" href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
    <td class="link">
      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
    </td>
  </tr>'
branches = branches.tmpl
branchentry = '
  <tr class="parity{parity}">
    <td class="age"><i class="age">{date|rfc822date}</i></td>
    <td class="{status}"><a class="list" href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}"><b>{branch|escape}</b></a></td>
    <td class="link">
      <a href="{url|urlescape}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
      <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
    </td>
  </tr>'
diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
filediffparent = '
  <tr>
    <td>parent {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
        {node|short}
      </a>
    </td>
  </tr>'
filecompparent = '
  <tr>
    <td>parent {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
        {node|short}
      </a>
    </td>
  </tr>'
filediffchild = '
  <tr>
    <td>child {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
    </td>
  </tr>'
filecompchild = '
  <tr>
    <td>child {rev}</td>
    <td style="font-family:monospace">
      <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
    </td>
  </tr>'
shortlog = shortlog.tmpl
graph = graph.tmpl
graphentry = graphentry.tmpl
phasetag = '{ifeq(phase, 'public', '', '<span class="phasetag" title="{phase|escape}">{phase|escape}</span> ')}'
obsoletetag = '{if(obsolete, '<span class="obsoletetag" title="obsolete">obsolete</span> ')}'
instabilitytag = '<span class="instabilitytag" title="{instability|escape}">{instability|escape}</span> '
tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
alltags = '<span class="logtags">{phasetag}{obsoletetag}{instabilities%instabilitytag}{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>'
successorlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
obsfatesuccessors = '{if(successors, ' as ')}{successors%successorlink}'
obsfateverb = '{obsfateverb(successors, markers)}'
obsfateoperations = '{if(obsfateoperations(markers), ' using {join(obsfateoperations(markers), ', ')}')}'
obsfateusers = '{if(obsfateusers(markers), ' by {join(obsfateusers(markers)%'{user|obfuscate}', ', ')}')}'
obsfatedate = '{if(obsfatedate(markers), ' {ifeq(min(obsfatedate(markers)), max(obsfatedate(markers)), '<span class="age">{min(obsfatedate(markers))|rfc822date}</span>', 'between <span class="age">{min(obsfatedate(markers))|rfc822date}</span> and <span class="age">{max(obsfatedate(markers))|rfc822date}</span>')}')}'
obsfateentry = '
  <tr>
    <td>obsolete</td>
    <td>{obsfateverb}{obsfateoperations}{obsfatesuccessors}{obsfateusers}{obsfatedate}</td>
  </tr>'
instabilitychangesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
divergentnode = '{instabilitychangesetlink} ({phase})'
whyunstableentry = '
  <tr>
    <td>unstable</td>
    <td>{instability}: {if(divergentnodes, divergentnodes%divergentnode)} {reason} {instabilitychangesetlink}</td>
  </tr>'
shortlogentry = '
  <tr class="parity{parity}">
    <td class="age"><i class="age">{date|rfc822date}</i></td>
    <td><i>{author|person}</i></td>
    <td>
      <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
        <b>{desc|strip|firstline|escape|nonempty}</b>
        {alltags}
      </a>
    </td>
    <td class="link" nowrap>
      <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
      <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
    </td>
  </tr>'
filelogentry = '
  <tr class="parity{if(patch, '1', '{parity}')}">
    <td class="age"><i class="age">{date|rfc822date}</i></td>
    <td><i>{author|person}</i></td>
    <td>
      <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
        <b>{desc|strip|firstline|escape|nonempty}</b>
        {alltags}
      </a>
    </td>
    <td class="link">
      <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
      <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
      <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
      {rename%filelogrename}
    </td>
  </tr>
  {if(patch, '<tr><td colspan="4">{diff}</td></tr>')}'
archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
indexentry = '
  <tr class="parity{parity}">
    <td>
      <a class="list" href="{url|urlescape}{sessionvars%urlparameter}">
        <b>{name|escape}</b>
      </a>
    </td>
    <td>{description}</td>
    <td>{contact|obfuscate}</td>
    <td class="age">{lastchange|rfc822date}</td>
    <td class="indexlinks">{archives%indexarchiveentry}</td>
    <td>{if(isdirectory, '',
            '<div class="rss_logo">
                <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
            </div>'
            )}
    </td>
  </tr>\n'
indexarchiveentry = ' <a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
index = index.tmpl
urlparameter = '{separator}{name}={value|urlescape}'
hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '

searchform = '
  <div class="search">
    <form id="searchform" action="{url|urlescape}log">
      {sessionvars%hiddenformentry}
      <input name="rev" type="text" value="{query|escape}" size="40" />
      <div id="hint">{searchhint}</div>
    </form>
  </div>'
searchhint = 'Find changesets by keywords (author, files, the commit message), revision
  number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'

diffoptsform = '
  <form id="diffopts-form"
    data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
    data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
    data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
    data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
    <span>Ignore whitespace changes - </span>
    <span>Everywhere:</span>
    <input id="ignorews-checkbox" type="checkbox" />
    <span>Within whitespace:</span>
    <input id="ignorewsamount-checkbox" type="checkbox" />
    <span>At end of lines:</span>
    <input id="ignorewseol-checkbox" type="checkbox" />
  </form>'