diff mercurial/bundlerepo.py @ 27753:d4071cc73f46

changegroup3: add empty chunk separating directories and files Remotefilelog overrides changegroup._addchangegroupfiles(), assuming it is about files, which seems like a natural assumption. However, in changegroup3, directory manifests are sent in the files section of the changegroup. These naturally make remotefilelog unhappy. The fact that the directories are not separated from the files (although they do come before the files) also makes server.validate harder to implement. Since we read one chunk at a time from the steam, once we have found a file (non-directory) entry in the stream, we would have to push the read data back into the stream, or otherwise refactor the code. It will be easier if we add an empty chunk after all directory manifests. This change adds that empty chunk, although we don't yet take advantage of it on the reading side. We will soon move the tree manifest stuff out of _addchangegroupfiles() and into _unpackmanifests().
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 11 Jan 2016 15:10:31 -0800
parents a40e2f7fe49d
children 6fe2da48a6dd
line wrap: on
line diff
--- a/mercurial/bundlerepo.py	Tue Jan 12 21:23:45 2016 -0800
+++ b/mercurial/bundlerepo.py	Mon Jan 11 15:10:31 2016 -0800
@@ -329,6 +329,10 @@
         # consume the header if it exists
         self.bundle.manifestheader()
         m = bundlemanifest(self.svfs, self.bundle, self.changelog.rev)
+        # XXX: hack to work with changegroup3, but we still don't handle
+        # tree manifests correctly
+        if self.bundle.version == "03":
+            self.bundle.filelogheader()
         self.filestart = self.bundle.tell()
         return m