##// END OF EJS Templates
branchmap: server should not advertise secret changeset in branchmap (Issue3303)...
Pierre-Yves David -
r16535:39d1f83e stable
parent child Browse files
Show More
@@ -153,7 +153,10 b' def checkheads(repo, remote, outgoing, r'
153 branches = set(repo[n].branch() for n in outgoing.missing)
153 branches = set(repo[n].branch() for n in outgoing.missing)
154
154
155 # 2. Check for new branches on the remote.
155 # 2. Check for new branches on the remote.
156 remotemap = remote.branchmap()
156 if remote.local():
157 remotemap = phases.visiblebranchmap(remote)
158 else:
159 remotemap = remote.branchmap()
157 newbranches = branches - set(remotemap)
160 newbranches = branches - set(remotemap)
158 if newbranches and not newbranch: # new branch requires --new-branch
161 if newbranches and not newbranch: # new branch requires --new-branch
159 branchnames = ', '.join(sorted(newbranches))
162 branchnames = ', '.join(sorted(newbranches))
@@ -263,6 +263,28 b' def visibleheads(repo):'
263 vheads = repo.heads()
263 vheads = repo.heads()
264 return vheads
264 return vheads
265
265
266 def visiblebranchmap(repo):
267 """return a branchmap for the visible set"""
268 # XXX Recomputing this data on the fly is very slow. We should build a
269 # XXX cached version while computin the standard branchmap version.
270 sroots = repo._phaseroots[secret]
271 if sroots:
272 vbranchmap = {}
273 for branch, nodes in repo.branchmap().iteritems():
274 # search for secret heads.
275 for n in nodes:
276 if repo[n].phase() >= secret:
277 nodes = None
278 break
279 # if secreat heads where found we must compute them again
280 if nodes is None:
281 s = repo.set('heads(branch(%s) - secret())', branch)
282 nodes = [c.node() for c in s]
283 vbranchmap[branch] = nodes
284 else:
285 vbranchmap = repo.branchmap()
286 return vbranchmap
287
266 def analyzeremotephases(repo, subset, roots):
288 def analyzeremotephases(repo, subset, roots):
267 """Compute phases heads and root in a subset of node from root dict
289 """Compute phases heads and root in a subset of node from root dict
268
290
@@ -396,7 +396,7 b' def between(repo, proto, pairs):'
396 return "".join(r)
396 return "".join(r)
397
397
398 def branchmap(repo, proto):
398 def branchmap(repo, proto):
399 branchmap = repo.branchmap()
399 branchmap = phases.visiblebranchmap(repo)
400 heads = []
400 heads = []
401 for branch, nodes in branchmap.iteritems():
401 for branch, nodes in branchmap.iteritems():
402 branchname = urllib.quote(encoding.fromlocal(branch))
402 branchname = urllib.quote(encoding.fromlocal(branch))
@@ -833,12 +833,20 b' Discovery locally secret changeset on a '
833 o 0 public a-A - 054250a37db4
833 o 0 public a-A - 054250a37db4
834
834
835
835
836 pushing a locally public and draft changesets remotly secret should make them appear on the remote side
836 pushing a locally public and draft changesets remotly secret should make them
837 appear on the remote side.
838
837
839
838 $ hg -R ../mu phase --secret --force 967b449fbc94
840 $ hg -R ../mu phase --secret --force 967b449fbc94
839 $ hg push -r 435b5d83910c ../mu
841 $ hg push -r 435b5d83910c ../mu
840 pushing to ../mu
842 pushing to ../mu
841 searching for changes
843 searching for changes
844 abort: push creates new remote head 435b5d83910c!
845 (did you forget to merge? use push -f to force)
846 [255]
847 $ hg push -fr 435b5d83910c ../mu # because the push will create new visible head
848 pushing to ../mu
849 searching for changes
842 adding changesets
850 adding changesets
843 adding manifests
851 adding manifests
844 adding file changes
852 adding file changes
@@ -135,6 +135,39 b' Test secret changeset are not pushed'
135 2 1 C
135 2 1 C
136 1 0 B
136 1 0 B
137 0 0 A
137 0 0 A
138
139 (Issue3303)
140 Check that remote secret changeset are ignore when checking creation of remote heads
141
142 We add a secret head into the push destination. This secreat head shadow a
143 visible shared between the initial repo and the push destination.
144
145 $ hg up -q 4 # B'
146 $ mkcommit Z --config phases.new-commit=secret
147 $ hg phase .
148 5: secret
149
150 # We now try to push a new public changeset that descend from the common public
151 # head shadowed by the remote secret head.
152
153 $ cd ../initialrepo
154 $ hg up -q 6 #B'
155 $ mkcommit I
156 created new head
157 $ hg push ../push-dest
158 pushing to ../push-dest
159 searching for changes
160 adding changesets
161 adding manifests
162 adding file changes
163 added 1 changesets with 1 changes to 1 files (+1 heads)
164
165 :note: The "(+1 heads)" is wrong as we do not had any visible head
166
167
168 Restore condition prior extra insertion.
169 $ hg -q --config extensions.mq= strip .
170 $ hg up -q 7
138 $ cd ..
171 $ cd ..
139
172
140 Test secret changeset are not pull
173 Test secret changeset are not pull
General Comments 0
You need to be logged in to leave comments. Login now