945 # cg3 adds support for exchanging revlog flags and treemanifests |
945 # cg3 adds support for exchanging revlog flags and treemanifests |
946 '03': (cg3packer, cg3unpacker), |
946 '03': (cg3packer, cg3unpacker), |
947 } |
947 } |
948 |
948 |
949 def supportedversions(repo): |
949 def supportedversions(repo): |
950 versions = _packermap.keys() |
950 versions = set(_packermap.keys()) |
951 cg3 = ('treemanifest' in repo.requirements or |
951 if ('treemanifest' in repo.requirements or |
952 repo.ui.configbool('experimental', 'changegroup3') or |
952 repo.ui.configbool('experimental', 'treemanifest')): |
953 repo.ui.configbool('experimental', 'treemanifest')) |
953 # Versions 01 and 02 support only flat manifests and it's just too |
954 if not cg3: |
954 # expensive to convert between the flat manifest and tree manifest on |
955 versions.remove('03') |
955 # the fly. Since tree manifests are hashed differently, all of history |
|
956 # would have to be converted. Instead, we simply don't even pretend to |
|
957 # support versions 01 and 02. |
|
958 versions.discard('01') |
|
959 versions.discard('02') |
|
960 elif not repo.ui.configbool('experimental', 'changegroup3'): |
|
961 versions.discard('03') |
956 return versions |
962 return versions |
957 |
963 |
958 def getbundler(version, repo, bundlecaps=None): |
964 def getbundler(version, repo, bundlecaps=None): |
959 assert version in supportedversions(repo) |
965 assert version in supportedversions(repo) |
960 return _packermap[version][0](repo, bundlecaps) |
966 return _packermap[version][0](repo, bundlecaps) |