context: use changelogrevision
Upcoming patches will make the changelogrevision object perform
lazy parsing. Let's switch to it.
Because we're switching from a tuple to an object, everthing that
accesses the internal cached attribute needs to be updated to access
via attributes. A nice side-effect is this makes the code easier to
read!
Surprisingly, this appears to make revsets accessing this data
slightly faster (values are before series, p1, this patch):
author(mpm)
0.896565
0.929984
0.914234
desc(bug)
0.887169
0.935642
0.921073
date(2015)
0.878797
0.908094
0.891980
extra(rebase_source)
0.865446
0.922624
0.912514
author(mpm) or author(greg)
1.801832
1.902112
1.860402
author(mpm) or desc(bug)
1.812438
1.860977
1.844850
date(2015) or branch(default)
0.968276
1.005824
0.994673
author(mpm) or desc(bug) or date(2015) or extra(rebase_source)
3.656193
3.743381
3.721032
#require no-msys # MSYS will translate web paths as if they were file paths
This is a test of the push wire protocol over CGI-based hgweb.
initialize repository
$ hg init r
$ cd r
$ echo a > a
$ hg ci -A -m "0"
adding a
$ echo '[web]' > .hg/hgrc
$ echo 'allow_push = *' >> .hg/hgrc
$ echo 'push_ssl = false' >> .hg/hgrc
create hgweb invocation script
$ cat >hgweb.cgi <<HGWEB
> import cgitb
> cgitb.enable()
> from mercurial import demandimport; demandimport.enable()
> from mercurial.hgweb import hgweb
> from mercurial.hgweb import wsgicgi
> application = hgweb('.', 'test repository')
> wsgicgi.launch(application)
> HGWEB
$ chmod 755 hgweb.cgi
test preparation
$ . "$TESTDIR/cgienv"
$ REQUEST_METHOD="POST"; export REQUEST_METHOD
$ CONTENT_TYPE="application/octet-stream"; export CONTENT_TYPE
$ hg bundle --type v1 --all bundle.hg
1 changesets found
$ CONTENT_LENGTH=279; export CONTENT_LENGTH;
expect failure because heads doesn't match (formerly known as 'unsynced changes')
$ QUERY_STRING="cmd=unbundle&heads=0000000000000000000000000000000000000000"; export QUERY_STRING
$ python hgweb.cgi <bundle.hg >page1 2>&1
$ cat page1
Status: 200 Script output follows\r (esc)
Content-Type: application/mercurial-0.1\r (esc)
Content-Length: 64\r (esc)
\r (esc)
0
repository changed while preparing changes - please try again
successful force push
$ QUERY_STRING="cmd=unbundle&heads=666f726365"; export QUERY_STRING
$ python hgweb.cgi <bundle.hg >page2 2>&1
$ cat page2
Status: 200 Script output follows\r (esc)
Content-Type: application/mercurial-0.1\r (esc)
Content-Length: 102\r (esc)
\r (esc)
1
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
successful push, list of heads
$ QUERY_STRING="cmd=unbundle&heads=f7b1eb17ad24730a1651fccd46c43826d1bbc2ac"; export QUERY_STRING
$ python hgweb.cgi <bundle.hg >page3 2>&1
$ cat page3
Status: 200 Script output follows\r (esc)
Content-Type: application/mercurial-0.1\r (esc)
Content-Length: 102\r (esc)
\r (esc)
1
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
successful push, SHA1 hash of heads (unbundlehash capability)
$ QUERY_STRING="cmd=unbundle&heads=686173686564 5a785a5f9e0d433b88ed862b206b011b0c3a9d13"; export QUERY_STRING
$ python hgweb.cgi <bundle.hg >page4 2>&1
$ cat page4
Status: 200 Script output follows\r (esc)
Content-Type: application/mercurial-0.1\r (esc)
Content-Length: 102\r (esc)
\r (esc)
1
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
$ cd ..