The bundle repo code was adding a field to the index tuple, which
confused the revlogng changes. This creates a new dict instead
to maintain the extra bundle info.
Incoming ssh needs to detect the end of the changegroup, otherwise it would
block trying to read from the ssh pipe. This is done by parsing the
changegroup chunks.
bundlerepo.getchunk() already is identical to
localrepo.addchangegroup.getchunk(), which is followed by getgroup which
looks much like what you can re-use in bundlerepository.__init__() and in
write_bundle(). bundlerevlog.__init__.genchunk() looks very similar, too,
as do some while loops in localrepo.py.
Applied patch from Benoit Boissinot to move duplicate/related code
to mercurial/changegroup.py and use this to fix incoming ssh.
- use HG10UN instead of HG11 for uncompressed bundles header
- check HG10BZ for compressed bundle
- better error handling for invalid header
some notes:
- people who created uncompressed bundle will no longer be
able to use them (it could be fixed with hand-editing)
- older hg cannot detect an uncompressed bundle
(bzip2 decompression will fail).
The idea is to create a repo consisting of a normal local repository
plus all the changesets contained in a bundle.
The bundle needs to be uncompressed. A futur version could implement
the seeking through a compressed bundle.