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 | 139 | remote server as a bundle. Return an integer indicating the |
|
140 | 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 | 149 | if ret == "": |
|
144 | 150 | raise error.ResponseError( |
|
145 | 151 | _('push failed:'), output) |
@@ -216,7 +222,8 b' def branches(repo, proto, nodes):' | |||
|
216 | 222 | return "".join(r) |
|
217 | 223 | |
|
218 | 224 | def capabilities(repo, proto): |
|
219 |
caps = 'lookup changegroupsubset branchmap pushkey known getbundle' |
|
|
225 | caps = ('lookup changegroupsubset branchmap pushkey known getbundle ' | |
|
226 | 'unbundlehash').split() | |
|
220 | 227 | if _allowstream(repo.ui): |
|
221 | 228 | requiredformats = repo.requirements & repo.supportedformats |
|
222 | 229 | # if our local revlogs are just revlogv1, add 'stream' cap |
@@ -353,7 +360,9 b' def unbundle(repo, proto, heads):' | |||
|
353 | 360 | |
|
354 | 361 | def check_heads(): |
|
355 | 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 | 367 | proto.redirect() |
|
359 | 368 |
@@ -943,7 +943,7 b' capabilities' | |||
|
943 | 943 | $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=capabilities'; echo |
|
944 | 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 | 948 | heads |
|
949 | 949 |
General Comments 0
You need to be logged in to leave comments.
Login now