mercurial/changegroup.py
changeset 43059 4bbc9569e722
parent 42897 d7304434390f
child 43076 2372284d9457
--- a/mercurial/changegroup.py	Sat Oct 05 07:10:34 2019 -0700
+++ b/mercurial/changegroup.py	Mon Sep 30 14:21:05 2019 -0400
@@ -1281,9 +1281,19 @@
 
 def allsupportedversions(repo):
     versions = set(_packermap.keys())
-    if not (repo.ui.configbool('experimental', 'changegroup3') or
-            repo.ui.configbool('experimental', 'treemanifest') or
-            'treemanifest' in repo.requirements):
+    needv03 = False
+    if (repo.ui.configbool('experimental', 'changegroup3') or
+        repo.ui.configbool('experimental', 'treemanifest') or
+        'treemanifest' in repo.requirements):
+        # we keep version 03 because we need to to exchange treemanifest data
+        #
+        # we also keep vresion 01 and 02, because it is possible for repo to
+        # contains both normal and tree manifest at the same time. so using
+        # older version to pull data is viable
+        #
+        # (or even to push subset of history)
+        needv03 = True
+    if not needv03:
         versions.discard('03')
     return versions