##// END OF EJS Templates
parsers: inline fields of dirstate values in C version...
parsers: inline fields of dirstate values in C version Previously, while unpacking the dirstate we'd create 3-4 new CPython objects for most dirstate values: - the state is a single character string, which is pooled by CPython - the mode is a new object if it isn't 0 due to being in the lookup set - the size is a new object if it is greater than 255 - the mtime is a new object if it isn't -1 due to being in the lookup set - the tuple to contain them all In some cases such as regular hg status, we actually look at all the objects. In other cases like hg add, hg status for a subdirectory, or hg status with the third-party hgwatchman enabled, we look at almost none of the objects. This patch eliminates most object creation in these cases by defining a custom C struct that is exposed to Python with an interface similar to a tuple. Only when tuple elements are actually requested are the respective objects created. The gains, where they're expected, are significant. The following tests are run against a working copy with over 270,000 files. parse_dirstate becomes significantly faster: $ hg perfdirstate before: wall 0.186437 comb 0.180000 user 0.160000 sys 0.020000 (best of 35) after: wall 0.093158 comb 0.100000 user 0.090000 sys 0.010000 (best of 95) and as a result, several commands benefit: $ time hg status # with hgwatchman enabled before: 0.42s user 0.14s system 99% cpu 0.563 total after: 0.34s user 0.12s system 99% cpu 0.471 total $ time hg add new-file before: 0.85s user 0.18s system 99% cpu 1.033 total after: 0.76s user 0.17s system 99% cpu 0.931 total There is a slight regression in regular status performance, but this is fixed in an upcoming patch.

File last commit:

r18526:9409aeaa stable
r21809:e250b830 default
Show More
index.tmpl
39 lines | 1.1 KiB | application/x-cheetah | CheetahLexer
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 {header}
<title>{repo|escape}: Mercurial repositories index</title>
</head>
<body>
<div id="container">
<div class="page-header">
Angel Ezquerra <angel.ezquerra at gmail.com>
hgweb: add a "URL breadcrumb" to the index and repository pages...
r18258 <h1 class="breadcrumb"><a href="/">Mercurial</a> {pathdef%breadcrumb}</h1>
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 <ul class="page-nav">
</ul>
</div>
Thomas Arendsen Hein
trailing spaces (and one stray tab)
r10575
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 <table cellspacing="0">
<tr>
<td><a href="?sort={sort_name}">Name</a></td>
<td><a href="?sort={sort_description}">Description</a></td>
<td><a href="?sort={sort_contact}">Contact</a></td>
Dan Villiom Podlaski Christiansen
templates: rename `Last change' column in hgwebdir repository list....
r10301 <td><a href="?sort={sort_lastchange}">Last modified</a></td>
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 <td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
{entries%indexentry}
</table>
<div class="page-footer">
{motd}
</div>
<div id="powered-by">
Thomas Arendsen Hein
hgweb: urlescape all urls, HTML escape repo/tag/branch/... names...
r18526 <p><a href="{logourl}" title="Mercurial"><img src="{staticurl|urlescape}{logoimg}" width=75 height=90 border=0 alt="mercurial"></a></p>
Dan Villiom Podlaski Christiansen
setup: install translation files as package data...
r9999 </div>
<div id="corner-top-left"></div>
<div id="corner-top-right"></div>
<div id="corner-bottom-left"></div>
<div id="corner-bottom-right"></div>
</div>
</body>
</html>