D1329: bundle: allow bundlerepo to support alternative manifest implementations
durham (Durham Goode)
phabricator at mercurial-scm.org
Tue Nov 7 18:19:10 UTC 2017
durham created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
With our treemanifest logic, the manifests are no longer transported as part of
the changegroup and are no longer stored in a revlog. This means the
self.manifestlog line in bundlerepo.filestart no longer calls
_constructmanifest, and therefore does not consume the manifest portion of the
changegroup, which means filestart is not populated and we result in an infinite
loop.
The fix is to make filestart aware that self.manifestlog might not consume the
changegroup part, and consume it manually if necessary.
There's currently no way to test this in core, but our treemanifest extension
has tests to cover this.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D1329
AFFECTED FILES
mercurial/bundlerepo.py
CHANGE DETAILS
diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py
+++ b/mercurial/bundlerepo.py
@@ -352,14 +352,31 @@
self.filestart = self.bundle.tell()
return m
+ def _consumemanifest(self):
+ """Consumes the manifest portion of the bundle, setting filestart so the
+ file portion can be read."""
+ self.bundle.seek(self.manstart)
+ self.bundle.manifestheader()
+ for delta in self.bundle.deltaiter():
+ pass
+ self.filestart = self.bundle.tell()
+
@localrepo.unfilteredpropertycache
def manstart(self):
self.changelog
return self.manstart
@localrepo.unfilteredpropertycache
def filestart(self):
self.manifestlog
+
+ # If filestart was not set by self.manifestlog, that means the
+ # manifestlog implementation did not consume the manifests from the
+ # changegroup (ex: it might be consuming trees from a separate bundle2
+ # part instead). So we need to manually consume it.
+ if 'filestart' not in self.__dict__:
+ self._consumemanifest()
+
return self.filestart
def url(self):
To: durham, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list