Patchwork D1957: streamclonebundle: make sure we accept new stream clone bundle spec

login
register
mail settings
Submitter phabricator
Date March 30, 2018, 12:56 p.m.
Message ID <a54ae817501712754d6c9c1b076e86e3@localhost.localdomain>
Download mbox | patch
Permalink /patch/29958/
State Not Applicable
Headers show

Comments

phabricator - March 30, 2018, 12:56 p.m.
lothiraldan updated this revision to Diff 7378.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D1957?vs=5029&id=7378

REVISION DETAIL
  https://phab.mercurial-scm.org/D1957

AFFECTED FILES
  mercurial/exchange.py
  tests/test-stream-bundle-v2.t

CHANGE DETAILS




To: lothiraldan, #hg-reviewers
Cc: indygreg, mercurial-devel

Patch

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
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