Mercurial > hg
view contrib/dumprevlog @ 26845:7a77ee434179
help: replace some str.split() calls by str.partition() or str.rpartition()
Since Python 2.5 str has new methods: partition and rpartition. They are more
specialized than the usual split and rsplit, and they sometimes convey the
intent of code better and also are a bit faster (faster than split/rsplit with
maxsplit specified). Let's use them in appropriate places for a small speedup.
Example performance (partition):
$ python -m timeit 'assert "apple|orange|banana".split("|")[0] == "apple"'
1000000 loops, best of 3: 0.376 usec per loop
$ python -m timeit 'assert "apple|orange|banana".split("|", 1)[0] == "apple"'
1000000 loops, best of 3: 0.327 usec per loop
$ python -m timeit 'assert "apple|orange|banana".partition("|")[0] == "apple"'
1000000 loops, best of 3: 0.214 usec per loop
Example performance (rpartition):
$ python -m timeit 'assert "apple|orange|banana".rsplit("|")[-1] == "banana"'
1000000 loops, best of 3: 0.372 usec per loop
$ python -m timeit 'assert "apple|orange|banana".rsplit("|", 1)[-1] == "banana"'
1000000 loops, best of 3: 0.332 usec per loop
$ python -m timeit 'assert "apple|orange|banana".rpartition("|")[-1] == "banana"'
1000000 loops, best of 3: 0.219 usec per loop
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Mon, 02 Nov 2015 23:37:14 +0800 |
parents | 659f34b833b9 |
children | a212ca70205c |
line wrap: on
line source
#!/usr/bin/env python # Dump revlogs as raw data stream # $ find .hg/store/ -name "*.i" | xargs dumprevlog > repo.dump import sys from mercurial import revlog, node, util for fp in (sys.stdin, sys.stdout, sys.stderr): util.setbinary(fp) for f in sys.argv[1:]: binopen = lambda fn: open(fn, 'rb') r = revlog.revlog(binopen, f) print "file:", f for i in r: n = r.node(i) p = r.parents(n) d = r.revision(n) print "node:", node.hex(n) print "linkrev:", r.linkrev(i) print "parents:", node.hex(p[0]), node.hex(p[1]) print "length:", len(d) print "-start-" print d print "-end-"