##// END OF EJS Templates
wireproto: allow unbundle with hashed heads parameter (issue2126)...
Shuhei Takahashi -
r13942:88f0e41d default
parent child Browse files
Show More
@@ -0,0 +1,31 b''
1
2 Test wire protocol unbundle with hashed heads (capability: unbundlehash)
3
4 Create a remote repository.
5
6 $ hg init remote
7 $ hg serve -R remote --config web.push_ssl=False --config web.allow_push=* -p $HGPORT -d --pid-file=hg1.pid -E error.log -A access.log
8 $ cat hg1.pid >> $DAEMON_PIDS
9
10 Clone the repository and push a change.
11
12 $ hg clone http://localhost:$HGPORT/ local
13 no changes found
14 updating to branch default
15 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 $ touch local/README
17 $ hg ci -R local -A -m hoge
18 adding README
19 $ hg push -R local
20 pushing to http://localhost:$HGPORT/
21 searching for changes
22 remote: adding changesets
23 remote: adding manifests
24 remote: adding file changes
25 remote: added 1 changesets with 1 changes to 1 files
26
27 Ensure hashed heads format is used.
28 The hash here is always the same since the remote repository only has the null head.
29
30 $ cat access.log | grep unbundle
31 * - - [*] "POST /?cmd=unbundle&heads=686173686564+6768033e216468247bd031a0a2d9876d79818f8f HTTP/1.1" 200 - (glob)
@@ -139,7 +139,13 b' class wirerepository(repo.repository):'
139 remote server as a bundle. Return an integer indicating the
139 remote server as a bundle. Return an integer indicating the
140 result of the push (see localrepository.addchangegroup()).'''
140 result of the push (see localrepository.addchangegroup()).'''
141
141
142 ret, output = self._callpush("unbundle", cg, heads=encodelist(heads))
142 if self.capable('unbundlehash'):
143 heads = encodelist(['hashed',
144 util.sha1(''.join(sorted(heads))).digest()])
145 else:
146 heads = encodelist(heads)
147
148 ret, output = self._callpush("unbundle", cg, heads=heads)
143 if ret == "":
149 if ret == "":
144 raise error.ResponseError(
150 raise error.ResponseError(
145 _('push failed:'), output)
151 _('push failed:'), output)
@@ -216,7 +222,8 b' def branches(repo, proto, nodes):'
216 return "".join(r)
222 return "".join(r)
217
223
218 def capabilities(repo, proto):
224 def capabilities(repo, proto):
219 caps = 'lookup changegroupsubset branchmap pushkey known getbundle'.split()
225 caps = ('lookup changegroupsubset branchmap pushkey known getbundle '
226 'unbundlehash').split()
220 if _allowstream(repo.ui):
227 if _allowstream(repo.ui):
221 requiredformats = repo.requirements & repo.supportedformats
228 requiredformats = repo.requirements & repo.supportedformats
222 # if our local revlogs are just revlogv1, add 'stream' cap
229 # if our local revlogs are just revlogv1, add 'stream' cap
@@ -353,7 +360,9 b' def unbundle(repo, proto, heads):'
353
360
354 def check_heads():
361 def check_heads():
355 heads = repo.heads()
362 heads = repo.heads()
356 return their_heads == ['force'] or their_heads == heads
363 heads_hash = util.sha1(''.join(sorted(heads))).digest()
364 return (their_heads == ['force'] or their_heads == heads or
365 their_heads == ['hashed', heads_hash])
357
366
358 proto.redirect()
367 proto.redirect()
359
368
@@ -943,7 +943,7 b' capabilities'
943 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
943 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
944 200 Script output follows
944 200 Script output follows
945
945
946 lookup changegroupsubset branchmap pushkey known getbundle unbundle=HG10GZ,HG10BZ,HG10UN
946 lookup changegroupsubset branchmap pushkey known getbundle unbundlehash unbundle=HG10GZ,HG10BZ,HG10UN
947
947
948 heads
948 heads
949
949
General Comments 0
You need to be logged in to leave comments. Login now