##// END OF EJS Templates
exchangev2: fetch and apply phases data...
Gregory Szorc -
r39669:ff2de4f2 default
parent child Browse files
Show More
@@ -16,6 +16,7 b' from .node import ('
16 )
16 )
17 from . import (
17 from . import (
18 mdiff,
18 mdiff,
19 phases,
19 pycompat,
20 pycompat,
20 setdiscovery,
21 setdiscovery,
21 )
22 )
@@ -30,8 +31,25 b' def pull(pullop):'
30 common, fetch, remoteheads = _pullchangesetdiscovery(
31 common, fetch, remoteheads = _pullchangesetdiscovery(
31 repo, remote, pullop.heads, abortwhenunrelated=pullop.force)
32 repo, remote, pullop.heads, abortwhenunrelated=pullop.force)
32
33
34 # And fetch the data.
33 pullheads = pullop.heads or remoteheads
35 pullheads = pullop.heads or remoteheads
34 _fetchchangesets(repo, tr, remote, common, fetch, pullheads)
36 csetres = _fetchchangesets(repo, tr, remote, common, fetch, pullheads)
37
38 # New revisions are written to the changelog. But all other updates
39 # are deferred. Do those now.
40
41 # Ensure all new changesets are draft by default. If the repo is
42 # publishing, the phase will be adjusted by the loop below.
43 if csetres['added']:
44 phases.registernew(repo, tr, phases.draft, csetres['added'])
45
46 # And adjust the phase of all changesets accordingly.
47 for phase in phases.phasenames:
48 if phase == b'secret' or not csetres['nodesbyphase'][phase]:
49 continue
50
51 phases.advanceboundary(repo, tr, phases.phasenames.index(phase),
52 csetres['nodesbyphase'][phase])
35
53
36 def _pullchangesetdiscovery(repo, remote, heads, abortwhenunrelated=True):
54 def _pullchangesetdiscovery(repo, remote, heads, abortwhenunrelated=True):
37 """Determine which changesets need to be pulled."""
55 """Determine which changesets need to be pulled."""
@@ -65,9 +83,6 b' def _pullchangesetdiscovery(repo, remote'
65 return common, fetch, remoteheads
83 return common, fetch, remoteheads
66
84
67 def _fetchchangesets(repo, tr, remote, common, fetch, remoteheads):
85 def _fetchchangesets(repo, tr, remote, common, fetch, remoteheads):
68 if not fetch:
69 return
70
71 # TODO consider adding a step here where we obtain the DAG shape first
86 # TODO consider adding a step here where we obtain the DAG shape first
72 # (or ask the server to slice changesets into chunks for us) so that
87 # (or ask the server to slice changesets into chunks for us) so that
73 # we can perform multiple fetches in batches. This will facilitate
88 # we can perform multiple fetches in batches. This will facilitate
@@ -76,7 +91,7 b' def _fetchchangesets(repo, tr, remote, c'
76 with remote.commandexecutor() as e:
91 with remote.commandexecutor() as e:
77 objs = e.callcommand(b'changesetdata', {
92 objs = e.callcommand(b'changesetdata', {
78 b'noderange': [sorted(common), sorted(remoteheads)],
93 b'noderange': [sorted(common), sorted(remoteheads)],
79 b'fields': {b'parents', b'revision'},
94 b'fields': {b'parents', b'phase', b'revision'},
80 }).result()
95 }).result()
81
96
82 # The context manager waits on all response data when exiting. So
97 # The context manager waits on all response data when exiting. So
@@ -108,15 +123,28 b' def _processchangesetdata(repo, tr, objs'
108 def onchangeset(cl, node):
123 def onchangeset(cl, node):
109 progress.increment()
124 progress.increment()
110
125
126 nodesbyphase = {phase: set() for phase in phases.phasenames}
127
111 # addgroup() expects a 7-tuple describing revisions. This normalizes
128 # addgroup() expects a 7-tuple describing revisions. This normalizes
112 # the wire data to that format.
129 # the wire data to that format.
130 #
131 # This loop also aggregates non-revision metadata, such as phase
132 # data.
113 def iterrevisions():
133 def iterrevisions():
114 for cset in objs:
134 for cset in objs:
115 assert b'revisionsize' in cset
135 node = cset[b'node']
136
137 if b'phase' in cset:
138 nodesbyphase[cset[b'phase']].add(node)
139
140 # Some entries might only be metadata only updates.
141 if b'revisionsize' not in cset:
142 continue
143
116 data = next(objs)
144 data = next(objs)
117
145
118 yield (
146 yield (
119 cset[b'node'],
147 node,
120 cset[b'parents'][0],
148 cset[b'parents'][0],
121 cset[b'parents'][1],
149 cset[b'parents'][1],
122 # Linknode is always itself for changesets.
150 # Linknode is always itself for changesets.
@@ -135,4 +163,5 b' def _processchangesetdata(repo, tr, objs'
135
163
136 return {
164 return {
137 'added': added,
165 'added': added,
166 'nodesbyphase': nodesbyphase,
138 }
167 }
@@ -55,6 +55,7 b' Test basic clone'
55 sending command changesetdata: {
55 sending command changesetdata: {
56 'fields': set([
56 'fields': set([
57 'parents',
57 'parents',
58 'phase',
58 'revision'
59 'revision'
59 ]),
60 ]),
60 'noderange': [
61 'noderange': [
@@ -66,7 +67,7 b' Test basic clone'
66 ]
67 ]
67 }
68 }
68 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
69 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
69 received frame(size=809; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
70 received frame(size=871; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
70 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
71 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
71 add changeset 3390ef850073
72 add changeset 3390ef850073
72 add changeset 4432d83626e8
73 add changeset 4432d83626e8
@@ -74,7 +75,7 b' Test basic clone'
74 add changeset e96ae20f4188
75 add changeset e96ae20f4188
75 add changeset caa2a465451d
76 add changeset caa2a465451d
76 updating the branch cache
77 updating the branch cache
77 new changesets 3390ef850073:caa2a465451d
78 new changesets 3390ef850073:caa2a465451d (3 drafts)
78
79
79 All changesets should have been transferred
80 All changesets should have been transferred
80
81
@@ -87,11 +88,11 b' All changesets should have been transfer'
87 4 4 caa2a465451d e96ae20f4188 000000000000
88 4 4 caa2a465451d e96ae20f4188 000000000000
88
89
89 $ hg -R client-simple log -G -T '{rev} {node} {phase}\n'
90 $ hg -R client-simple log -G -T '{rev} {node} {phase}\n'
90 o 4 caa2a465451dd1facda0f5b12312c355584188a1 public
91 o 4 caa2a465451dd1facda0f5b12312c355584188a1 draft
91 |
92 |
92 o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 public
93 o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 draft
93 |
94 |
94 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f public
95 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
95 | |
96 | |
96 | o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
97 | o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
97 |/
98 |/
@@ -126,6 +127,7 b' Cloning only a specific revision works'
126 sending command changesetdata: {
127 sending command changesetdata: {
127 'fields': set([
128 'fields': set([
128 'parents',
129 'parents',
130 'phase',
129 'revision'
131 'revision'
130 ]),
132 ]),
131 'noderange': [
133 'noderange': [
@@ -136,7 +138,7 b' Cloning only a specific revision works'
136 ]
138 ]
137 }
139 }
138 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
140 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
139 received frame(size=327; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
141 received frame(size=353; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
140 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
142 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
141 add changeset 3390ef850073
143 add changeset 3390ef850073
142 add changeset 4432d83626e8
144 add changeset 4432d83626e8
@@ -177,6 +179,7 b' Incremental pull works'
177 sending command changesetdata: {
179 sending command changesetdata: {
178 'fields': set([
180 'fields': set([
179 'parents',
181 'parents',
182 'phase',
180 'revision'
183 'revision'
181 ]),
184 ]),
182 'noderange': [
185 'noderange': [
@@ -190,13 +193,73 b' Incremental pull works'
190 ]
193 ]
191 }
194 }
192 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
195 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
193 received frame(size=495; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
196 received frame(size=571; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
194 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
197 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
195 add changeset cd2534766bec
198 add changeset cd2534766bec
196 add changeset e96ae20f4188
199 add changeset e96ae20f4188
197 add changeset caa2a465451d
200 add changeset caa2a465451d
198 updating the branch cache
201 updating the branch cache
199 new changesets cd2534766bec:caa2a465451d
202 new changesets cd2534766bec:caa2a465451d (3 drafts)
203 (run 'hg update' to get a working copy)
204
205 $ hg log -G -T '{rev} {node} {phase}\n'
206 o 4 caa2a465451dd1facda0f5b12312c355584188a1 draft
207 |
208 o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 draft
209 |
210 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
211 | |
212 | o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
213 |/
214 o 0 3390ef850073fbc2f0dfff2244342c8e9229013a public
215
216
217 Phase-only update works
218
219 $ hg -R ../server-simple phase --public -r caa2a465451dd
220 $ hg --debug pull
221 pulling from http://localhost:$HGPORT/
222 using http://localhost:$HGPORT/
223 sending capabilities command
224 query 1; heads
225 sending 2 commands
226 sending command heads: {}
227 sending command known: {
228 'nodes': [
229 '\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f',
230 '\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1'
231 ]
232 }
233 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
234 received frame(size=43; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
235 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
236 received frame(size=11; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
237 received frame(size=3; request=3; stream=2; streamflags=; type=command-response; flags=continuation)
238 received frame(size=0; request=3; stream=2; streamflags=; type=command-response; flags=eos)
239 searching for changes
240 all remote heads known locally
241 sending 1 commands
242 sending command changesetdata: {
243 'fields': set([
244 'parents',
245 'phase',
246 'revision'
247 ]),
248 'noderange': [
249 [
250 '\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
251 '\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
252 ],
253 [
254 '\xca\xa2\xa4eE\x1d\xd1\xfa\xcd\xa0\xf5\xb1#\x12\xc3UXA\x88\xa1',
255 '\xcd%4vk\xec\xe18\xc7\xc1\xaf\xdch%0/\x0fb\xd8\x1f'
256 ]
257 ]
258 }
259 received frame(size=11; request=1; stream=2; streamflags=stream-begin; type=command-response; flags=continuation)
260 received frame(size=92; request=1; stream=2; streamflags=; type=command-response; flags=continuation)
261 received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos)
262 2 local changesets published
200 (run 'hg update' to get a working copy)
263 (run 'hg update' to get a working copy)
201
264
202 $ hg log -G -T '{rev} {node} {phase}\n'
265 $ hg log -G -T '{rev} {node} {phase}\n'
@@ -204,7 +267,7 b' Incremental pull works'
204 |
267 |
205 o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 public
268 o 3 e96ae20f4188487b9ae4ef3941c27c81143146e5 public
206 |
269 |
207 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f public
270 | o 2 cd2534766bece138c7c1afdc6825302f0f62d81f draft
208 | |
271 | |
209 | o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
272 | o 1 4432d83626e8a98655f062ec1f2a43b07f7fbbb0 public
210 |/
273 |/
General Comments 0
You need to be logged in to leave comments. Login now