mercurial/bundle2.py
changeset 27734 5c0fd878779c
parent 26829 58f1645f72c3
child 27751 a40e2f7fe49d
--- a/mercurial/bundle2.py	Wed Jan 06 20:05:18 2016 +0000
+++ b/mercurial/bundle2.py	Fri Jan 08 21:13:06 2016 -0800
@@ -1262,7 +1262,7 @@
     obscaps = caps.get('obsmarkers', ())
     return [int(c[1:]) for c in obscaps if c.startswith('V')]
 
-@parthandler('changegroup', ('version', 'nbchanges'))
+@parthandler('changegroup', ('version', 'nbchanges', 'treemanifest'))
 def handlechangegroup(op, inpart):
     """apply a changegroup part on the repo
 
@@ -1284,6 +1284,15 @@
     nbchangesets = None
     if 'nbchanges' in inpart.params:
         nbchangesets = int(inpart.params.get('nbchanges'))
+    if ('treemanifest' in inpart.params and
+        'treemanifest' not in op.repo.requirements):
+        if len(op.repo.changelog) != 0:
+            raise error.Abort(_(
+                "bundle contains tree manifests, but local repo is "
+                "non-empty and does not use tree manifests"))
+        op.repo.requirements.add('treemanifest')
+        op.repo._applyopenerreqs()
+        op.repo._writerequirements()
     ret = cg.apply(op.repo, 'bundle2', 'bundle2', expectedtotal=nbchangesets)
     op.records.add('changegroup', {'return': ret})
     if op.reply is not None: