diff --git a/treemanifest/__init__.py b/treemanifest/__init__.py --- a/treemanifest/__init__.py +++ b/treemanifest/__init__.py @@ -510,7 +510,7 @@ def write(self, tr, link, p1, p2, added, removed): return _writeclientmanifest( - self._treemanifest, tr, self._manifestlog, p1, p2) + self._treemanifest, tr, self._manifestlog, None, p1, p2) def serverreposetup(repo): extensions.wrapfunction(manifest.manifestrevlog, 'addgroup', @@ -599,7 +599,7 @@ return n -def _writeclientmanifest(newtree, tr, tmfl, p1node, p2node): +def _writeclientmanifest(newtree, tr, tmfl, node, p1node, p2node): if not util.safehasattr(tr, 'treedatapack'): opener = tmfl._opener ui = tmfl.ui @@ -630,13 +630,18 @@ tr.addabort('treepack', abort) tr.addpending('treepack', writepending) - dpack = tr.treedatapack - hpack = tr.treehistpack + # If the manifest was already committed as a flat manifest, use + # its node. + if node is not None: + dpack = InterceptedMutableDataPack(tr.treedatapack, node, p1node) + hpack = InterceptedMutableHistoryPack(tr.treehistpack, node, p1node) + else: + dpack = tr.treedatapack + hpack = tr.treehistpack p1tree = tmfl[p1node].read() newtreeiter = newtree.finalize(p1tree) - node = None for nname, nnode, ntext, np1text, np1, np2 in newtreeiter: # Not using deltas, since there aren't any other trees in # this pack it could delta against.