view mercurial/templates/spartan/fileannotate.tmpl @ 34087:5361771f9714

wrapfunction: use functools.partial if possible Every `extensions.bind` call inserts a frame in traceback: ... in closure return func(*(args + a), **kw) which makes traceback noisy. The Python stdlib has a `functools.partial` which is backed by C code and does not pollute traceback. However it does not support instancemethod and sets `args` attribute which could be problematic for alias handling. This patch makes `wrapfunction` use `functools.partial` if we are wrapping a function directly exported by a module (so it's impossible to be a class or instance method), and special handles `wrapfunction` results so alias handling code could handle `args` just fine. As an example, `hg rebase -s . -d . --traceback` got 6 lines removed in my setup: File "hg/mercurial/dispatch.py", line 898, in _dispatch cmdpats, cmdoptions) -File "hg/mercurial/extensions.py", line 333, in closure - return func(*(args + a), **kw) File "hg/hgext/journal.py", line 84, in runcommand return orig(lui, repo, cmd, fullargs, *args) -File "hg/mercurial/extensions.py", line 333, in closure - return func(*(args + a), **kw) File "fb-hgext/hgext3rd/fbamend/hiddenoverride.py", line 119, in runcommand result = orig(lui, repo, cmd, fullargs, *args) File "hg/mercurial/dispatch.py", line 660, in runcommand ret = _runcommand(ui, options, cmd, d) -File "hg/mercurial/extensions.py", line 333, in closure - return func(*(args + a), **kw) File "hg/hgext/pager.py", line 69, in pagecmd return orig(ui, options, cmd, cmdfunc) .... Differential Revision: https://phab.mercurial-scm.org/D632
author Jun Wu <quark@fb.com>
date Tue, 05 Sep 2017 13:37:36 -0700
parents 011122b3b1c4
children
line wrap: on
line source

{header}
<title>{repo|escape}: {file|escape} annotate</title>
</head>
<body>

<div class="buttons">
<a href="{url|urlescape}log/{symrev}{sessionvars%urlparameter}">changelog</a>
<a href="{url|urlescape}shortlog/{symrev}{sessionvars%urlparameter}">shortlog</a>
<a href="{url|urlescape}graph/{symrev}{sessionvars%urlparameter}">graph</a>
<a href="{url|urlescape}tags{sessionvars%urlparameter}">tags</a>
<a href="{url|urlescape}branches{sessionvars%urlparameter}">branches</a>
<a href="{url|urlescape}rev/{symrev}{sessionvars%urlparameter}">changeset</a>
<a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
<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}raw-file/{symrev}/{file|urlescape}">raw</a>
<a href="{url|urlescape}help{sessionvars%urlparameter}">help</a>
</div>

<h2><a href="/">Mercurial</a> {pathdef%breadcrumb} / annotate {file|escape}</h2>

<table>
<tr>
 <td class="metatag">changeset {rev}:</td>
 <td><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
</tr>
{parent%fileannotateparent}
{child%fileannotatechild}
<tr>
 <td class="metatag">author:</td>
 <td>{author|obfuscate}</td>
</tr>
<tr>
 <td class="metatag">date:</td>
 <td class="date age">{date|rfc822date}</td>
</tr>
<tr>
 <td class="metatag">permissions:</td>
 <td>{permissions|permissions}</td>
</tr>
<tr>
  <td class="metatag">description:</td>
  <td>{desc|strip|escape|websub|addbreaks|nonempty}</td>
</tr>
</table>

<table cellspacing="0" cellpadding="0">
{annotate%annotateline}
</table>

{footer}