Compressing revlog delta chunks reusing the zlib stream

Current revlog format compresses delta chunks separately from each other. The idea is to use the same compression object for a snapshot chunk and its delta chunks, simply sync-flushing the zlib stream for each chunk.

Test results

Mercurial crew (http://hg.intevation.org/mercurial/crew) - 10395 revisions

total size (kb)

relative size
(plain == 1)

00manifest.d size

00manifest.d relative size
(plain == 1)

plain

25708

1.00

8632k

1.00

zlibstream applied

18400

0.72

4104

0.48

plain,
shrinked manifest

21740

0.85

4668

0.54

zlibstream applied,
shrinked manifest

16856

0.66

2560

0.30

Patch queue

<!> The code currently doesn't properly sets and checks the requires file, and the changes on revlog chunks take effect immediately on any new revisions: take care when running this on existing repositories!

http://bitbucket.org/wbruna/hg-zlibstream/

Mailing list threads

http://www.selenic.com/pipermail/mercurial-devel/2010-February/018564.html