exchange: set 'treemanifest' param on pushed changegroups too stable
authorMartin von Zweigbergk <martinvonz@google.com>
Fri, 22 Jan 2016 16:31:50 -0800
branchstable
changeset 27938 cabac7dfc621
parent 27937 3d3b4ac369f2
child 27939 7ed3a3c0cef1
exchange: set 'treemanifest' param on pushed changegroups too In 5c0fd878779c (treemanifests: set bundle2 part parameter indicating treemanifest, 2016-01-08), I didn't realize I had to set the parameter separately for getbundle and unbundle. Having the parameter there on push allows us to push to an empty repo and have the requirements updated correctly.
mercurial/exchange.py
tests/test-treemanifest.t
--- a/mercurial/exchange.py	Mon Jan 25 11:37:02 2016 -0800
+++ b/mercurial/exchange.py	Fri Jan 22 16:31:50 2016 -0800
@@ -717,6 +717,8 @@
     cgpart = bundler.newpart('changegroup', data=cg)
     if version is not None:
         cgpart.addparam('version', version)
+    if 'treemanifest' in pushop.repo.requirements:
+        cgpart.addparam('treemanifest', '1')
     def handlereply(op):
         """extract addchangegroup returns from server reply"""
         cgreplies = op.records.getreplies(cgpart.id)
--- a/tests/test-treemanifest.t	Mon Jan 25 11:37:02 2016 -0800
+++ b/tests/test-treemanifest.t	Fri Jan 22 16:31:50 2016 -0800
@@ -312,9 +312,28 @@
    1
   +foo
 
+Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
+
+  $ cd ..
+  $ hg init empty-repo
+  $ cat << EOF >> empty-repo/.hg/hgrc
+  > [experimental]
+  > changegroup3=yes
+  > EOF
+  $ grep treemanifest empty-repo/.hg/requires
+  [1]
+  $ hg push -R repo -r 0 empty-repo
+  pushing to empty-repo
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 2 changes to 2 files
+  $ grep treemanifest empty-repo/.hg/requires
+  treemanifest
+
 Create deeper repo with tree manifests.
 
-  $ cd ..
   $ hg --config experimental.treemanifest=True init deeprepo
   $ cd deeprepo