Revset-based implementation of log command

Patrick Mézard patrick at mezard.eu
Thu Apr 12 14:52:09 CDT 2012


Hello,

I have an implementation of log command using the revset work done for graphlog, passing the test suite, here:

  http://mezard.eu/hg/hg-does-it-look-good-for-you/

Most of the patches have been submitted for review, the remaining ones update log() to use the revset functions and add a simple benchmarking script. It executes a sequence of log queries on a repository using different hg versions, and measure the time to first line and total time. See below for runs on Mercurial and Mozilla repositories.

We can see that:
1- Globally, the revset version is at least marginally faster than the current one.
2- The exception is when we add or-ed predicates like "--user foo --user bar". The changelog is being read multiple times instead of once.
3- The revset version computes all revisions before displaying anything which explains the poor "first line" timings.

[2] could be fixed by cheating an creating a revset matching multiple predicated at once, like the prep() closure in commands.log().
[3] could be fixed by turning revset.match() into a generator. It is not clear which revset functions can operate on a "subset" generator rather than a list but the simple ones like user() definitely can. Also, I have no idea how much overhead this will add compared to the list version.

Comments?


On Mercurial repository:

                          first line    total

* hg log -l 10
/Users/pmezard/bin/hg         0.145s   0.161s
/Users/pmezard/bin/hgdev      0.137s   0.146s

* hg log -u sstallion
/Users/pmezard/bin/hg         0.147s   1.399s
/Users/pmezard/bin/hgdev      1.038s   1.050s

* hg log -u sstallion -u qwerty360
/Users/pmezard/bin/hg         0.147s   1.452s
/Users/pmezard/bin/hgdev      1.940s   1.953s

* hg log -l 10 -u mezard
/Users/pmezard/bin/hg         0.145s   0.160s
/Users/pmezard/bin/hgdev      1.037s   1.050s

* hg log -b stable
/Users/pmezard/bin/hg         0.151s   1.446s
/Users/pmezard/bin/hgdev      1.030s   1.332s

* hg log --follow
/Users/pmezard/bin/hg         0.146s   2.606s
/Users/pmezard/bin/hgdev      0.185s   2.348s

* hg log --follow-first
/Users/pmezard/bin/hg         0.145s   1.636s
/Users/pmezard/bin/hgdev      0.162s   1.468s

* hg log --follow -r1000:5000
/Users/pmezard/bin/hg         0.139s   0.732s
/Users/pmezard/bin/hgdev      0.216s   0.731s

* hg log --follow -r5000:1000
/Users/pmezard/bin/hg         0.137s   0.737s
/Users/pmezard/bin/hgdev      0.151s   0.675s

* hg log --follow mercurial/commands.py -u mg -u pmezard
/Users/pmezard/bin/hg         0.178s   0.401s
/Users/pmezard/bin/hgdev      0.485s   0.532s

* hg log -b default --no-merge
/Users/pmezard/bin/hg         0.147s   2.197s
/Users/pmezard/bin/hgdev      0.969s   2.593s

* hg log -l 1000
/Users/pmezard/bin/hg         0.149s   0.318s
/Users/pmezard/bin/hgdev      0.140s   0.289s


On Mozilla repository:

* hg log -u rnewman
/Users/pmezard/bin/hg         0.269s   7.392s
/Users/pmezard/bin/hgdev      5.538s   5.634s

* hg log -u rnewman -u girard
/Users/pmezard/bin/hg         0.269s   7.702s
/Users/pmezard/bin/hgdev     10.938s  11.076s

* hg log -l 10
/Users/pmezard/bin/hg         0.272s   0.314s
/Users/pmezard/bin/hgdev      0.200s   0.211s

* hg log -l 10 -u rnewman
/Users/pmezard/bin/hg         0.272s   0.391s
/Users/pmezard/bin/hgdev      5.568s   5.606s

* hg log -b GECKO193a2_20100228_RELBRANCH
/Users/pmezard/bin/hg         2.375s   6.711s
/Users/pmezard/bin/hgdev      5.523s   5.563s

* hg log xulrunner
/Users/pmezard/bin/hg         5.899s   6.035s
/Users/pmezard/bin/hgdev      5.774s   5.878s

* hg log --follow xulrunner/build.mk
/Users/pmezard/bin/hg         0.452s   0.550s
/Users/pmezard/bin/hgdev      0.455s   0.577s

* hg log -u girard tools
/Users/pmezard/bin/hg         5.896s   6.059s
/Users/pmezard/bin/hgdev      5.870s   5.911s

* hg log -b COMM2000_20110314_RELBRANCH --copies
/Users/pmezard/bin/hg         2.259s   6.643s
/Users/pmezard/bin/hgdev      5.483s   5.520s

* hg log --follow
/Users/pmezard/bin/hg         0.276s  13.897s
/Users/pmezard/bin/hgdev      0.491s  12.466s

--
Patrick Mézard


More information about the Mercurial-devel mailing list