Mercurial > hg
view tests/test-hgweb-raw.t @ 44528:c8891bca40fb
rust-status: add bare `hg status` support in hg-core
A lot of performance remains to be gained, most notably by doing more things
in parallel, but also by caching, not falling back to Python but switching
to another regex engine, etc..
I have measured on multiple repositories that this change, when in combination
with the next two patches, improve bare `hg status` performance, and has no
observable impact when falling back (because it does so early).
On the Netbeans repository:
C: 840ms
Rust+C: 556ms
Mozilla Central with the one pattern that causes a fallback removed:
C: 2.315s
Rust+C: 1.700 s
Differential Revision: https://phab.mercurial-scm.org/D7929
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Fri, 17 Jan 2020 15:43:46 +0100 |
parents | bd1ec1e36bf0 |
children |
line wrap: on
line source
#require serve Test raw style of hgweb $ hg init test $ cd test $ mkdir sub $ cat >'sub/some text%.txt' <<ENDSOME > This is just some random text > that will go inside the file and take a few lines. > It is very boring to read, but computers don't > care about things like that. > ENDSOME $ hg add 'sub/some text%.txt' $ hg commit -d "1 0" -m "Just some text" $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid $ cat hg.pid >> $DAEMON_PIDS $ (get-with-headers.py localhost:$HGPORT 'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length content-disposition) >getoutput.txt $ killdaemons.py hg.pid $ cat getoutput.txt 200 Script output follows content-type: application/binary content-length: 157 content-disposition: inline; filename="some text%.txt" This is just some random text that will go inside the file and take a few lines. It is very boring to read, but computers don't care about things like that. $ cat access.log error.log $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt HTTP/1.1" 200 - (glob) $ rm access.log error.log $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \ > --config web.guessmime=True $ cat hg.pid >> $DAEMON_PIDS $ (get-with-headers.py localhost:$HGPORT 'raw-file/bf0ff59095c9/sub/some%20text%25.txt' content-type content-length content-disposition) >getoutput.txt $ killdaemons.py hg.pid $ cat getoutput.txt 200 Script output follows content-type: text/plain; charset="ascii" content-length: 157 content-disposition: inline; filename="some text%.txt" This is just some random text that will go inside the file and take a few lines. It is very boring to read, but computers don't care about things like that. $ cat access.log error.log $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt HTTP/1.1" 200 - (glob) >>> with open('sub/binary.bin', 'wb') as fp: ... fp.write(b'Binary\0file') and None $ hg ci -Aqm "add binary file" sub/ $ hg serve -p $HGPORT -A access.log -E error.log -d --pid-file=hg.pid \ > --config web.guessmime=True $ cat hg.pid >> $DAEMON_PIDS $ (get-with-headers.py localhost:$HGPORT 'annotate/tip/sub/binary.bin' content-type content-length content-disposition) >getoutput.txt $ cat getoutput.txt 200 Script output follows content-type: text/html; charset=ascii <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"> <head> <link rel="icon" href="/static/hgicon.png" type="image/png" /> <meta name="robots" content="index, nofollow" /> <link rel="stylesheet" href="/static/style-paper.css" type="text/css" /> <script type="text/javascript" src="/static/mercurial.js"></script> <title>$TESTTMP/test: sub/binary.bin annotate</title> (glob) </head> <body> <div class="container"> <div class="menu"> <div class="logo"> <a href="https://mercurial-scm.org/"> <img src="/static/hglogo.png" alt="mercurial" /></a> </div> <ul> <li><a href="/shortlog/tip">log</a></li> <li><a href="/graph/tip">graph</a></li> <li><a href="/tags">tags</a></li> <li><a href="/bookmarks">bookmarks</a></li> <li><a href="/branches">branches</a></li> </ul> <ul> <li><a href="/rev/tip">changeset</a></li> <li><a href="/file/tip/sub/">browse</a></li> </ul> <ul> <li><a href="/file/tip/sub/binary.bin">file</a></li> <li><a href="/file/tip/sub/binary.bin">latest</a></li> <li><a href="/diff/tip/sub/binary.bin">diff</a></li> <li><a href="/comparison/tip/sub/binary.bin">comparison</a></li> <li class="active">annotate</li> <li><a href="/log/tip/sub/binary.bin">file log</a></li> <li><a href="/raw-file/tip/sub/binary.bin">raw</a></li> </ul> <ul> <li><a href="/help">help</a></li> </ul> </div> <div class="main"> <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2> <h3> annotate sub/binary.bin @ 1:<a href="/rev/7dc31308464a">7dc31308464a</a> <span class="phase">draft</span> <span class="branchhead">default</span> <span class="tag">tip</span> </h3> <form class="search" action="/log"> <p><input name="rev" id="search1" type="text" size="30" value="" /></p> <div id="hint">Find changesets by keywords (author, files, the commit message), revision number or hash, or <a href="/help/revsets">revset expression</a>.</div> </form> <div class="description">add binary file</div> <table id="changesetEntry"> <tr> <th class="author">author</th> <td class="author">test</td> </tr> <tr> <th class="date">date</th> <td class="date age">Thu, 01 Jan 1970 00:00:00 +0000</td> </tr> <tr> <th class="author">parents</th> <td class="author"></td> </tr> <tr> <th class="author">children</th> <td class="author"></td> </tr> </table> <form id="diffopts-form" data-ignorews="0" data-ignorewsamount="0" data-ignorewseol="0" data-ignoreblanklines="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> <script type="text/javascript"> renderDiffOptsForm(); </script> <div class="overflow"> <table class="bigtable"> <thead> <tr> <th class="annotate">rev</th> <th class="line"> line source</th> </tr> </thead> <tbody class="stripes2 sourcelines" data-logurl="/log/tip/sub/binary.bin" data-selectabletag="TR" data-ishead="1"> <tr id="l1" class="thisrev"> <td class="annotate parity0"> <a href="/annotate/7dc31308464a/sub/binary.bin#l1"> 1 </a> <div class="annotate-info"> <div> <a href="/annotate/7dc31308464a/sub/binary.bin#l1"> 7dc31308464a</a> add binary file </div> <div><em>test</em></div> <div>parents: </div> <a href="/diff/7dc31308464a/sub/binary.bin">diff</a> <a href="/rev/7dc31308464a">changeset</a> </div> </td> <td class="source followlines-btn-parent"><a href="#l1"> 1</a> (binary:application/octet-stream)</td> </tr> </tbody> </table> </div> </div> </div> <script type="text/javascript" src="/static/followlines.js"></script> </body> </html> $ (get-with-headers.py localhost:$HGPORT 'comparison/tip/sub/binary.bin' content-type content-length content-disposition) >getoutput.txt $ (get-with-headers.py localhost:$HGPORT 'file/tip/sub/binary.bin' content-type content-length content-disposition) >getoutput.txt $ (get-with-headers.py localhost:$HGPORT 'static/hgicon.png' content-type content-length content-disposition) >getoutput.txt $ killdaemons.py hg.pid $ cat access.log error.log $LOCALIP - - [$LOGDATE$] "GET /raw-file/bf0ff59095c9/sub/some%20text%25.txt HTTP/1.1" 200 - (glob) $LOCALIP - - [$LOGDATE$] "GET /annotate/tip/sub/binary.bin HTTP/1.1" 200 - (glob) $LOCALIP - - [$LOGDATE$] "GET /comparison/tip/sub/binary.bin HTTP/1.1" 200 - (glob) $LOCALIP - - [$LOGDATE$] "GET /file/tip/sub/binary.bin HTTP/1.1" 200 - (glob) $LOCALIP - - [$LOGDATE$] "GET /static/hgicon.png HTTP/1.1" 200 - (glob) $ cd ..