##// END OF EJS Templates
tests: add test to demonstrate issue6159...
Navaneeth Suresh -
r43081:cf9dbc73 stable
parent child Browse files
Show More
@@ -1,1324 +1,1382
1 1 #testcases b2-pushkey b2-binary
2 2
3 3 #if b2-pushkey
4 4 $ cat << EOF >> $HGRCPATH
5 5 > [devel]
6 6 > legacy.exchange=bookmarks
7 7 > EOF
8 8 #endif
9 9
10 10 #require serve
11 11
12 12 $ cat << EOF >> $HGRCPATH
13 13 > [ui]
14 14 > logtemplate={rev}:{node|short} {desc|firstline}
15 15 > [phases]
16 16 > publish=False
17 17 > [experimental]
18 18 > evolution.createmarkers=True
19 19 > evolution.exchange=True
20 20 > EOF
21 21
22 22 $ cat > $TESTTMP/hook.sh <<'EOF'
23 23 > echo "test-hook-bookmark: $HG_BOOKMARK: $HG_OLDNODE -> $HG_NODE"
24 24 > EOF
25 25 $ TESTHOOK="hooks.txnclose-bookmark.test=sh $TESTTMP/hook.sh"
26 26
27 27 initialize
28 28
29 29 $ hg init a
30 30 $ cd a
31 31 $ echo 'test' > test
32 32 $ hg commit -Am'test'
33 33 adding test
34 34
35 35 set bookmarks
36 36
37 37 $ hg bookmark X
38 38 $ hg bookmark Y
39 39 $ hg bookmark Z
40 40
41 41 import bookmark by name
42 42
43 43 $ hg init ../b
44 44 $ cd ../b
45 45 $ hg book Y
46 46 $ hg book
47 47 * Y -1:000000000000
48 48 $ hg pull ../a --config "$TESTHOOK"
49 49 pulling from ../a
50 50 requesting all changes
51 51 adding changesets
52 52 adding manifests
53 53 adding file changes
54 54 added 1 changesets with 1 changes to 1 files
55 55 adding remote bookmark X
56 56 updating bookmark Y
57 57 adding remote bookmark Z
58 58 new changesets 4e3505fd9583 (1 drafts)
59 59 test-hook-bookmark: X: -> 4e3505fd95835d721066b76e75dbb8cc554d7f77
60 60 test-hook-bookmark: Y: 0000000000000000000000000000000000000000 -> 4e3505fd95835d721066b76e75dbb8cc554d7f77
61 61 test-hook-bookmark: Z: -> 4e3505fd95835d721066b76e75dbb8cc554d7f77
62 62 (run 'hg update' to get a working copy)
63 63 $ hg bookmarks
64 64 X 0:4e3505fd9583
65 65 * Y 0:4e3505fd9583
66 66 Z 0:4e3505fd9583
67 67 $ hg debugpushkey ../a namespaces
68 68 bookmarks
69 69 namespaces
70 70 obsolete
71 71 phases
72 72 $ hg debugpushkey ../a bookmarks
73 73 X 4e3505fd95835d721066b76e75dbb8cc554d7f77
74 74 Y 4e3505fd95835d721066b76e75dbb8cc554d7f77
75 75 Z 4e3505fd95835d721066b76e75dbb8cc554d7f77
76 76
77 77 delete the bookmark to re-pull it
78 78
79 79 $ hg book -d X
80 80 $ hg pull -B X ../a
81 81 pulling from ../a
82 82 no changes found
83 83 adding remote bookmark X
84 84
85 85 finally no-op pull
86 86
87 87 $ hg pull -B X ../a
88 88 pulling from ../a
89 89 no changes found
90 90 $ hg bookmark
91 91 X 0:4e3505fd9583
92 92 * Y 0:4e3505fd9583
93 93 Z 0:4e3505fd9583
94 94
95 95 export bookmark by name
96 96
97 97 $ hg bookmark W
98 98 $ hg bookmark foo
99 99 $ hg bookmark foobar
100 100 $ hg push -B W ../a
101 101 pushing to ../a
102 102 searching for changes
103 103 no changes found
104 104 exporting bookmark W
105 105 [1]
106 106 $ hg -R ../a bookmarks
107 107 W -1:000000000000
108 108 X 0:4e3505fd9583
109 109 Y 0:4e3505fd9583
110 110 * Z 0:4e3505fd9583
111 111
112 112 delete a remote bookmark
113 113
114 114 $ hg book -d W
115 115
116 116 #if b2-pushkey
117 117
118 118 $ hg push -B W ../a --config "$TESTHOOK" --debug --config devel.bundle2.debug=yes
119 119 pushing to ../a
120 120 query 1; heads
121 121 searching for changes
122 122 all remote heads known locally
123 123 listing keys for "phases"
124 124 checking for updated bookmarks
125 125 listing keys for "bookmarks"
126 126 no changes found
127 127 bundle2-output-bundle: "HG20", 4 parts total
128 128 bundle2-output: start emission of HG20 stream
129 129 bundle2-output: bundle parameter:
130 130 bundle2-output: start of parts
131 131 bundle2-output: bundle part: "replycaps"
132 132 bundle2-output-part: "replycaps" 222 bytes payload
133 133 bundle2-output: part 0: "REPLYCAPS"
134 134 bundle2-output: header chunk size: 16
135 135 bundle2-output: payload chunk size: 222
136 136 bundle2-output: closing payload chunk
137 137 bundle2-output: bundle part: "check:bookmarks"
138 138 bundle2-output-part: "check:bookmarks" 23 bytes payload
139 139 bundle2-output: part 1: "CHECK:BOOKMARKS"
140 140 bundle2-output: header chunk size: 22
141 141 bundle2-output: payload chunk size: 23
142 142 bundle2-output: closing payload chunk
143 143 bundle2-output: bundle part: "check:phases"
144 144 bundle2-output-part: "check:phases" 24 bytes payload
145 145 bundle2-output: part 2: "CHECK:PHASES"
146 146 bundle2-output: header chunk size: 19
147 147 bundle2-output: payload chunk size: 24
148 148 bundle2-output: closing payload chunk
149 149 bundle2-output: bundle part: "pushkey"
150 150 bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
151 151 bundle2-output: part 3: "PUSHKEY"
152 152 bundle2-output: header chunk size: 90
153 153 bundle2-output: closing payload chunk
154 154 bundle2-output: end of bundle
155 155 bundle2-input: start processing of HG20 stream
156 156 bundle2-input: reading bundle2 stream parameters
157 157 bundle2-input-bundle: with-transaction
158 158 bundle2-input: start extraction of bundle2 parts
159 159 bundle2-input: part header size: 16
160 160 bundle2-input: part type: "REPLYCAPS"
161 161 bundle2-input: part id: "0"
162 162 bundle2-input: part parameters: 0
163 163 bundle2-input: found a handler for part replycaps
164 164 bundle2-input-part: "replycaps" supported
165 165 bundle2-input: payload chunk size: 222
166 166 bundle2-input: payload chunk size: 0
167 167 bundle2-input-part: total payload size 222
168 168 bundle2-input: part header size: 22
169 169 bundle2-input: part type: "CHECK:BOOKMARKS"
170 170 bundle2-input: part id: "1"
171 171 bundle2-input: part parameters: 0
172 172 bundle2-input: found a handler for part check:bookmarks
173 173 bundle2-input-part: "check:bookmarks" supported
174 174 bundle2-input: payload chunk size: 23
175 175 bundle2-input: payload chunk size: 0
176 176 bundle2-input-part: total payload size 23
177 177 bundle2-input: part header size: 19
178 178 bundle2-input: part type: "CHECK:PHASES"
179 179 bundle2-input: part id: "2"
180 180 bundle2-input: part parameters: 0
181 181 bundle2-input: found a handler for part check:phases
182 182 bundle2-input-part: "check:phases" supported
183 183 bundle2-input: payload chunk size: 24
184 184 bundle2-input: payload chunk size: 0
185 185 bundle2-input-part: total payload size 24
186 186 bundle2-input: part header size: 90
187 187 bundle2-input: part type: "PUSHKEY"
188 188 bundle2-input: part id: "3"
189 189 bundle2-input: part parameters: 4
190 190 bundle2-input: found a handler for part pushkey
191 191 bundle2-input-part: "pushkey" (params: 4 mandatory) supported
192 192 pushing key for "bookmarks:W"
193 193 bundle2-input: payload chunk size: 0
194 194 bundle2-input: part header size: 0
195 195 bundle2-input: end of bundle2 stream
196 196 bundle2-input-bundle: 3 parts total
197 197 running hook txnclose-bookmark.test: sh $TESTTMP/hook.sh
198 198 test-hook-bookmark: W: 0000000000000000000000000000000000000000 ->
199 199 bundle2-output-bundle: "HG20", 1 parts total
200 200 bundle2-output: start emission of HG20 stream
201 201 bundle2-output: bundle parameter:
202 202 bundle2-output: start of parts
203 203 bundle2-output: bundle part: "reply:pushkey"
204 204 bundle2-output-part: "reply:pushkey" (params: 0 advisory) empty payload
205 205 bundle2-output: part 0: "REPLY:PUSHKEY"
206 206 bundle2-output: header chunk size: 43
207 207 bundle2-output: closing payload chunk
208 208 bundle2-output: end of bundle
209 209 bundle2-input: start processing of HG20 stream
210 210 bundle2-input: reading bundle2 stream parameters
211 211 bundle2-input-bundle: no-transaction
212 212 bundle2-input: start extraction of bundle2 parts
213 213 bundle2-input: part header size: 43
214 214 bundle2-input: part type: "REPLY:PUSHKEY"
215 215 bundle2-input: part id: "0"
216 216 bundle2-input: part parameters: 2
217 217 bundle2-input: found a handler for part reply:pushkey
218 218 bundle2-input-part: "reply:pushkey" (params: 0 advisory) supported
219 219 bundle2-input: payload chunk size: 0
220 220 bundle2-input: part header size: 0
221 221 bundle2-input: end of bundle2 stream
222 222 bundle2-input-bundle: 0 parts total
223 223 deleting remote bookmark W
224 224 listing keys for "phases"
225 225 [1]
226 226
227 227 #endif
228 228 #if b2-binary
229 229
230 230 $ hg push -B W ../a --config "$TESTHOOK" --debug --config devel.bundle2.debug=yes
231 231 pushing to ../a
232 232 query 1; heads
233 233 searching for changes
234 234 all remote heads known locally
235 235 listing keys for "phases"
236 236 checking for updated bookmarks
237 237 listing keys for "bookmarks"
238 238 no changes found
239 239 bundle2-output-bundle: "HG20", 4 parts total
240 240 bundle2-output: start emission of HG20 stream
241 241 bundle2-output: bundle parameter:
242 242 bundle2-output: start of parts
243 243 bundle2-output: bundle part: "replycaps"
244 244 bundle2-output-part: "replycaps" 222 bytes payload
245 245 bundle2-output: part 0: "REPLYCAPS"
246 246 bundle2-output: header chunk size: 16
247 247 bundle2-output: payload chunk size: 222
248 248 bundle2-output: closing payload chunk
249 249 bundle2-output: bundle part: "check:bookmarks"
250 250 bundle2-output-part: "check:bookmarks" 23 bytes payload
251 251 bundle2-output: part 1: "CHECK:BOOKMARKS"
252 252 bundle2-output: header chunk size: 22
253 253 bundle2-output: payload chunk size: 23
254 254 bundle2-output: closing payload chunk
255 255 bundle2-output: bundle part: "check:phases"
256 256 bundle2-output-part: "check:phases" 24 bytes payload
257 257 bundle2-output: part 2: "CHECK:PHASES"
258 258 bundle2-output: header chunk size: 19
259 259 bundle2-output: payload chunk size: 24
260 260 bundle2-output: closing payload chunk
261 261 bundle2-output: bundle part: "bookmarks"
262 262 bundle2-output-part: "bookmarks" 23 bytes payload
263 263 bundle2-output: part 3: "BOOKMARKS"
264 264 bundle2-output: header chunk size: 16
265 265 bundle2-output: payload chunk size: 23
266 266 bundle2-output: closing payload chunk
267 267 bundle2-output: end of bundle
268 268 bundle2-input: start processing of HG20 stream
269 269 bundle2-input: reading bundle2 stream parameters
270 270 bundle2-input-bundle: with-transaction
271 271 bundle2-input: start extraction of bundle2 parts
272 272 bundle2-input: part header size: 16
273 273 bundle2-input: part type: "REPLYCAPS"
274 274 bundle2-input: part id: "0"
275 275 bundle2-input: part parameters: 0
276 276 bundle2-input: found a handler for part replycaps
277 277 bundle2-input-part: "replycaps" supported
278 278 bundle2-input: payload chunk size: 222
279 279 bundle2-input: payload chunk size: 0
280 280 bundle2-input-part: total payload size 222
281 281 bundle2-input: part header size: 22
282 282 bundle2-input: part type: "CHECK:BOOKMARKS"
283 283 bundle2-input: part id: "1"
284 284 bundle2-input: part parameters: 0
285 285 bundle2-input: found a handler for part check:bookmarks
286 286 bundle2-input-part: "check:bookmarks" supported
287 287 bundle2-input: payload chunk size: 23
288 288 bundle2-input: payload chunk size: 0
289 289 bundle2-input-part: total payload size 23
290 290 bundle2-input: part header size: 19
291 291 bundle2-input: part type: "CHECK:PHASES"
292 292 bundle2-input: part id: "2"
293 293 bundle2-input: part parameters: 0
294 294 bundle2-input: found a handler for part check:phases
295 295 bundle2-input-part: "check:phases" supported
296 296 bundle2-input: payload chunk size: 24
297 297 bundle2-input: payload chunk size: 0
298 298 bundle2-input-part: total payload size 24
299 299 bundle2-input: part header size: 16
300 300 bundle2-input: part type: "BOOKMARKS"
301 301 bundle2-input: part id: "3"
302 302 bundle2-input: part parameters: 0
303 303 bundle2-input: found a handler for part bookmarks
304 304 bundle2-input-part: "bookmarks" supported
305 305 bundle2-input: payload chunk size: 23
306 306 bundle2-input: payload chunk size: 0
307 307 bundle2-input-part: total payload size 23
308 308 bundle2-input: part header size: 0
309 309 bundle2-input: end of bundle2 stream
310 310 bundle2-input-bundle: 3 parts total
311 311 running hook txnclose-bookmark.test: sh $TESTTMP/hook.sh
312 312 test-hook-bookmark: W: 0000000000000000000000000000000000000000 ->
313 313 bundle2-output-bundle: "HG20", 0 parts total
314 314 bundle2-output: start emission of HG20 stream
315 315 bundle2-output: bundle parameter:
316 316 bundle2-output: start of parts
317 317 bundle2-output: end of bundle
318 318 bundle2-input: start processing of HG20 stream
319 319 bundle2-input: reading bundle2 stream parameters
320 320 bundle2-input-bundle: no-transaction
321 321 bundle2-input: start extraction of bundle2 parts
322 322 bundle2-input: part header size: 0
323 323 bundle2-input: end of bundle2 stream
324 324 bundle2-input-bundle: 0 parts total
325 325 deleting remote bookmark W
326 326 listing keys for "phases"
327 327 [1]
328 328
329 329 #endif
330 330
331 331 export the active bookmark
332 332
333 333 $ hg bookmark V
334 334 $ hg push -B . ../a
335 335 pushing to ../a
336 336 searching for changes
337 337 no changes found
338 338 exporting bookmark V
339 339 [1]
340 340
341 341 exporting the active bookmark with 'push -B .'
342 342 demand that one of the bookmarks is activated
343 343
344 344 $ hg update -r default
345 345 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
346 346 (leaving bookmark V)
347 347 $ hg push -B . ../a
348 348 abort: no active bookmark!
349 349 [255]
350 350 $ hg update -r V
351 351 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
352 352 (activating bookmark V)
353 353
354 354 delete the bookmark
355 355
356 356 $ hg book -d V
357 357 $ hg push -B V ../a
358 358 pushing to ../a
359 359 searching for changes
360 360 no changes found
361 361 deleting remote bookmark V
362 362 [1]
363 363 $ hg up foobar
364 364 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
365 365 (activating bookmark foobar)
366 366
367 367 push/pull name that doesn't exist
368 368
369 369 $ hg push -B badname ../a
370 370 pushing to ../a
371 371 searching for changes
372 372 bookmark badname does not exist on the local or remote repository!
373 373 no changes found
374 374 [2]
375 375 $ hg pull -B anotherbadname ../a
376 376 pulling from ../a
377 377 abort: remote bookmark anotherbadname not found!
378 378 [255]
379 379
380 380 divergent bookmarks
381 381
382 382 $ cd ../a
383 383 $ echo c1 > f1
384 384 $ hg ci -Am1
385 385 adding f1
386 386 $ hg book -f @
387 387 $ hg book -f X
388 388 $ hg book
389 389 @ 1:0d2164f0ce0d
390 390 * X 1:0d2164f0ce0d
391 391 Y 0:4e3505fd9583
392 392 Z 1:0d2164f0ce0d
393 393
394 394 $ cd ../b
395 395 $ hg up
396 396 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
397 397 updating bookmark foobar
398 398 $ echo c2 > f2
399 399 $ hg ci -Am2
400 400 adding f2
401 401 $ hg book -if @
402 402 $ hg book -if X
403 403 $ hg book
404 404 @ 1:9b140be10808
405 405 X 1:9b140be10808
406 406 Y 0:4e3505fd9583
407 407 Z 0:4e3505fd9583
408 408 foo -1:000000000000
409 409 * foobar 1:9b140be10808
410 410
411 411 $ hg pull --config paths.foo=../a foo --config "$TESTHOOK"
412 412 pulling from $TESTTMP/a
413 413 searching for changes
414 414 adding changesets
415 415 adding manifests
416 416 adding file changes
417 417 added 1 changesets with 1 changes to 1 files (+1 heads)
418 418 divergent bookmark @ stored as @foo
419 419 divergent bookmark X stored as X@foo
420 420 updating bookmark Z
421 421 new changesets 0d2164f0ce0d (1 drafts)
422 422 test-hook-bookmark: @foo: -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
423 423 test-hook-bookmark: X@foo: -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
424 424 test-hook-bookmark: Z: 4e3505fd95835d721066b76e75dbb8cc554d7f77 -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
425 425 (run 'hg heads' to see heads, 'hg merge' to merge)
426 426 $ hg book
427 427 @ 1:9b140be10808
428 428 @foo 2:0d2164f0ce0d
429 429 X 1:9b140be10808
430 430 X@foo 2:0d2164f0ce0d
431 431 Y 0:4e3505fd9583
432 432 Z 2:0d2164f0ce0d
433 433 foo -1:000000000000
434 434 * foobar 1:9b140be10808
435 435
436 436 (test that too many divergence of bookmark)
437 437
438 438 $ "$PYTHON" $TESTDIR/seq.py 1 100 | while read i; do hg bookmarks -r 000000000000 "X@${i}"; done
439 439 $ hg pull ../a
440 440 pulling from ../a
441 441 searching for changes
442 442 no changes found
443 443 warning: failed to assign numbered name to divergent bookmark X
444 444 divergent bookmark @ stored as @1
445 445 $ hg bookmarks | grep '^ X' | grep -v ':000000000000'
446 446 X 1:9b140be10808
447 447 X@foo 2:0d2164f0ce0d
448 448
449 449 (test that remotely diverged bookmarks are reused if they aren't changed)
450 450
451 451 $ hg bookmarks | grep '^ @'
452 452 @ 1:9b140be10808
453 453 @1 2:0d2164f0ce0d
454 454 @foo 2:0d2164f0ce0d
455 455 $ hg pull ../a
456 456 pulling from ../a
457 457 searching for changes
458 458 no changes found
459 459 warning: failed to assign numbered name to divergent bookmark X
460 460 divergent bookmark @ stored as @1
461 461 $ hg bookmarks | grep '^ @'
462 462 @ 1:9b140be10808
463 463 @1 2:0d2164f0ce0d
464 464 @foo 2:0d2164f0ce0d
465 465
466 466 $ "$PYTHON" $TESTDIR/seq.py 1 100 | while read i; do hg bookmarks -d "X@${i}"; done
467 467 $ hg bookmarks -d "@1"
468 468
469 469 $ hg push -f ../a
470 470 pushing to ../a
471 471 searching for changes
472 472 adding changesets
473 473 adding manifests
474 474 adding file changes
475 475 added 1 changesets with 1 changes to 1 files (+1 heads)
476 476 $ hg -R ../a book
477 477 @ 1:0d2164f0ce0d
478 478 * X 1:0d2164f0ce0d
479 479 Y 0:4e3505fd9583
480 480 Z 1:0d2164f0ce0d
481 481
482 482 explicit pull should overwrite the local version (issue4439)
483 483
484 484 $ hg update -r X
485 485 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
486 486 (activating bookmark X)
487 487 $ hg pull --config paths.foo=../a foo -B . --config "$TESTHOOK"
488 488 pulling from $TESTTMP/a
489 489 no changes found
490 490 divergent bookmark @ stored as @foo
491 491 importing bookmark X
492 492 test-hook-bookmark: @foo: 0d2164f0ce0d8f1d6f94351eba04b794909be66c -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
493 493 test-hook-bookmark: X: 9b140be1080824d768c5a4691a564088eede71f9 -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
494 494
495 495 reinstall state for further testing:
496 496
497 497 $ hg book -fr 9b140be10808 X
498 498
499 499 revsets should not ignore divergent bookmarks
500 500
501 501 $ hg bookmark -fr 1 Z
502 502 $ hg log -r 'bookmark()' --template '{rev}:{node|short} {bookmarks}\n'
503 503 0:4e3505fd9583 Y
504 504 1:9b140be10808 @ X Z foobar
505 505 2:0d2164f0ce0d @foo X@foo
506 506 $ hg log -r 'bookmark("X@foo")' --template '{rev}:{node|short} {bookmarks}\n'
507 507 2:0d2164f0ce0d @foo X@foo
508 508 $ hg log -r 'bookmark("re:X@foo")' --template '{rev}:{node|short} {bookmarks}\n'
509 509 2:0d2164f0ce0d @foo X@foo
510 510
511 511 update a remote bookmark from a non-head to a head
512 512
513 513 $ hg up -q Y
514 514 $ echo c3 > f2
515 515 $ hg ci -Am3
516 516 adding f2
517 517 created new head
518 518 $ hg push ../a --config "$TESTHOOK"
519 519 pushing to ../a
520 520 searching for changes
521 521 adding changesets
522 522 adding manifests
523 523 adding file changes
524 524 added 1 changesets with 1 changes to 1 files (+1 heads)
525 525 test-hook-bookmark: Y: 4e3505fd95835d721066b76e75dbb8cc554d7f77 -> f6fc62dde3c0771e29704af56ba4d8af77abcc2f
526 526 updating bookmark Y
527 527 $ hg -R ../a book
528 528 @ 1:0d2164f0ce0d
529 529 * X 1:0d2164f0ce0d
530 530 Y 3:f6fc62dde3c0
531 531 Z 1:0d2164f0ce0d
532 532
533 533 update a bookmark in the middle of a client pulling changes
534 534
535 535 $ cd ..
536 536 $ hg clone -q a pull-race
537 537
538 538 We want to use http because it is stateless and therefore more susceptible to
539 539 race conditions
540 540
541 541 $ hg serve -R pull-race -p $HGPORT -d --pid-file=pull-race.pid -E main-error.log
542 542 $ cat pull-race.pid >> $DAEMON_PIDS
543 543
544 544 $ cat <<EOF > $TESTTMP/out_makecommit.sh
545 545 > #!/bin/sh
546 546 > hg ci -Am5
547 547 > echo committed in pull-race
548 548 > EOF
549 549
550 550 $ hg clone -q http://localhost:$HGPORT/ pull-race2 --config "$TESTHOOK"
551 551 test-hook-bookmark: @: -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
552 552 test-hook-bookmark: X: -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
553 553 test-hook-bookmark: Y: -> f6fc62dde3c0771e29704af56ba4d8af77abcc2f
554 554 test-hook-bookmark: Z: -> 0d2164f0ce0d8f1d6f94351eba04b794909be66c
555 555 $ cd pull-race
556 556 $ hg up -q Y
557 557 $ echo c4 > f2
558 558 $ hg ci -Am4
559 559 $ echo c5 > f3
560 560 $ cat <<EOF > .hg/hgrc
561 561 > [hooks]
562 562 > outgoing.makecommit = sh $TESTTMP/out_makecommit.sh
563 563 > EOF
564 564
565 565 (new config needs a server restart)
566 566
567 567 $ cd ..
568 568 $ killdaemons.py
569 569 $ hg serve -R pull-race -p $HGPORT -d --pid-file=pull-race.pid -E main-error.log
570 570 $ cat pull-race.pid >> $DAEMON_PIDS
571 571 $ cd pull-race2
572 572 $ hg -R $TESTTMP/pull-race book
573 573 @ 1:0d2164f0ce0d
574 574 X 1:0d2164f0ce0d
575 575 * Y 4:b0a5eff05604
576 576 Z 1:0d2164f0ce0d
577 577 $ hg pull
578 578 pulling from http://localhost:$HGPORT/
579 579 searching for changes
580 580 adding changesets
581 581 adding manifests
582 582 adding file changes
583 583 added 1 changesets with 1 changes to 1 files
584 584 updating bookmark Y
585 585 new changesets b0a5eff05604 (1 drafts)
586 586 (run 'hg update' to get a working copy)
587 587 $ hg book
588 588 * @ 1:0d2164f0ce0d
589 589 X 1:0d2164f0ce0d
590 590 Y 4:b0a5eff05604
591 591 Z 1:0d2164f0ce0d
592 592
593 593 Update a bookmark right after the initial lookup -B (issue4689)
594 594
595 595 $ echo c6 > ../pull-race/f3 # to be committed during the race
596 596 $ cat <<EOF > $TESTTMP/listkeys_makecommit.sh
597 597 > #!/bin/sh
598 598 > if hg st | grep -q M; then
599 599 > hg commit -m race
600 600 > echo committed in pull-race
601 601 > else
602 602 > exit 0
603 603 > fi
604 604 > EOF
605 605 $ cat <<EOF > ../pull-race/.hg/hgrc
606 606 > [hooks]
607 607 > # If anything to commit, commit it right after the first key listing used
608 608 > # during lookup. This makes the commit appear before the actual getbundle
609 609 > # call.
610 610 > listkeys.makecommit= sh $TESTTMP/listkeys_makecommit.sh
611 611 > EOF
612 612 $ restart_server() {
613 613 > "$TESTDIR/killdaemons.py" $DAEMON_PIDS
614 614 > hg serve -R ../pull-race -p $HGPORT -d --pid-file=../pull-race.pid -E main-error.log
615 615 > cat ../pull-race.pid >> $DAEMON_PIDS
616 616 > }
617 617 $ restart_server # new config need server restart
618 618 $ hg -R $TESTTMP/pull-race book
619 619 @ 1:0d2164f0ce0d
620 620 X 1:0d2164f0ce0d
621 621 * Y 5:35d1ef0a8d1b
622 622 Z 1:0d2164f0ce0d
623 623 $ hg update -r Y
624 624 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
625 625 (activating bookmark Y)
626 626 $ hg pull -B .
627 627 pulling from http://localhost:$HGPORT/
628 628 searching for changes
629 629 adding changesets
630 630 adding manifests
631 631 adding file changes
632 632 added 1 changesets with 1 changes to 1 files
633 633 updating bookmark Y
634 634 new changesets 35d1ef0a8d1b (1 drafts)
635 635 (run 'hg update' to get a working copy)
636 636 $ hg book
637 637 @ 1:0d2164f0ce0d
638 638 X 1:0d2164f0ce0d
639 639 * Y 5:35d1ef0a8d1b
640 640 Z 1:0d2164f0ce0d
641 641
642 642 Update a bookmark right after the initial lookup -r (issue4700)
643 643
644 644 $ echo c7 > ../pull-race/f3 # to be committed during the race
645 645 $ cat <<EOF > ../lookuphook.py
646 646 > """small extensions adding a hook after wireprotocol lookup to test race"""
647 647 > import functools
648 648 > from mercurial import wireprotov1server, wireprotov2server
649 649 >
650 650 > def wrappedlookup(orig, repo, *args, **kwargs):
651 651 > ret = orig(repo, *args, **kwargs)
652 652 > repo.hook(b'lookup')
653 653 > return ret
654 654 > for table in [wireprotov1server.commands, wireprotov2server.COMMANDS]:
655 655 > table[b'lookup'].func = functools.partial(wrappedlookup, table[b'lookup'].func)
656 656 > EOF
657 657 $ cat <<EOF > ../pull-race/.hg/hgrc
658 658 > [extensions]
659 659 > lookuphook=$TESTTMP/lookuphook.py
660 660 > [hooks]
661 661 > lookup.makecommit= sh $TESTTMP/listkeys_makecommit.sh
662 662 > EOF
663 663 $ restart_server # new config need server restart
664 664 $ hg -R $TESTTMP/pull-race book
665 665 @ 1:0d2164f0ce0d
666 666 X 1:0d2164f0ce0d
667 667 * Y 6:0d60821d2197
668 668 Z 1:0d2164f0ce0d
669 669 $ hg pull -r Y
670 670 pulling from http://localhost:$HGPORT/
671 671 searching for changes
672 672 adding changesets
673 673 adding manifests
674 674 adding file changes
675 675 added 1 changesets with 1 changes to 1 files
676 676 updating bookmark Y
677 677 new changesets 0d60821d2197 (1 drafts)
678 678 (run 'hg update' to get a working copy)
679 679 $ hg book
680 680 @ 1:0d2164f0ce0d
681 681 X 1:0d2164f0ce0d
682 682 * Y 6:0d60821d2197
683 683 Z 1:0d2164f0ce0d
684 684 $ hg -R $TESTTMP/pull-race book
685 685 @ 1:0d2164f0ce0d
686 686 X 1:0d2164f0ce0d
687 687 * Y 7:714424d9e8b8
688 688 Z 1:0d2164f0ce0d
689 689
690 690 (done with this section of the test)
691 691
692 692 $ killdaemons.py
693 693 $ cd ../b
694 694
695 695 diverging a remote bookmark fails
696 696
697 697 $ hg up -q 4e3505fd9583
698 698 $ echo c4 > f2
699 699 $ hg ci -Am4
700 700 adding f2
701 701 created new head
702 702 $ echo c5 > f2
703 703 $ hg ci -Am5
704 704 $ hg log -G
705 705 @ 5:c922c0139ca0 5
706 706 |
707 707 o 4:4efff6d98829 4
708 708 |
709 709 | o 3:f6fc62dde3c0 3
710 710 |/
711 711 | o 2:0d2164f0ce0d 1
712 712 |/
713 713 | o 1:9b140be10808 2
714 714 |/
715 715 o 0:4e3505fd9583 test
716 716
717 717
718 718 $ hg book -f Y
719 719
720 720 $ cat <<EOF > ../a/.hg/hgrc
721 721 > [web]
722 722 > push_ssl = false
723 723 > allow_push = *
724 724 > EOF
725 725
726 726 $ hg serve -R ../a -p $HGPORT2 -d --pid-file=../hg2.pid
727 727 $ cat ../hg2.pid >> $DAEMON_PIDS
728 728
729 729 $ hg push http://localhost:$HGPORT2/
730 730 pushing to http://localhost:$HGPORT2/
731 731 searching for changes
732 732 abort: push creates new remote head c922c0139ca0 with bookmark 'Y'!
733 733 (merge or see 'hg help push' for details about pushing new heads)
734 734 [255]
735 735 $ hg -R ../a book
736 736 @ 1:0d2164f0ce0d
737 737 * X 1:0d2164f0ce0d
738 738 Y 3:f6fc62dde3c0
739 739 Z 1:0d2164f0ce0d
740 740
741 741
742 742 Unrelated marker does not alter the decision
743 743
744 744 $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
745 745 $ hg push http://localhost:$HGPORT2/
746 746 pushing to http://localhost:$HGPORT2/
747 747 searching for changes
748 748 abort: push creates new remote head c922c0139ca0 with bookmark 'Y'!
749 749 (merge or see 'hg help push' for details about pushing new heads)
750 750 [255]
751 751 $ hg -R ../a book
752 752 @ 1:0d2164f0ce0d
753 753 * X 1:0d2164f0ce0d
754 754 Y 3:f6fc62dde3c0
755 755 Z 1:0d2164f0ce0d
756 756
757 757 Update to a successor works
758 758
759 759 $ hg id --debug -r 3
760 760 f6fc62dde3c0771e29704af56ba4d8af77abcc2f
761 761 $ hg id --debug -r 4
762 762 4efff6d98829d9c824c621afd6e3f01865f5439f
763 763 $ hg id --debug -r 5
764 764 c922c0139ca03858f655e4a2af4dd02796a63969 tip Y
765 765 $ hg debugobsolete f6fc62dde3c0771e29704af56ba4d8af77abcc2f cccccccccccccccccccccccccccccccccccccccc
766 766 obsoleted 1 changesets
767 767 $ hg debugobsolete cccccccccccccccccccccccccccccccccccccccc 4efff6d98829d9c824c621afd6e3f01865f5439f
768 768 $ hg push http://localhost:$HGPORT2/
769 769 pushing to http://localhost:$HGPORT2/
770 770 searching for changes
771 771 remote: adding changesets
772 772 remote: adding manifests
773 773 remote: adding file changes
774 774 remote: added 2 changesets with 2 changes to 1 files (+1 heads)
775 775 remote: 2 new obsolescence markers
776 776 remote: obsoleted 1 changesets
777 777 updating bookmark Y
778 778 $ hg -R ../a book
779 779 @ 1:0d2164f0ce0d
780 780 * X 1:0d2164f0ce0d
781 781 Y 5:c922c0139ca0
782 782 Z 1:0d2164f0ce0d
783 783
784 784 hgweb
785 785
786 786 $ cat <<EOF > .hg/hgrc
787 787 > [web]
788 788 > push_ssl = false
789 789 > allow_push = *
790 790 > EOF
791 791
792 792 $ hg serve -p $HGPORT -d --pid-file=../hg.pid -E errors.log
793 793 $ cat ../hg.pid >> $DAEMON_PIDS
794 794 $ cd ../a
795 795
796 796 $ hg debugpushkey http://localhost:$HGPORT/ namespaces
797 797 bookmarks
798 798 namespaces
799 799 obsolete
800 800 phases
801 801 $ hg debugpushkey http://localhost:$HGPORT/ bookmarks
802 802 @ 9b140be1080824d768c5a4691a564088eede71f9
803 803 X 9b140be1080824d768c5a4691a564088eede71f9
804 804 Y c922c0139ca03858f655e4a2af4dd02796a63969
805 805 Z 9b140be1080824d768c5a4691a564088eede71f9
806 806 foo 0000000000000000000000000000000000000000
807 807 foobar 9b140be1080824d768c5a4691a564088eede71f9
808 808 $ hg out -B http://localhost:$HGPORT/
809 809 comparing with http://localhost:$HGPORT/
810 810 searching for changed bookmarks
811 811 @ 0d2164f0ce0d
812 812 X 0d2164f0ce0d
813 813 Z 0d2164f0ce0d
814 814 foo
815 815 foobar
816 816 $ hg push -B Z http://localhost:$HGPORT/
817 817 pushing to http://localhost:$HGPORT/
818 818 searching for changes
819 819 no changes found
820 820 updating bookmark Z
821 821 [1]
822 822 $ hg book -d Z
823 823 $ hg in -B http://localhost:$HGPORT/
824 824 comparing with http://localhost:$HGPORT/
825 825 searching for changed bookmarks
826 826 @ 9b140be10808
827 827 X 9b140be10808
828 828 Z 0d2164f0ce0d
829 829 foo 000000000000
830 830 foobar 9b140be10808
831 831 $ hg pull -B Z http://localhost:$HGPORT/
832 832 pulling from http://localhost:$HGPORT/
833 833 no changes found
834 834 divergent bookmark @ stored as @1
835 835 divergent bookmark X stored as X@1
836 836 adding remote bookmark Z
837 837 adding remote bookmark foo
838 838 adding remote bookmark foobar
839 839 $ hg clone http://localhost:$HGPORT/ cloned-bookmarks
840 840 requesting all changes
841 841 adding changesets
842 842 adding manifests
843 843 adding file changes
844 844 added 5 changesets with 5 changes to 3 files (+2 heads)
845 845 2 new obsolescence markers
846 846 new changesets 4e3505fd9583:c922c0139ca0 (5 drafts)
847 847 updating to bookmark @
848 848 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
849 849 $ hg -R cloned-bookmarks bookmarks
850 850 * @ 1:9b140be10808
851 851 X 1:9b140be10808
852 852 Y 4:c922c0139ca0
853 853 Z 2:0d2164f0ce0d
854 854 foo -1:000000000000
855 855 foobar 1:9b140be10808
856 856
857 857 $ cd ..
858 858
859 859 Test to show result of bookmarks comparison
860 860
861 861 $ mkdir bmcomparison
862 862 $ cd bmcomparison
863 863
864 864 $ hg init source
865 865 $ hg -R source debugbuilddag '+2*2*3*4'
866 866 $ hg -R source log -G --template '{rev}:{node|short}'
867 867 o 4:e7bd5218ca15
868 868 |
869 869 | o 3:6100d3090acf
870 870 |/
871 871 | o 2:fa942426a6fd
872 872 |/
873 873 | o 1:66f7d451a68b
874 874 |/
875 875 o 0:1ea73414a91b
876 876
877 877 $ hg -R source bookmarks -r 0 SAME
878 878 $ hg -R source bookmarks -r 0 ADV_ON_REPO1
879 879 $ hg -R source bookmarks -r 0 ADV_ON_REPO2
880 880 $ hg -R source bookmarks -r 0 DIFF_ADV_ON_REPO1
881 881 $ hg -R source bookmarks -r 0 DIFF_ADV_ON_REPO2
882 882 $ hg -R source bookmarks -r 1 DIVERGED
883 883
884 884 $ hg clone -U source repo1
885 885
886 886 (test that incoming/outgoing exit with 1, if there is no bookmark to
887 887 be exchanged)
888 888
889 889 $ hg -R repo1 incoming -B
890 890 comparing with $TESTTMP/bmcomparison/source
891 891 searching for changed bookmarks
892 892 no changed bookmarks found
893 893 [1]
894 894 $ hg -R repo1 outgoing -B
895 895 comparing with $TESTTMP/bmcomparison/source
896 896 searching for changed bookmarks
897 897 no changed bookmarks found
898 898 [1]
899 899
900 900 $ hg -R repo1 bookmarks -f -r 1 ADD_ON_REPO1
901 901 $ hg -R repo1 bookmarks -f -r 2 ADV_ON_REPO1
902 902 $ hg -R repo1 bookmarks -f -r 3 DIFF_ADV_ON_REPO1
903 903 $ hg -R repo1 bookmarks -f -r 3 DIFF_DIVERGED
904 904 $ hg -R repo1 -q --config extensions.mq= strip 4
905 905 $ hg -R repo1 log -G --template '{node|short} ({bookmarks})'
906 906 o 6100d3090acf (DIFF_ADV_ON_REPO1 DIFF_DIVERGED)
907 907 |
908 908 | o fa942426a6fd (ADV_ON_REPO1)
909 909 |/
910 910 | o 66f7d451a68b (ADD_ON_REPO1 DIVERGED)
911 911 |/
912 912 o 1ea73414a91b (ADV_ON_REPO2 DIFF_ADV_ON_REPO2 SAME)
913 913
914 914
915 915 $ hg clone -U source repo2
916 916 $ hg -R repo2 bookmarks -f -r 1 ADD_ON_REPO2
917 917 $ hg -R repo2 bookmarks -f -r 1 ADV_ON_REPO2
918 918 $ hg -R repo2 bookmarks -f -r 2 DIVERGED
919 919 $ hg -R repo2 bookmarks -f -r 4 DIFF_ADV_ON_REPO2
920 920 $ hg -R repo2 bookmarks -f -r 4 DIFF_DIVERGED
921 921 $ hg -R repo2 -q --config extensions.mq= strip 3
922 922 $ hg -R repo2 log -G --template '{node|short} ({bookmarks})'
923 923 o e7bd5218ca15 (DIFF_ADV_ON_REPO2 DIFF_DIVERGED)
924 924 |
925 925 | o fa942426a6fd (DIVERGED)
926 926 |/
927 927 | o 66f7d451a68b (ADD_ON_REPO2 ADV_ON_REPO2)
928 928 |/
929 929 o 1ea73414a91b (ADV_ON_REPO1 DIFF_ADV_ON_REPO1 SAME)
930 930
931 931
932 932 (test that difference of bookmarks between repositories are fully shown)
933 933
934 934 $ hg -R repo1 incoming -B repo2 -v
935 935 comparing with repo2
936 936 searching for changed bookmarks
937 937 ADD_ON_REPO2 66f7d451a68b added
938 938 ADV_ON_REPO2 66f7d451a68b advanced
939 939 DIFF_ADV_ON_REPO2 e7bd5218ca15 changed
940 940 DIFF_DIVERGED e7bd5218ca15 changed
941 941 DIVERGED fa942426a6fd diverged
942 942 $ hg -R repo1 outgoing -B repo2 -v
943 943 comparing with repo2
944 944 searching for changed bookmarks
945 945 ADD_ON_REPO1 66f7d451a68b added
946 946 ADD_ON_REPO2 deleted
947 947 ADV_ON_REPO1 fa942426a6fd advanced
948 948 DIFF_ADV_ON_REPO1 6100d3090acf advanced
949 949 DIFF_ADV_ON_REPO2 1ea73414a91b changed
950 950 DIFF_DIVERGED 6100d3090acf changed
951 951 DIVERGED 66f7d451a68b diverged
952 952
953 953 $ hg -R repo2 incoming -B repo1 -v
954 954 comparing with repo1
955 955 searching for changed bookmarks
956 956 ADD_ON_REPO1 66f7d451a68b added
957 957 ADV_ON_REPO1 fa942426a6fd advanced
958 958 DIFF_ADV_ON_REPO1 6100d3090acf changed
959 959 DIFF_DIVERGED 6100d3090acf changed
960 960 DIVERGED 66f7d451a68b diverged
961 961 $ hg -R repo2 outgoing -B repo1 -v
962 962 comparing with repo1
963 963 searching for changed bookmarks
964 964 ADD_ON_REPO1 deleted
965 965 ADD_ON_REPO2 66f7d451a68b added
966 966 ADV_ON_REPO2 66f7d451a68b advanced
967 967 DIFF_ADV_ON_REPO1 1ea73414a91b changed
968 968 DIFF_ADV_ON_REPO2 e7bd5218ca15 advanced
969 969 DIFF_DIVERGED e7bd5218ca15 changed
970 970 DIVERGED fa942426a6fd diverged
971 971
972 972 $ cd ..
973 973
974 974 Pushing a bookmark should only push the changes required by that
975 975 bookmark, not all outgoing changes:
976 976 $ hg clone http://localhost:$HGPORT/ addmarks
977 977 requesting all changes
978 978 adding changesets
979 979 adding manifests
980 980 adding file changes
981 981 added 5 changesets with 5 changes to 3 files (+2 heads)
982 982 2 new obsolescence markers
983 983 new changesets 4e3505fd9583:c922c0139ca0 (5 drafts)
984 984 updating to bookmark @
985 985 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
986 986 $ cd addmarks
987 987 $ echo foo > foo
988 988 $ hg add foo
989 989 $ hg commit -m 'add foo'
990 990 $ echo bar > bar
991 991 $ hg add bar
992 992 $ hg commit -m 'add bar'
993 993 $ hg co "tip^"
994 994 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
995 995 (leaving bookmark @)
996 996 $ hg book add-foo
997 997 $ hg book -r tip add-bar
998 998 Note: this push *must* push only a single changeset, as that's the point
999 999 of this test.
1000 1000 $ hg push -B add-foo --traceback
1001 1001 pushing to http://localhost:$HGPORT/
1002 1002 searching for changes
1003 1003 remote: adding changesets
1004 1004 remote: adding manifests
1005 1005 remote: adding file changes
1006 1006 remote: added 1 changesets with 1 changes to 1 files
1007 1007 exporting bookmark add-foo
1008 1008
1009 1009 pushing a new bookmark on a new head does not require -f if -B is specified
1010 1010
1011 1011 $ hg up -q X
1012 1012 $ hg book W
1013 1013 $ echo c5 > f2
1014 1014 $ hg ci -Am5
1015 1015 created new head
1016 1016 $ hg push -B .
1017 1017 pushing to http://localhost:$HGPORT/
1018 1018 searching for changes
1019 1019 remote: adding changesets
1020 1020 remote: adding manifests
1021 1021 remote: adding file changes
1022 1022 remote: added 1 changesets with 1 changes to 1 files (+1 heads)
1023 1023 exporting bookmark W
1024 1024 $ hg -R ../b id -r W
1025 1025 cc978a373a53 tip W
1026 1026
1027 1027 pushing an existing but divergent bookmark with -B still requires -f
1028 1028
1029 1029 $ hg clone -q . ../r
1030 1030 $ hg up -q X
1031 1031 $ echo 1 > f2
1032 1032 $ hg ci -qAml
1033 1033
1034 1034 $ cd ../r
1035 1035 $ hg up -q X
1036 1036 $ echo 2 > f2
1037 1037 $ hg ci -qAmr
1038 1038 $ hg push -B X
1039 1039 pushing to $TESTTMP/addmarks
1040 1040 searching for changes
1041 1041 remote has heads on branch 'default' that are not known locally: a2a606d9ff1b
1042 1042 abort: push creates new remote head 54694f811df9 with bookmark 'X'!
1043 1043 (pull and merge or see 'hg help push' for details about pushing new heads)
1044 1044 [255]
1045 1045 $ cd ../addmarks
1046 1046
1047 1047 Check summary output for incoming/outgoing bookmarks
1048 1048
1049 1049 $ hg bookmarks -d X
1050 1050 $ hg bookmarks -d Y
1051 1051 $ hg summary --remote | grep '^remote:'
1052 1052 remote: *, 2 incoming bookmarks, 1 outgoing bookmarks (glob)
1053 1053
1054 1054 $ cd ..
1055 1055
1056 1056 pushing an unchanged bookmark should result in no changes
1057 1057
1058 1058 $ hg init unchanged-a
1059 1059 $ hg init unchanged-b
1060 1060 $ cd unchanged-a
1061 1061 $ echo initial > foo
1062 1062 $ hg commit -A -m initial
1063 1063 adding foo
1064 1064 $ hg bookmark @
1065 1065 $ hg push -B @ ../unchanged-b
1066 1066 pushing to ../unchanged-b
1067 1067 searching for changes
1068 1068 adding changesets
1069 1069 adding manifests
1070 1070 adding file changes
1071 1071 added 1 changesets with 1 changes to 1 files
1072 1072 exporting bookmark @
1073 1073
1074 1074 $ hg push -B @ ../unchanged-b
1075 1075 pushing to ../unchanged-b
1076 1076 searching for changes
1077 1077 no changes found
1078 1078 [1]
1079 1079
1080 1080 Pushing a really long bookmark should work fine (issue5165)
1081 1081 ===============================================
1082 1082
1083 1083 #if b2-binary
1084 1084 >>> with open('longname', 'w') as f:
1085 1085 ... f.write('wat' * 100) and None
1086 1086 $ hg book `cat longname`
1087 1087 $ hg push -B `cat longname` ../unchanged-b
1088 1088 pushing to ../unchanged-b
1089 1089 searching for changes
1090 1090 no changes found
1091 1091 exporting bookmark (wat){100} (re)
1092 1092 [1]
1093 1093 $ hg -R ../unchanged-b book --delete `cat longname`
1094 1094
1095 1095 Test again but forcing bundle2 exchange to make sure that doesn't regress.
1096 1096
1097 1097 $ hg push -B `cat longname` ../unchanged-b --config devel.legacy.exchange=bundle1
1098 1098 pushing to ../unchanged-b
1099 1099 searching for changes
1100 1100 no changes found
1101 1101 exporting bookmark (wat){100} (re)
1102 1102 [1]
1103 1103 $ hg -R ../unchanged-b book --delete `cat longname`
1104 1104 $ hg book --delete `cat longname`
1105 1105 $ hg co @
1106 1106 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1107 1107 (activating bookmark @)
1108 1108 #endif
1109 1109
1110 1110 Check hook preventing push (issue4455)
1111 1111 ======================================
1112 1112
1113 1113 $ hg bookmarks
1114 1114 * @ 0:55482a6fb4b1
1115 1115 $ hg log -G
1116 1116 @ 0:55482a6fb4b1 initial
1117 1117
1118 1118 $ hg init ../issue4455-dest
1119 1119 $ hg push ../issue4455-dest # changesets only
1120 1120 pushing to ../issue4455-dest
1121 1121 searching for changes
1122 1122 adding changesets
1123 1123 adding manifests
1124 1124 adding file changes
1125 1125 added 1 changesets with 1 changes to 1 files
1126 1126 $ cat >> .hg/hgrc << EOF
1127 1127 > [paths]
1128 1128 > local=../issue4455-dest/
1129 1129 > ssh=ssh://user@dummy/issue4455-dest
1130 1130 > http=http://localhost:$HGPORT/
1131 1131 > [ui]
1132 1132 > ssh="$PYTHON" "$TESTDIR/dummyssh"
1133 1133 > EOF
1134 1134 $ cat >> ../issue4455-dest/.hg/hgrc << EOF
1135 1135 > [hooks]
1136 1136 > prepushkey=false
1137 1137 > [web]
1138 1138 > push_ssl = false
1139 1139 > allow_push = *
1140 1140 > EOF
1141 1141 $ killdaemons.py
1142 1142 $ hg serve -R ../issue4455-dest -p $HGPORT -d --pid-file=../issue4455.pid -E ../issue4455-error.log
1143 1143 $ cat ../issue4455.pid >> $DAEMON_PIDS
1144 1144
1145 1145 Local push
1146 1146 ----------
1147 1147
1148 1148 #if b2-pushkey
1149 1149
1150 1150 $ hg push -B @ local
1151 1151 pushing to $TESTTMP/issue4455-dest
1152 1152 searching for changes
1153 1153 no changes found
1154 1154 pushkey-abort: prepushkey hook exited with status 1
1155 1155 abort: exporting bookmark @ failed!
1156 1156 [255]
1157 1157
1158 1158 #endif
1159 1159 #if b2-binary
1160 1160
1161 1161 $ hg push -B @ local
1162 1162 pushing to $TESTTMP/issue4455-dest
1163 1163 searching for changes
1164 1164 no changes found
1165 1165 abort: prepushkey hook exited with status 1
1166 1166 [255]
1167 1167
1168 1168 #endif
1169 1169
1170 1170 $ hg -R ../issue4455-dest/ bookmarks
1171 1171 no bookmarks set
1172 1172
1173 1173 Using ssh
1174 1174 ---------
1175 1175
1176 1176 #if b2-pushkey
1177 1177
1178 1178 $ hg push -B @ ssh # bundle2+
1179 1179 pushing to ssh://user@dummy/issue4455-dest
1180 1180 searching for changes
1181 1181 no changes found
1182 1182 remote: pushkey-abort: prepushkey hook exited with status 1
1183 1183 abort: exporting bookmark @ failed!
1184 1184 [255]
1185 1185
1186 1186 $ hg -R ../issue4455-dest/ bookmarks
1187 1187 no bookmarks set
1188 1188
1189 1189 $ hg push -B @ ssh --config devel.legacy.exchange=bundle1
1190 1190 pushing to ssh://user@dummy/issue4455-dest
1191 1191 searching for changes
1192 1192 no changes found
1193 1193 remote: pushkey-abort: prepushkey hook exited with status 1
1194 1194 exporting bookmark @ failed!
1195 1195 [1]
1196 1196
1197 1197 #endif
1198 1198 #if b2-binary
1199 1199
1200 1200 $ hg push -B @ ssh # bundle2+
1201 1201 pushing to ssh://user@dummy/issue4455-dest
1202 1202 searching for changes
1203 1203 no changes found
1204 1204 remote: prepushkey hook exited with status 1
1205 1205 abort: push failed on remote
1206 1206 [255]
1207 1207
1208 1208 #endif
1209 1209
1210 1210 $ hg -R ../issue4455-dest/ bookmarks
1211 1211 no bookmarks set
1212 1212
1213 1213 Using http
1214 1214 ----------
1215 1215
1216 1216 #if b2-pushkey
1217 1217 $ hg push -B @ http # bundle2+
1218 1218 pushing to http://localhost:$HGPORT/
1219 1219 searching for changes
1220 1220 no changes found
1221 1221 remote: pushkey-abort: prepushkey hook exited with status 1
1222 1222 abort: exporting bookmark @ failed!
1223 1223 [255]
1224 1224
1225 1225 $ hg -R ../issue4455-dest/ bookmarks
1226 1226 no bookmarks set
1227 1227
1228 1228 $ hg push -B @ http --config devel.legacy.exchange=bundle1
1229 1229 pushing to http://localhost:$HGPORT/
1230 1230 searching for changes
1231 1231 no changes found
1232 1232 remote: pushkey-abort: prepushkey hook exited with status 1
1233 1233 exporting bookmark @ failed!
1234 1234 [1]
1235 1235
1236 1236 #endif
1237 1237
1238 1238 #if b2-binary
1239 1239
1240 1240 $ hg push -B @ ssh # bundle2+
1241 1241 pushing to ssh://user@dummy/issue4455-dest
1242 1242 searching for changes
1243 1243 no changes found
1244 1244 remote: prepushkey hook exited with status 1
1245 1245 abort: push failed on remote
1246 1246 [255]
1247 1247
1248 1248 #endif
1249 1249
1250 1250 $ hg -R ../issue4455-dest/ bookmarks
1251 1251 no bookmarks set
1252 1252
1253 1253 $ cd ..
1254 1254
1255 1255 Test that pre-pushkey compat for bookmark works as expected (issue5777)
1256 1256
1257 1257 $ cat << EOF >> $HGRCPATH
1258 1258 > [ui]
1259 1259 > ssh="$PYTHON" "$TESTDIR/dummyssh"
1260 1260 > [server]
1261 1261 > bookmarks-pushkey-compat = yes
1262 1262 > EOF
1263 1263
1264 1264 $ hg init server
1265 1265 $ echo foo > server/a
1266 1266 $ hg -R server book foo
1267 1267 $ hg -R server commit -Am a
1268 1268 adding a
1269 1269 $ hg clone ssh://user@dummy/server client
1270 1270 requesting all changes
1271 1271 adding changesets
1272 1272 adding manifests
1273 1273 adding file changes
1274 1274 added 1 changesets with 1 changes to 1 files
1275 1275 new changesets 79513d0d7716 (1 drafts)
1276 1276 updating to branch default
1277 1277 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1278 1278
1279 1279 Forbid bookmark move on the server
1280 1280
1281 1281 $ cat << EOF >> $TESTTMP/no-bm-move.sh
1282 1282 > #!/bin/sh
1283 1283 > echo \$HG_NAMESPACE | grep -v bookmarks
1284 1284 > EOF
1285 1285 $ cat << EOF >> server/.hg/hgrc
1286 1286 > [hooks]
1287 1287 > prepushkey.no-bm-move= sh $TESTTMP/no-bm-move.sh
1288 1288 > EOF
1289 1289
1290 1290 pushing changeset is okay
1291 1291
1292 1292 $ echo bar >> client/a
1293 1293 $ hg -R client commit -m b
1294 1294 $ hg -R client push
1295 1295 pushing to ssh://user@dummy/server
1296 1296 searching for changes
1297 1297 remote: adding changesets
1298 1298 remote: adding manifests
1299 1299 remote: adding file changes
1300 1300 remote: added 1 changesets with 1 changes to 1 files
1301 1301
1302 1302 attempt to move the bookmark is rejected
1303 1303
1304 1304 $ hg -R client book foo -r .
1305 1305 moving bookmark 'foo' forward from 79513d0d7716
1306 1306
1307 1307 #if b2-pushkey
1308 1308 $ hg -R client push
1309 1309 pushing to ssh://user@dummy/server
1310 1310 searching for changes
1311 1311 no changes found
1312 1312 remote: pushkey-abort: prepushkey.no-bm-move hook exited with status 1
1313 1313 abort: updating bookmark foo failed!
1314 1314 [255]
1315 1315 #endif
1316 1316 #if b2-binary
1317 1317 $ hg -R client push
1318 1318 pushing to ssh://user@dummy/server
1319 1319 searching for changes
1320 1320 no changes found
1321 1321 remote: prepushkey.no-bm-move hook exited with status 1
1322 1322 abort: push failed on remote
1323 1323 [255]
1324 1324 #endif
1325
1326 -- test for pushing bookmarks pointing to secret changesets
1327
1328 Set up a "remote" repo
1329 $ hg init issue6159remote
1330 $ cd issue6159remote
1331 $ echo a > a
1332 $ hg add a
1333 $ hg commit -m_
1334 $ hg bookmark foo
1335 $ cd ..
1336
1337 Clone a local repo
1338 $ hg clone -q issue6159remote issue6159local
1339 $ cd issue6159local
1340 $ hg up -qr foo
1341 $ echo b > b
1342
1343 Move the bookmark "foo" to point at a secret changeset
1344 $ hg commit -qAm_ --config phases.new-commit=secret
1345
1346 Pushing the bookmark "foo" now fails as it contains a secret changeset
1347 #if b2-pushkey
1348 $ hg push -r foo
1349 pushing to $TESTTMP/issue6159remote
1350 searching for changes
1351 no changes found (ignored 1 secret changesets)
1352 abort: updating bookmark foo failed!
1353 [255]
1354 #endif
1355
1356 #if b2-binary
1357 $ hg push -r foo
1358 pushing to $TESTTMP/issue6159remote
1359 searching for changes
1360 no changes found (ignored 1 secret changesets)
1361 updating bookmark foo
1362 [1]
1363 #endif
1364
1365 Now the "remote" repo contains a bookmark pointing to a nonexistent revision
1366 $ cd ../issue6159remote
1367 #if b2-pushkey
1368 $ hg bookmark
1369 * foo 0:1599bc8b897a
1370 $ hg log -r 1599bc8b897a
1371 0:1599bc8b897a _ (no-eol)
1372 #endif
1373
1374 #if b2-binary
1375 $ hg bookmark
1376 no bookmarks set
1377 $ cat .hg/bookmarks
1378 cf489fd8a374cab73c2dc19e899bde6fe3a43f8f foo
1379 $ hg log -r cf489fd8a374
1380 abort: unknown revision 'cf489fd8a374'!
1381 [255]
1382 #endif
General Comments 0
You need to be logged in to leave comments. Login now