diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -2180,6 +2180,18 @@ return m +def isstreamclonespec(bundlespec): + # Stream clone v1 + if (bundlespec.compression == 'UN' and bundlespec.version == 's1'): + return True + + # Stream clone v2 + if (bundlespec.compression == 'UN' and bundlespec.version == '02' and \ + bundlespec.contentopts.get('streamv2')): + return True + + return False + def filterclonebundleentries(repo, entries, streamclonerequested=False): """Remove incompatible clone bundle manifest entries. @@ -2199,9 +2211,7 @@ # If a stream clone was requested, filter out non-streamclone # entries. - comp = bundlespec.compression - version = bundlespec.version - if streamclonerequested and (comp != 'UN' or version != 's1'): + if streamclonerequested and not isstreamclonespec(bundlespec): repo.ui.debug('filtering %s because not a stream clone\n' % entry['URL']) continue diff --git a/tests/test-stream-bundle-v2.t b/tests/test-stream-bundle-v2.t --- a/tests/test-stream-bundle-v2.t +++ b/tests/test-stream-bundle-v2.t @@ -112,3 +112,55 @@ E: remote created -> g getting E 5 files updated, 0 files merged, 0 files removed, 0 files unresolved + + $ hg clone --stream http://localhost:$HGPORT streamv2-clone-explicit --debug + using http://localhost:$HGPORT/ + sending capabilities command + sending clonebundles command + applying clone bundle from http://localhost:$HGPORT1/bundle.hg + bundle2-input-bundle: with-transaction + bundle2-input-part: "stream2" (params: 3 mandatory) supported + applying stream bundle + 11 files to transfer, 1.65 KB of data + adding [s] data/A.i (66 bytes) + adding [s] data/B.i (66 bytes) + adding [s] data/C.i (66 bytes) + adding [s] data/D.i (66 bytes) + adding [s] data/E.i (66 bytes) + adding [s] 00manifest.i (584 bytes) + adding [s] 00changelog.i (595 bytes) + adding [s] phaseroots (43 bytes) + adding [c] branch2-served (94 bytes) + adding [c] rbc-names-v1 (7 bytes) + adding [c] rbc-revs-v1 (40 bytes) + transferred 1.65 KB in *.* seconds (*/sec) (glob) + bundle2-input-part: total payload size 1840 + bundle2-input-bundle: 0 parts total + finished applying clone bundle + query 1; heads + sending batch command + searching for changes + all remote heads known locally + no changes found + sending getbundle command + bundle2-input-bundle: with-transaction + bundle2-input-part: "listkeys" (params: 1 mandatory) supported + bundle2-input-part: "phase-heads" supported + bundle2-input-part: total payload size 24 + bundle2-input-bundle: 1 parts total + checking for updated bookmarks + updating to branch default + resolving manifests + branchmerge: False, force: False, partial: False + ancestor: 000000000000, local: 000000000000+, remote: 9bc730a19041 + A: remote created -> g + getting A + B: remote created -> g + getting B + C: remote created -> g + getting C + D: remote created -> g + getting D + E: remote created -> g + getting E + 5 files updated, 0 files merged, 0 files removed, 0 files unresolved