Optimize manifest.add
Testing shows that manifest.add is spending a significant percentage of
its time running calcoffsets and doing text = "".join(addlist). This
patch removes the need for both of these by storying the manifest in a
character array, and using a modified bisect search to find lines without
the help of a separate index of line offsets.
manifest.add was also reworked to push delta construction/combination into the
main loop.
Time to apply 2751 patches (without psyco, ext3 noatime,data=writeback):
Stock hg: 4m45s real 3m32s user 55s sys
patched: 2m48s real 1m53s user 43s sys
quilt: 2m30s real 45s user 50s sys
(quilt does much more io...)
#header#
<title>#repo|escape#: #file# diff</title>
</head>
<body>
<div class="buttons">
<a href="?cl=#rev#">changelog</a>
<a href="?tags=">tags</a>
<a href="?cs=#node|short#">changeset</a>
<a href="?f=#filenode|short#;file=#file#">file</a>
<a href="?fl=#filenode|short#;file=#file#">revisions</a>
<a href="?fa=#filenode|short#;file=#file#">annotate</a>
<a href="?fd=#node|short#;file=#file#;style=raw">raw</a>
</div>
<h2>#file#</h2>
<table id="filediffEntry">
<tr>
<th class="revision">revision #rev#:</th>
<td class="revision"><a href="?cs=#node|short#">#node|short#</a></td>
</tr>
#parent%filediffparent#
</table>
<div id="fileDiff">
#diff#
</div>
#footer#