changeset 40175:6c42409691ec

wireprotov2: stop sending phase updates for base revisions This feature is broken and doesn't work properly in all scenarios. e.g. if we have the following DAGs: client server D draft C draft C draft B draft B public A public A public The current code would only send the phase data for C. The client wouldn't see that B moved from draft to public. This feature will be restored in a future commit. For now, it is making refactoring of how revisions are specified in the wire protocol a bit difficult... Differential Revision: https://phab.mercurial-scm.org/D4978
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 08 Oct 2018 17:54:14 -0700
parents 64360202d5b2
children 41263df08109
files mercurial/wireprotov2server.py tests/test-wireproto-command-changesetdata.t tests/test-wireproto-exchangev2.t
diffstat 3 files changed, 12 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/wireprotov2server.py	Thu Oct 11 09:47:52 2018 +0200
+++ b/mercurial/wireprotov2server.py	Mon Oct 08 17:54:14 2018 -0700
@@ -875,15 +875,11 @@
     # The phases of nodes already transferred to the client may have changed
     # since the client last requested data. We send phase-only records
     # for these revisions, if requested.
-    if b'phase' in fields and noderange is not None:
-        # TODO skip nodes whose phase will be reflected by a node in the
-        # outgoing set. This is purely an optimization to reduce data
-        # size.
-        for node in noderange[0]:
-            yield {
-                b'node': node,
-                b'phase': b'public' if publishing else repo[node].phasestr()
-            }
+    # TODO actually do this. We'll probably want to emit phase heads
+    # in the ancestry set of the outgoing revisions. This will ensure
+    # that phase updates within that set are seen.
+    if b'phase' in fields:
+        pass
 
     nodebookmarks = {}
     for mark, node in repo._bookmarks.items():
--- a/tests/test-wireproto-command-changesetdata.t	Thu Oct 11 09:47:52 2018 +0200
+++ b/tests/test-wireproto-command-changesetdata.t	Mon Oct 08 17:54:14 2018 -0700
@@ -426,6 +426,7 @@
   ]
 
 Base nodes have just their metadata (e.g. phase) transferred
+TODO this doesn't work
 
   $ sendhttpv2peer << EOF
   > command changesetdata
@@ -439,10 +440,6 @@
       b'totalitems': 3
     },
     {
-      b'node': b'3\x90\xef\x85\x00s\xfb\xc2\xf0\xdf\xff"D4,\x8e\x92)\x01:',
-      b'phase': b'public'
-    },
-    {
       b'fieldsfollowing': [
         [
           b'revision',
--- a/tests/test-wireproto-exchangev2.t	Thu Oct 11 09:47:52 2018 +0200
+++ b/tests/test-wireproto-exchangev2.t	Mon Oct 08 17:54:14 2018 -0700
@@ -324,7 +324,7 @@
   }
   received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
   received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
-  received frame(size=613; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+  received frame(size=573; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
   add changeset cd2534766bec
   add changeset e96ae20f4188
@@ -407,6 +407,7 @@
        4       4 379cb0c2e664 045c7f3927da 000000000000
 
 Phase-only update works
+TODO this doesn't work
 
   $ hg -R ../server-simple phase --public -r caa2a465451dd
   $ hg --debug pull
@@ -452,17 +453,16 @@
   }
   received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
   received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
-  received frame(size=92; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+  received frame(size=13; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
   checking for updated bookmarks
-  2 local changesets published
   (run 'hg update' to get a working copy)
   (sent 3 HTTP requests and * bytes; received * bytes in responses) (glob)
 
   $ hg log -G -T '{rev} {node} {phase}\n'
-  o  4 caa2a465451dd1facda0f5b12312c355584188a1 public
+  o  4 caa2a465451dd1facda0f5b12312c355584188a1 draft
   |
-  o  3 e96ae20f4188487b9ae4ef3941c27c81143146e5 public
+  o  3 e96ae20f4188487b9ae4ef3941c27c81143146e5 draft
   |
   | o  2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
   | |
@@ -632,7 +632,7 @@
   }
   received frame(size=9; request=1; stream=2; streamflags=stream-begin; type=stream-settings; flags=eos)
   received frame(size=11; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
-  received frame(size=144; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
+  received frame(size=65; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
   checking for updated bookmarks
   updating bookmark book-1