##// END OF EJS Templates
py3: glob some difference between py2 and py3 output...
Pulkit Goyal -
r40255:7ba6b880 default
parent child Browse files
Show More
@@ -1,600 +1,601 b''
1 1 test-abort-checkin.t
2 2 test-absorb-filefixupstate.py
3 3 test-absorb-phase.t
4 4 test-absorb-rename.t
5 5 test-absorb-strip.t
6 6 test-absorb.t
7 7 test-add.t
8 8 test-addremove-similar.t
9 9 test-addremove.t
10 10 test-alias.t
11 11 test-amend-subrepo.t
12 12 test-amend.t
13 13 test-ancestor.py
14 14 test-annotate.py
15 15 test-annotate.t
16 16 test-archive-symlinks.t
17 17 test-atomictempfile.py
18 18 test-audit-path.t
19 19 test-audit-subrepo.t
20 20 test-automv.t
21 21 test-backout.t
22 22 test-backwards-remove.t
23 23 test-bad-pull.t
24 24 test-basic.t
25 25 test-bdiff.py
26 26 test-bheads.t
27 27 test-bisect.t
28 28 test-bisect2.t
29 29 test-bisect3.t
30 30 test-blackbox.t
31 31 test-bookmarks-current.t
32 32 test-bookmarks-merge.t
33 33 test-bookmarks-pushpull.t
34 34 test-bookmarks-rebase.t
35 35 test-bookmarks-strip.t
36 36 test-bookmarks.t
37 37 test-branch-change.t
38 38 test-branch-option.t
39 39 test-branch-tag-confict.t
40 40 test-branches.t
41 41 test-bundle-phases.t
42 42 test-bundle-r.t
43 43 test-bundle-type.t
44 44 test-bundle-vs-outgoing.t
45 45 test-bundle.t
46 46 test-bundle2-exchange.t
47 47 test-bundle2-format.t
48 48 test-bundle2-multiple-changegroups.t
49 49 test-bundle2-pushback.t
50 50 test-bundle2-remote-changegroup.t
51 51 test-cappedreader.py
52 52 test-casecollision.t
53 53 test-cat.t
54 54 test-cbor.py
55 55 test-censor.t
56 56 test-changelog-exec.t
57 57 test-check-code.t
58 58 test-check-commit.t
59 59 test-check-execute.t
60 60 test-check-interfaces.py
61 61 test-check-module-imports.t
62 62 test-check-py3-compat.t
63 63 test-check-pyflakes.t
64 64 test-check-pylint.t
65 65 test-check-shbang.t
66 66 test-children.t
67 67 test-clone-cgi.t
68 68 test-clone-pull-corruption.t
69 69 test-clone-r.t
70 70 test-clone-uncompressed.t
71 71 test-clone-update-order.t
72 test-clone.t
72 73 test-clonebundles.t
73 74 test-commit-amend.t
74 75 test-commit-interactive.t
75 76 test-commit-multiple.t
76 77 test-commit-unresolved.t
77 78 test-commit.t
78 79 test-committer.t
79 80 test-completion.t
80 81 test-config-env.py
81 82 test-config.t
82 83 test-conflict.t
83 84 test-confused-revert.t
84 85 test-context.py
85 86 test-contrib-check-code.t
86 87 test-contrib-check-commit.t
87 88 test-contrib-dumprevlog.t
88 89 test-contrib-perf.t
89 90 test-contrib-testparseutil.t
90 91 test-convert-authormap.t
91 92 test-convert-clonebranches.t
92 93 test-convert-cvs-branch.t
93 94 test-convert-cvs-detectmerge.t
94 95 test-convert-cvs-synthetic.t
95 96 test-convert-cvs.t
96 97 test-convert-cvsnt-mergepoints.t
97 98 test-convert-datesort.t
98 99 test-convert-filemap.t
99 100 test-convert-hg-sink.t
100 101 test-convert-hg-source.t
101 102 test-convert-hg-startrev.t
102 103 test-convert-splicemap.t
103 104 test-convert-tagsbranch-topology.t
104 105 test-copy-move-merge.t
105 106 test-copy.t
106 107 test-copytrace-heuristics.t
107 108 test-debugbuilddag.t
108 109 test-debugbundle.t
109 110 test-debugcommands.t
110 111 test-debugextensions.t
111 112 test-debugindexdot.t
112 113 test-debugrename.t
113 114 test-default-push.t
114 115 test-diff-antipatience.t
115 116 test-diff-binary-file.t
116 117 test-diff-change.t
117 118 test-diff-copy-depth.t
118 119 test-diff-hashes.t
119 120 test-diff-ignore-whitespace.t
120 121 test-diff-indent-heuristic.t
121 122 test-diff-issue2761.t
122 123 test-diff-newlines.t
123 124 test-diff-reverse.t
124 125 test-diff-subdir.t
125 126 test-diff-unified.t
126 127 test-diff-upgrade.t
127 128 test-diffdir.t
128 129 test-diffstat.t
129 130 test-directaccess.t
130 131 test-dirstate-backup.t
131 132 test-dirstate-nonnormalset.t
132 133 test-dirstate.t
133 134 test-dispatch.py
134 135 test-doctest.py
135 136 test-double-merge.t
136 137 test-drawdag.t
137 138 test-duplicateoptions.py
138 139 test-editor-filename.t
139 140 test-empty-dir.t
140 141 test-empty-file.t
141 142 test-empty-group.t
142 143 test-empty.t
143 144 test-encode.t
144 145 test-encoding-func.py
145 146 test-encoding.t
146 147 test-eol-add.t
147 148 test-eol-clone.t
148 149 test-eol-hook.t
149 150 test-eol-patch.t
150 151 test-eol-tag.t
151 152 test-eol-update.t
152 153 test-eol.t
153 154 test-eolfilename.t
154 155 test-excessive-merge.t
155 156 test-exchange-obsmarkers-case-A1.t
156 157 test-exchange-obsmarkers-case-A2.t
157 158 test-exchange-obsmarkers-case-A3.t
158 159 test-exchange-obsmarkers-case-A4.t
159 160 test-exchange-obsmarkers-case-A5.t
160 161 test-exchange-obsmarkers-case-A6.t
161 162 test-exchange-obsmarkers-case-A7.t
162 163 test-exchange-obsmarkers-case-B1.t
163 164 test-exchange-obsmarkers-case-B2.t
164 165 test-exchange-obsmarkers-case-B3.t
165 166 test-exchange-obsmarkers-case-B4.t
166 167 test-exchange-obsmarkers-case-B5.t
167 168 test-exchange-obsmarkers-case-B6.t
168 169 test-exchange-obsmarkers-case-B7.t
169 170 test-exchange-obsmarkers-case-C1.t
170 171 test-exchange-obsmarkers-case-C2.t
171 172 test-exchange-obsmarkers-case-C3.t
172 173 test-exchange-obsmarkers-case-C4.t
173 174 test-exchange-obsmarkers-case-D1.t
174 175 test-exchange-obsmarkers-case-D2.t
175 176 test-exchange-obsmarkers-case-D3.t
176 177 test-exchange-obsmarkers-case-D4.t
177 178 test-execute-bit.t
178 179 test-export.t
179 180 test-extdata.t
180 181 test-extdiff.t
181 182 test-extensions-afterloaded.t
182 183 test-extensions-wrapfunction.py
183 184 test-extra-filelog-entry.t
184 185 test-fetch.t
185 186 test-filebranch.t
186 187 test-filecache.py
187 188 test-filelog.py
188 189 test-fileset-generated.t
189 190 test-fileset.t
190 191 test-fix-topology.t
191 192 test-flags.t
192 193 test-generaldelta.t
193 194 test-getbundle.t
194 195 test-git-export.t
195 196 test-glog-beautifygraph.t
196 197 test-glog-topological.t
197 198 test-glog.t
198 199 test-gpg.t
199 200 test-graft.t
200 201 test-grep.t
201 202 test-hg-parseurl.py
202 203 test-hghave.t
203 204 test-hgignore.t
204 205 test-hgk.t
205 206 test-hgrc.t
206 207 test-hgweb-annotate-whitespace.t
207 208 test-hgweb-bundle.t
208 209 test-hgweb-csp.t
209 210 test-hgweb-descend-empties.t
210 211 test-hgweb-diffs.t
211 212 test-hgweb-empty.t
212 213 test-hgweb-filelog.t
213 214 test-hgweb-non-interactive.t
214 215 test-hgweb-raw.t
215 216 test-hgweb-removed.t
216 217 test-hgweb.t
217 218 test-hgwebdir-paths.py
218 219 test-hgwebdirsym.t
219 220 test-histedit-arguments.t
220 221 test-histedit-base.t
221 222 test-histedit-bookmark-motion.t
222 223 test-histedit-commute.t
223 224 test-histedit-drop.t
224 225 test-histedit-edit.t
225 226 test-histedit-fold-non-commute.t
226 227 test-histedit-fold.t
227 228 test-histedit-no-backup.t
228 229 test-histedit-no-change.t
229 230 test-histedit-non-commute-abort.t
230 231 test-histedit-non-commute.t
231 232 test-histedit-obsolete.t
232 233 test-histedit-outgoing.t
233 234 test-histedit-templates.t
234 235 test-http-branchmap.t
235 236 test-http-bundle1.t
236 237 test-http-clone-r.t
237 238 test-http-permissions.t
238 239 test-http.t
239 240 test-hybridencode.py
240 241 test-i18n.t
241 242 test-identify.t
242 243 test-impexp-branch.t
243 244 test-import-bypass.t
244 245 test-import-eol.t
245 246 test-import-merge.t
246 247 test-import-unknown.t
247 248 test-import.t
248 249 test-imports-checker.t
249 250 test-incoming-outgoing.t
250 251 test-inherit-mode.t
251 252 test-init.t
252 253 test-issue1089.t
253 254 test-issue1102.t
254 255 test-issue1175.t
255 256 test-issue1306.t
256 257 test-issue1438.t
257 258 test-issue1502.t
258 259 test-issue1802.t
259 260 test-issue1877.t
260 261 test-issue1993.t
261 262 test-issue2137.t
262 263 test-issue3084.t
263 264 test-issue4074.t
264 265 test-issue522.t
265 266 test-issue586.t
266 267 test-issue5979.t
267 268 test-issue612.t
268 269 test-issue619.t
269 270 test-issue660.t
270 271 test-issue672.t
271 272 test-issue842.t
272 273 test-journal-exists.t
273 274 test-journal-share.t
274 275 test-journal.t
275 276 test-known.t
276 277 test-largefiles-cache.t
277 278 test-largefiles-misc.t
278 279 test-largefiles-small-disk.t
279 280 test-largefiles-update.t
280 281 test-largefiles.t
281 282 test-lfs-largefiles.t
282 283 test-lfs-pointer.py
283 284 test-linelog.py
284 285 test-linerange.py
285 286 test-locate.t
286 287 test-lock-badness.t
287 288 test-log-linerange.t
288 289 test-log.t
289 290 test-logexchange.t
290 291 test-lrucachedict.py
291 292 test-mactext.t
292 293 test-mailmap.t
293 294 test-manifest-merging.t
294 295 test-manifest.py
295 296 test-manifest.t
296 297 test-match.py
297 298 test-mdiff.py
298 299 test-merge-changedelete.t
299 300 test-merge-closedheads.t
300 301 test-merge-commit.t
301 302 test-merge-criss-cross.t
302 303 test-merge-default.t
303 304 test-merge-force.t
304 305 test-merge-halt.t
305 306 test-merge-internal-tools-pattern.t
306 307 test-merge-local.t
307 308 test-merge-no-file-change.t
308 309 test-merge-remove.t
309 310 test-merge-revert.t
310 311 test-merge-revert2.t
311 312 test-merge-subrepos.t
312 313 test-merge-symlinks.t
313 314 test-merge-tools.t
314 315 test-merge-types.t
315 316 test-merge1.t
316 317 test-merge10.t
317 318 test-merge2.t
318 319 test-merge4.t
319 320 test-merge5.t
320 321 test-merge6.t
321 322 test-merge7.t
322 323 test-merge8.t
323 324 test-merge9.t
324 325 test-minifileset.py
325 326 test-minirst.py
326 327 test-mq-git.t
327 328 test-mq-guards.t
328 329 test-mq-header-date.t
329 330 test-mq-header-from.t
330 331 test-mq-merge.t
331 332 test-mq-pull-from-bundle.t
332 333 test-mq-qclone-http.t
333 334 test-mq-qdelete.t
334 335 test-mq-qdiff.t
335 336 test-mq-qfold.t
336 337 test-mq-qgoto.t
337 338 test-mq-qimport-fail-cleanup.t
338 339 test-mq-qnew.t
339 340 test-mq-qpush-exact.t
340 341 test-mq-qpush-fail.t
341 342 test-mq-qqueue.t
342 343 test-mq-qrefresh-interactive.t
343 344 test-mq-qrefresh-replace-log-message.t
344 345 test-mq-qrefresh.t
345 346 test-mq-qrename.t
346 347 test-mq-qsave.t
347 348 test-mq-safety.t
348 349 test-mq-subrepo.t
349 350 test-mq-symlinks.t
350 351 test-mq.t
351 352 test-mv-cp-st-diff.t
352 353 test-narrow-acl.t
353 354 test-narrow-archive.t
354 355 test-narrow-clone-no-ellipsis.t
355 356 test-narrow-clone-non-narrow-server.t
356 357 test-narrow-clone-nonlinear.t
357 358 test-narrow-clone.t
358 359 test-narrow-commit.t
359 360 test-narrow-copies.t
360 361 test-narrow-debugcommands.t
361 362 test-narrow-debugrebuilddirstate.t
362 363 test-narrow-exchange-merges.t
363 364 test-narrow-exchange.t
364 365 test-narrow-expanddirstate.t
365 366 test-narrow-merge.t
366 367 test-narrow-patch.t
367 368 test-narrow-patterns.t
368 369 test-narrow-pull.t
369 370 test-narrow-rebase.t
370 371 test-narrow-shallow-merges.t
371 372 test-narrow-shallow.t
372 373 test-narrow-strip.t
373 374 test-narrow-trackedcmd.t
374 375 test-narrow-update.t
375 376 test-narrow-widen-no-ellipsis.t
376 377 test-narrow-widen.t
377 378 test-narrow.t
378 379 test-nested-repo.t
379 380 test-newbranch.t
380 381 test-newercgi.t
381 382 test-nointerrupt.t
382 383 test-obshistory.t
383 384 test-obsmarker-template.t
384 385 test-obsmarkers-effectflag.t
385 386 test-obsolete-bounds-checking.t
386 387 test-obsolete-bundle-strip.t
387 388 test-obsolete-changeset-exchange.t
388 389 test-obsolete-checkheads.t
389 390 test-obsolete-distributed.t
390 391 test-obsolete-divergent.t
391 392 test-obsolete-tag-cache.t
392 393 test-obsolete.t
393 394 test-pager.t
394 395 test-parents.t
395 396 test-parseindex2.py
396 397 test-patch-offset.t
397 398 test-patch.t
398 399 test-patchbomb-bookmark.t
399 400 test-patchbomb-tls.t
400 401 test-patchbomb.t
401 402 test-pathconflicts-merge.t
402 403 test-pathconflicts-update.t
403 404 test-pathencode.py
404 405 test-pending.t
405 406 test-permissions.t
406 407 test-phases-exchange.t
407 408 test-phases.t
408 409 test-pull-branch.t
409 410 test-pull-http.t
410 411 test-pull-permission.t
411 412 test-pull-pull-corruption.t
412 413 test-pull-r.t
413 414 test-pull-update.t
414 415 test-pull.t
415 416 test-purge.t
416 417 test-push-cgi.t
417 418 test-push-checkheads-partial-C1.t
418 419 test-push-checkheads-partial-C2.t
419 420 test-push-checkheads-partial-C3.t
420 421 test-push-checkheads-partial-C4.t
421 422 test-push-checkheads-pruned-B1.t
422 423 test-push-checkheads-pruned-B2.t
423 424 test-push-checkheads-pruned-B3.t
424 425 test-push-checkheads-pruned-B4.t
425 426 test-push-checkheads-pruned-B5.t
426 427 test-push-checkheads-pruned-B6.t
427 428 test-push-checkheads-pruned-B7.t
428 429 test-push-checkheads-pruned-B8.t
429 430 test-push-checkheads-superceed-A1.t
430 431 test-push-checkheads-superceed-A2.t
431 432 test-push-checkheads-superceed-A3.t
432 433 test-push-checkheads-superceed-A4.t
433 434 test-push-checkheads-superceed-A5.t
434 435 test-push-checkheads-superceed-A6.t
435 436 test-push-checkheads-superceed-A7.t
436 437 test-push-checkheads-superceed-A8.t
437 438 test-push-checkheads-unpushed-D1.t
438 439 test-push-checkheads-unpushed-D2.t
439 440 test-push-checkheads-unpushed-D3.t
440 441 test-push-checkheads-unpushed-D4.t
441 442 test-push-checkheads-unpushed-D5.t
442 443 test-push-checkheads-unpushed-D6.t
443 444 test-push-checkheads-unpushed-D7.t
444 445 test-push-http.t
445 446 test-push-warn.t
446 447 test-push.t
447 448 test-pushvars.t
448 449 test-qrecord.t
449 450 test-rebase-abort.t
450 451 test-rebase-backup.t
451 452 test-rebase-base-flag.t
452 453 test-rebase-bookmarks.t
453 454 test-rebase-brute-force.t
454 455 test-rebase-cache.t
455 456 test-rebase-check-restore.t
456 457 test-rebase-collapse.t
457 458 test-rebase-conflicts.t
458 459 test-rebase-dest.t
459 460 test-rebase-detach.t
460 461 test-rebase-emptycommit.t
461 462 test-rebase-inmemory.t
462 463 test-rebase-interruptions.t
463 464 test-rebase-issue-noparam-single-rev.t
464 465 test-rebase-legacy.t
465 466 test-rebase-mq-skip.t
466 467 test-rebase-mq.t
467 468 test-rebase-named-branches.t
468 469 test-rebase-newancestor.t
469 470 test-rebase-obsolete.t
470 471 test-rebase-parameters.t
471 472 test-rebase-partial.t
472 473 test-rebase-pull.t
473 474 test-rebase-rename.t
474 475 test-rebase-scenario-global.t
475 476 test-rebase-templates.t
476 477 test-rebase-transaction.t
477 478 test-rebuildstate.t
478 479 test-record.t
479 480 test-relink.t
480 481 test-remove.t
481 482 test-removeemptydirs.t
482 483 test-rename-after-merge.t
483 484 test-rename-dir-merge.t
484 485 test-rename-merge1.t
485 486 test-rename-merge2.t
486 487 test-rename.t
487 488 test-repair-strip.t
488 489 test-repo-compengines.t
489 490 test-resolve.t
490 491 test-revert-flags.t
491 492 test-revert-interactive.t
492 493 test-revert-unknown.t
493 494 test-revert.t
494 495 test-revisions.t
495 496 test-revlog-ancestry.py
496 497 test-revlog-group-emptyiter.t
497 498 test-revlog-mmapindex.t
498 499 test-revlog-packentry.t
499 500 test-revlog-raw.py
500 501 test-revlog-v2.t
501 502 test-revset-dirstate-parents.t
502 503 test-revset-legacy-lookup.t
503 504 test-revset-outgoing.t
504 505 test-rollback.t
505 506 test-run-tests.py
506 507 test-run-tests.t
507 508 test-schemes.t
508 509 test-serve.t
509 510 test-setdiscovery.t
510 511 test-share.t
511 512 test-shelve.t
512 513 test-show-stack.t
513 514 test-show-work.t
514 515 test-show.t
515 516 test-simple-update.t
516 517 test-simplekeyvaluefile.py
517 518 test-simplemerge.py
518 519 test-single-head.t
519 520 test-sparse-clear.t
520 521 test-sparse-clone.t
521 522 test-sparse-import.t
522 523 test-sparse-merges.t
523 524 test-sparse-profiles.t
524 525 test-sparse-requirement.t
525 526 test-sparse-verbose-json.t
526 527 test-sparse.t
527 528 test-split.t
528 529 test-ssh-bundle1.t
529 530 test-ssh-clone-r.t
530 531 test-ssh-proto-unbundle.t
531 532 test-ssh-proto.t
532 533 test-ssh.t
533 534 test-sshserver.py
534 535 test-stack.t
535 536 test-status-inprocess.py
536 537 test-status-rev.t
537 538 test-status-terse.t
538 539 test-storage.py
539 540 test-stream-bundle-v2.t
540 541 test-strict.t
541 542 test-strip-cross.t
542 543 test-strip.t
543 544 test-subrepo-deep-nested-change.t
544 545 test-subrepo-missing.t
545 546 test-subrepo-paths.t
546 547 test-subrepo-recursion.t
547 548 test-subrepo-relative-path.t
548 549 test-subrepo.t
549 550 test-symlink-os-yes-fs-no.py
550 551 test-symlink-placeholder.t
551 552 test-symlinks.t
552 553 test-tag.t
553 554 test-tags.t
554 555 test-template-basic.t
555 556 test-template-functions.t
556 557 test-template-keywords.t
557 558 test-template-map.t
558 559 test-transplant.t
559 560 test-treemanifest.t
560 561 test-ui-color.py
561 562 test-ui-config.py
562 563 test-ui-verbosity.py
563 564 test-unamend.t
564 565 test-unbundlehash.t
565 566 test-uncommit.t
566 567 test-unified-test.t
567 568 test-unionrepo.t
568 569 test-unrelated-pull.t
569 570 test-up-local-change.t
570 571 test-update-branches.t
571 572 test-update-dest.t
572 573 test-update-issue1456.t
573 574 test-update-names.t
574 575 test-update-reverse.t
575 576 test-upgrade-repo.t
576 577 test-url-download.t
577 578 test-url-rev.t
578 579 test-url.py
579 580 test-username-newline.t
580 581 test-util.py
581 582 test-verify.t
582 583 test-walk.t
583 584 test-walkrepo.py
584 585 test-websub.t
585 586 test-win32text.t
586 587 test-wireproto-clientreactor.py
587 588 test-wireproto-command-branchmap.t
588 589 test-wireproto-command-changesetdata.t
589 590 test-wireproto-command-filedata.t
590 591 test-wireproto-command-filesdata.t
591 592 test-wireproto-command-heads.t
592 593 test-wireproto-command-listkeys.t
593 594 test-wireproto-command-lookup.t
594 595 test-wireproto-command-manifestdata.t
595 596 test-wireproto-command-pushkey.t
596 597 test-wireproto-framing.py
597 598 test-wireproto-serverreactor.py
598 599 test-wireproto.py
599 600 test-wsgirequest.py
600 601 test-xdg.t
@@ -1,1296 +1,1296 b''
1 1 #testcases sshv1 sshv2
2 2
3 3 #if sshv2
4 4 $ cat >> $HGRCPATH << EOF
5 5 > [experimental]
6 6 > sshpeer.advertise-v2 = true
7 7 > sshserver.support-v2 = true
8 8 > EOF
9 9 #endif
10 10
11 11 Prepare repo a:
12 12
13 13 $ hg init a
14 14 $ cd a
15 15 $ echo a > a
16 16 $ hg add a
17 17 $ hg commit -m test
18 18 $ echo first line > b
19 19 $ hg add b
20 20
21 21 Create a non-inlined filelog:
22 22
23 23 $ "$PYTHON" -c 'open("data1", "wb").write(b"".join(b"%d\n" % x for x in range(10000)))'
24 24 $ for j in 0 1 2 3 4 5 6 7 8 9; do
25 25 > cat data1 >> b
26 26 > hg commit -m test
27 27 > done
28 28
29 29 List files in store/data (should show a 'b.d'):
30 30
31 31 #if reporevlogstore
32 32 $ for i in .hg/store/data/*; do
33 33 > echo $i
34 34 > done
35 35 .hg/store/data/a.i
36 36 .hg/store/data/b.d
37 37 .hg/store/data/b.i
38 38 #endif
39 39
40 40 Trigger branchcache creation:
41 41
42 42 $ hg branches
43 43 default 10:a7949464abda
44 44 $ ls .hg/cache
45 45 branch2-served
46 46 checkisexec (execbit !)
47 47 checklink (symlink !)
48 48 checklink-target (symlink !)
49 49 checknoexec (execbit !)
50 50 manifestfulltextcache (reporevlogstore !)
51 51 rbc-names-v1
52 52 rbc-revs-v1
53 53
54 54 Default operation:
55 55
56 56 $ hg clone . ../b
57 57 updating to branch default
58 58 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
59 59 $ cd ../b
60 60
61 61 Ensure branchcache got copied over:
62 62
63 63 $ ls .hg/cache
64 64 branch2-served
65 65 checkisexec (execbit !)
66 66 checklink (symlink !)
67 67 checklink-target (symlink !)
68 68 rbc-names-v1
69 69 rbc-revs-v1
70 70
71 71 $ cat a
72 72 a
73 73 $ hg verify
74 74 checking changesets
75 75 checking manifests
76 76 crosschecking files in changesets and manifests
77 77 checking files
78 78 checked 11 changesets with 11 changes to 2 files
79 79
80 80 Invalid dest '' must abort:
81 81
82 82 $ hg clone . ''
83 83 abort: empty destination path is not valid
84 84 [255]
85 85
86 86 No update, with debug option:
87 87
88 88 #if hardlink
89 89 $ hg --debug clone -U . ../c --config progress.debug=true
90 90 linking: 1
91 91 linking: 2
92 92 linking: 3
93 93 linking: 4
94 94 linking: 5
95 95 linking: 6
96 96 linking: 7
97 97 linking: 8
98 98 linked 8 files (reporevlogstore !)
99 99 linking: 9 (reposimplestore !)
100 100 linking: 10 (reposimplestore !)
101 101 linking: 11 (reposimplestore !)
102 102 linking: 12 (reposimplestore !)
103 103 linking: 13 (reposimplestore !)
104 104 linking: 14 (reposimplestore !)
105 105 linking: 15 (reposimplestore !)
106 106 linking: 16 (reposimplestore !)
107 107 linking: 17 (reposimplestore !)
108 108 linking: 18 (reposimplestore !)
109 109 linked 18 files (reposimplestore !)
110 110 #else
111 111 $ hg --debug clone -U . ../c --config progress.debug=true
112 112 linking: 1
113 113 copying: 2
114 114 copying: 3
115 115 copying: 4
116 116 copying: 5
117 117 copying: 6
118 118 copying: 7
119 119 copying: 8
120 120 copied 8 files (reporevlogstore !)
121 121 copying: 9 (reposimplestore !)
122 122 copying: 10 (reposimplestore !)
123 123 copying: 11 (reposimplestore !)
124 124 copying: 12 (reposimplestore !)
125 125 copying: 13 (reposimplestore !)
126 126 copying: 14 (reposimplestore !)
127 127 copying: 15 (reposimplestore !)
128 128 copying: 16 (reposimplestore !)
129 129 copying: 17 (reposimplestore !)
130 130 copying: 18 (reposimplestore !)
131 131 copied 18 files (reposimplestore !)
132 132 #endif
133 133 $ cd ../c
134 134
135 135 Ensure branchcache got copied over:
136 136
137 137 $ ls .hg/cache
138 138 branch2-served
139 139 rbc-names-v1
140 140 rbc-revs-v1
141 141
142 142 $ cat a 2>/dev/null || echo "a not present"
143 143 a not present
144 144 $ hg verify
145 145 checking changesets
146 146 checking manifests
147 147 crosschecking files in changesets and manifests
148 148 checking files
149 149 checked 11 changesets with 11 changes to 2 files
150 150
151 151 Default destination:
152 152
153 153 $ mkdir ../d
154 154 $ cd ../d
155 155 $ hg clone ../a
156 156 destination directory: a
157 157 updating to branch default
158 158 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
159 159 $ cd a
160 160 $ hg cat a
161 161 a
162 162 $ cd ../..
163 163
164 164 Check that we drop the 'file:' from the path before writing the .hgrc:
165 165
166 166 $ hg clone file:a e
167 167 updating to branch default
168 168 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
169 169 $ grep 'file:' e/.hg/hgrc
170 170 [1]
171 171
172 172 Check that path aliases are expanded:
173 173
174 174 $ hg clone -q -U --config 'paths.foobar=a#0' foobar f
175 175 $ hg -R f showconfig paths.default
176 176 $TESTTMP/a#0
177 177
178 178 Use --pull:
179 179
180 180 $ hg clone --pull a g
181 181 requesting all changes
182 182 adding changesets
183 183 adding manifests
184 184 adding file changes
185 185 added 11 changesets with 11 changes to 2 files
186 186 new changesets acb14030fe0a:a7949464abda
187 187 updating to branch default
188 188 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
189 189 $ hg -R g verify
190 190 checking changesets
191 191 checking manifests
192 192 crosschecking files in changesets and manifests
193 193 checking files
194 194 checked 11 changesets with 11 changes to 2 files
195 195
196 196 Invalid dest '' with --pull must abort (issue2528):
197 197
198 198 $ hg clone --pull a ''
199 199 abort: empty destination path is not valid
200 200 [255]
201 201
202 202 Clone to '.':
203 203
204 204 $ mkdir h
205 205 $ cd h
206 206 $ hg clone ../a .
207 207 updating to branch default
208 208 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
209 209 $ cd ..
210 210
211 211
212 212 *** Tests for option -u ***
213 213
214 214 Adding some more history to repo a:
215 215
216 216 $ cd a
217 217 $ hg tag ref1
218 218 $ echo the quick brown fox >a
219 219 $ hg ci -m "hacked default"
220 220 $ hg up ref1
221 221 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
222 222 $ hg branch stable
223 223 marked working directory as branch stable
224 224 (branches are permanent and global, did you want a bookmark?)
225 225 $ echo some text >a
226 226 $ hg ci -m "starting branch stable"
227 227 $ hg tag ref2
228 228 $ echo some more text >a
229 229 $ hg ci -m "another change for branch stable"
230 230 $ hg up ref2
231 231 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
232 232 $ hg parents
233 233 changeset: 13:e8ece76546a6
234 234 branch: stable
235 235 tag: ref2
236 236 parent: 10:a7949464abda
237 237 user: test
238 238 date: Thu Jan 01 00:00:00 1970 +0000
239 239 summary: starting branch stable
240 240
241 241
242 242 Repo a has two heads:
243 243
244 244 $ hg heads
245 245 changeset: 15:0aae7cf88f0d
246 246 branch: stable
247 247 tag: tip
248 248 user: test
249 249 date: Thu Jan 01 00:00:00 1970 +0000
250 250 summary: another change for branch stable
251 251
252 252 changeset: 12:f21241060d6a
253 253 user: test
254 254 date: Thu Jan 01 00:00:00 1970 +0000
255 255 summary: hacked default
256 256
257 257
258 258 $ cd ..
259 259
260 260
261 261 Testing --noupdate with --updaterev (must abort):
262 262
263 263 $ hg clone --noupdate --updaterev 1 a ua
264 264 abort: cannot specify both --noupdate and --updaterev
265 265 [255]
266 266
267 267
268 268 Testing clone -u:
269 269
270 270 $ hg clone -u . a ua
271 271 updating to branch stable
272 272 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
273 273
274 274 Repo ua has both heads:
275 275
276 276 $ hg -R ua heads
277 277 changeset: 15:0aae7cf88f0d
278 278 branch: stable
279 279 tag: tip
280 280 user: test
281 281 date: Thu Jan 01 00:00:00 1970 +0000
282 282 summary: another change for branch stable
283 283
284 284 changeset: 12:f21241060d6a
285 285 user: test
286 286 date: Thu Jan 01 00:00:00 1970 +0000
287 287 summary: hacked default
288 288
289 289
290 290 Same revision checked out in repo a and ua:
291 291
292 292 $ hg -R a parents --template "{node|short}\n"
293 293 e8ece76546a6
294 294 $ hg -R ua parents --template "{node|short}\n"
295 295 e8ece76546a6
296 296
297 297 $ rm -r ua
298 298
299 299
300 300 Testing clone --pull -u:
301 301
302 302 $ hg clone --pull -u . a ua
303 303 requesting all changes
304 304 adding changesets
305 305 adding manifests
306 306 adding file changes
307 307 added 16 changesets with 16 changes to 3 files (+1 heads)
308 308 new changesets acb14030fe0a:0aae7cf88f0d
309 309 updating to branch stable
310 310 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
311 311
312 312 Repo ua has both heads:
313 313
314 314 $ hg -R ua heads
315 315 changeset: 15:0aae7cf88f0d
316 316 branch: stable
317 317 tag: tip
318 318 user: test
319 319 date: Thu Jan 01 00:00:00 1970 +0000
320 320 summary: another change for branch stable
321 321
322 322 changeset: 12:f21241060d6a
323 323 user: test
324 324 date: Thu Jan 01 00:00:00 1970 +0000
325 325 summary: hacked default
326 326
327 327
328 328 Same revision checked out in repo a and ua:
329 329
330 330 $ hg -R a parents --template "{node|short}\n"
331 331 e8ece76546a6
332 332 $ hg -R ua parents --template "{node|short}\n"
333 333 e8ece76546a6
334 334
335 335 $ rm -r ua
336 336
337 337
338 338 Testing clone -u <branch>:
339 339
340 340 $ hg clone -u stable a ua
341 341 updating to branch stable
342 342 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
343 343
344 344 Repo ua has both heads:
345 345
346 346 $ hg -R ua heads
347 347 changeset: 15:0aae7cf88f0d
348 348 branch: stable
349 349 tag: tip
350 350 user: test
351 351 date: Thu Jan 01 00:00:00 1970 +0000
352 352 summary: another change for branch stable
353 353
354 354 changeset: 12:f21241060d6a
355 355 user: test
356 356 date: Thu Jan 01 00:00:00 1970 +0000
357 357 summary: hacked default
358 358
359 359
360 360 Branch 'stable' is checked out:
361 361
362 362 $ hg -R ua parents
363 363 changeset: 15:0aae7cf88f0d
364 364 branch: stable
365 365 tag: tip
366 366 user: test
367 367 date: Thu Jan 01 00:00:00 1970 +0000
368 368 summary: another change for branch stable
369 369
370 370
371 371 $ rm -r ua
372 372
373 373
374 374 Testing default checkout:
375 375
376 376 $ hg clone a ua
377 377 updating to branch default
378 378 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
379 379
380 380 Repo ua has both heads:
381 381
382 382 $ hg -R ua heads
383 383 changeset: 15:0aae7cf88f0d
384 384 branch: stable
385 385 tag: tip
386 386 user: test
387 387 date: Thu Jan 01 00:00:00 1970 +0000
388 388 summary: another change for branch stable
389 389
390 390 changeset: 12:f21241060d6a
391 391 user: test
392 392 date: Thu Jan 01 00:00:00 1970 +0000
393 393 summary: hacked default
394 394
395 395
396 396 Branch 'default' is checked out:
397 397
398 398 $ hg -R ua parents
399 399 changeset: 12:f21241060d6a
400 400 user: test
401 401 date: Thu Jan 01 00:00:00 1970 +0000
402 402 summary: hacked default
403 403
404 404 Test clone with a branch named "@" (issue3677)
405 405
406 406 $ hg -R ua branch @
407 407 marked working directory as branch @
408 408 $ hg -R ua commit -m 'created branch @'
409 409 $ hg clone ua atbranch
410 410 updating to branch default
411 411 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
412 412 $ hg -R atbranch heads
413 413 changeset: 16:798b6d97153e
414 414 branch: @
415 415 tag: tip
416 416 parent: 12:f21241060d6a
417 417 user: test
418 418 date: Thu Jan 01 00:00:00 1970 +0000
419 419 summary: created branch @
420 420
421 421 changeset: 15:0aae7cf88f0d
422 422 branch: stable
423 423 user: test
424 424 date: Thu Jan 01 00:00:00 1970 +0000
425 425 summary: another change for branch stable
426 426
427 427 changeset: 12:f21241060d6a
428 428 user: test
429 429 date: Thu Jan 01 00:00:00 1970 +0000
430 430 summary: hacked default
431 431
432 432 $ hg -R atbranch parents
433 433 changeset: 12:f21241060d6a
434 434 user: test
435 435 date: Thu Jan 01 00:00:00 1970 +0000
436 436 summary: hacked default
437 437
438 438
439 439 $ rm -r ua atbranch
440 440
441 441
442 442 Testing #<branch>:
443 443
444 444 $ hg clone -u . a#stable ua
445 445 adding changesets
446 446 adding manifests
447 447 adding file changes
448 448 added 14 changesets with 14 changes to 3 files
449 449 new changesets acb14030fe0a:0aae7cf88f0d
450 450 updating to branch stable
451 451 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
452 452
453 453 Repo ua has branch 'stable' and 'default' (was changed in fd511e9eeea6):
454 454
455 455 $ hg -R ua heads
456 456 changeset: 13:0aae7cf88f0d
457 457 branch: stable
458 458 tag: tip
459 459 user: test
460 460 date: Thu Jan 01 00:00:00 1970 +0000
461 461 summary: another change for branch stable
462 462
463 463 changeset: 10:a7949464abda
464 464 user: test
465 465 date: Thu Jan 01 00:00:00 1970 +0000
466 466 summary: test
467 467
468 468
469 469 Same revision checked out in repo a and ua:
470 470
471 471 $ hg -R a parents --template "{node|short}\n"
472 472 e8ece76546a6
473 473 $ hg -R ua parents --template "{node|short}\n"
474 474 e8ece76546a6
475 475
476 476 $ rm -r ua
477 477
478 478
479 479 Testing -u -r <branch>:
480 480
481 481 $ hg clone -u . -r stable a ua
482 482 adding changesets
483 483 adding manifests
484 484 adding file changes
485 485 added 14 changesets with 14 changes to 3 files
486 486 new changesets acb14030fe0a:0aae7cf88f0d
487 487 updating to branch stable
488 488 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
489 489
490 490 Repo ua has branch 'stable' and 'default' (was changed in fd511e9eeea6):
491 491
492 492 $ hg -R ua heads
493 493 changeset: 13:0aae7cf88f0d
494 494 branch: stable
495 495 tag: tip
496 496 user: test
497 497 date: Thu Jan 01 00:00:00 1970 +0000
498 498 summary: another change for branch stable
499 499
500 500 changeset: 10:a7949464abda
501 501 user: test
502 502 date: Thu Jan 01 00:00:00 1970 +0000
503 503 summary: test
504 504
505 505
506 506 Same revision checked out in repo a and ua:
507 507
508 508 $ hg -R a parents --template "{node|short}\n"
509 509 e8ece76546a6
510 510 $ hg -R ua parents --template "{node|short}\n"
511 511 e8ece76546a6
512 512
513 513 $ rm -r ua
514 514
515 515
516 516 Testing -r <branch>:
517 517
518 518 $ hg clone -r stable a ua
519 519 adding changesets
520 520 adding manifests
521 521 adding file changes
522 522 added 14 changesets with 14 changes to 3 files
523 523 new changesets acb14030fe0a:0aae7cf88f0d
524 524 updating to branch stable
525 525 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
526 526
527 527 Repo ua has branch 'stable' and 'default' (was changed in fd511e9eeea6):
528 528
529 529 $ hg -R ua heads
530 530 changeset: 13:0aae7cf88f0d
531 531 branch: stable
532 532 tag: tip
533 533 user: test
534 534 date: Thu Jan 01 00:00:00 1970 +0000
535 535 summary: another change for branch stable
536 536
537 537 changeset: 10:a7949464abda
538 538 user: test
539 539 date: Thu Jan 01 00:00:00 1970 +0000
540 540 summary: test
541 541
542 542
543 543 Branch 'stable' is checked out:
544 544
545 545 $ hg -R ua parents
546 546 changeset: 13:0aae7cf88f0d
547 547 branch: stable
548 548 tag: tip
549 549 user: test
550 550 date: Thu Jan 01 00:00:00 1970 +0000
551 551 summary: another change for branch stable
552 552
553 553
554 554 $ rm -r ua
555 555
556 556
557 557 Issue2267: Error in 1.6 hg.py: TypeError: 'NoneType' object is not
558 558 iterable in addbranchrevs()
559 559
560 560 $ cat <<EOF > simpleclone.py
561 561 > from mercurial import ui, hg
562 562 > myui = ui.ui.load()
563 563 > repo = hg.repository(myui, b'a')
564 564 > hg.clone(myui, {}, repo, dest=b"ua")
565 565 > EOF
566 566
567 567 $ "$PYTHON" simpleclone.py
568 568 updating to branch default
569 569 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
570 570
571 571 $ rm -r ua
572 572
573 573 $ cat <<EOF > branchclone.py
574 574 > from mercurial import ui, hg, extensions
575 575 > myui = ui.ui.load()
576 576 > extensions.loadall(myui)
577 577 > repo = hg.repository(myui, b'a')
578 578 > hg.clone(myui, {}, repo, dest=b"ua", branch=[b"stable",])
579 579 > EOF
580 580
581 581 $ "$PYTHON" branchclone.py
582 582 adding changesets
583 583 adding manifests
584 584 adding file changes
585 585 added 14 changesets with 14 changes to 3 files
586 586 new changesets acb14030fe0a:0aae7cf88f0d
587 587 updating to branch stable
588 588 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
589 589 $ rm -r ua
590 590
591 591
592 592 Test clone with special '@' bookmark:
593 593 $ cd a
594 594 $ hg bookmark -r a7949464abda @ # branch point of stable from default
595 595 $ hg clone . ../i
596 596 updating to bookmark @
597 597 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
598 598 $ hg id -i ../i
599 599 a7949464abda
600 600 $ rm -r ../i
601 601
602 602 $ hg bookmark -f -r stable @
603 603 $ hg bookmarks
604 604 @ 15:0aae7cf88f0d
605 605 $ hg clone . ../i
606 606 updating to bookmark @ on branch stable
607 607 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
608 608 $ hg id -i ../i
609 609 0aae7cf88f0d
610 610 $ cd "$TESTTMP"
611 611
612 612
613 613 Testing failures:
614 614
615 615 $ mkdir fail
616 616 $ cd fail
617 617
618 618 No local source
619 619
620 620 $ hg clone a b
621 621 abort: repository a not found!
622 622 [255]
623 623
624 624 No remote source
625 625
626 626 #if windows
627 627 $ hg clone http://$LOCALIP:3121/a b
628 628 abort: error: * (glob)
629 629 [255]
630 630 #else
631 631 $ hg clone http://$LOCALIP:3121/a b
632 632 abort: error: *refused* (glob)
633 633 [255]
634 634 #endif
635 635 $ rm -rf b # work around bug with http clone
636 636
637 637
638 638 #if unix-permissions no-root
639 639
640 640 Inaccessible source
641 641
642 642 $ mkdir a
643 643 $ chmod 000 a
644 644 $ hg clone a b
645 abort: Permission denied: '$TESTTMP/fail/a/.hg'
645 abort: Permission denied: *$TESTTMP/fail/a/.hg* (glob)
646 646 [255]
647 647
648 648 Inaccessible destination
649 649
650 650 $ hg init b
651 651 $ cd b
652 652 $ hg clone . ../a
653 abort: Permission denied: '../a'
653 abort: Permission denied: *../a* (glob)
654 654 [255]
655 655 $ cd ..
656 656 $ chmod 700 a
657 657 $ rm -r a b
658 658
659 659 #endif
660 660
661 661
662 662 #if fifo
663 663
664 664 Source of wrong type
665 665
666 666 $ mkfifo a
667 667 $ hg clone a b
668 abort: $ENOTDIR$: '$TESTTMP/fail/a/.hg'
668 abort: $ENOTDIR$: *$TESTTMP/fail/a/.hg* (glob)
669 669 [255]
670 670 $ rm a
671 671
672 672 #endif
673 673
674 674 Default destination, same directory
675 675
676 676 $ hg init q
677 677 $ hg clone q
678 678 destination directory: q
679 679 abort: destination 'q' is not empty
680 680 [255]
681 681
682 682 destination directory not empty
683 683
684 684 $ mkdir a
685 685 $ echo stuff > a/a
686 686 $ hg clone q a
687 687 abort: destination 'a' is not empty
688 688 [255]
689 689
690 690
691 691 #if unix-permissions no-root
692 692
693 693 leave existing directory in place after clone failure
694 694
695 695 $ hg init c
696 696 $ cd c
697 697 $ echo c > c
698 698 $ hg commit -A -m test
699 699 adding c
700 700 $ chmod -rx .hg/store/data
701 701 $ cd ..
702 702 $ mkdir d
703 703 $ hg clone c d 2> err
704 704 [255]
705 705 $ test -d d
706 706 $ test -d d/.hg
707 707 [1]
708 708
709 709 re-enable perm to allow deletion
710 710
711 711 $ chmod +rx c/.hg/store/data
712 712
713 713 #endif
714 714
715 715 $ cd ..
716 716
717 717 Test clone from the repository in (emulated) revlog format 0 (issue4203):
718 718
719 719 $ mkdir issue4203
720 720 $ mkdir -p src/.hg
721 721 $ echo foo > src/foo
722 722 $ hg -R src add src/foo
723 723 $ hg -R src commit -m '#0'
724 724 $ hg -R src log -q
725 725 0:e1bab28bca43
726 726 $ hg clone -U -q src dst
727 727 $ hg -R dst log -q
728 728 0:e1bab28bca43
729 729
730 730 Create repositories to test auto sharing functionality
731 731
732 732 $ cat >> $HGRCPATH << EOF
733 733 > [extensions]
734 734 > share=
735 735 > EOF
736 736
737 737 $ hg init empty
738 738 $ hg init source1a
739 739 $ cd source1a
740 740 $ echo initial1 > foo
741 741 $ hg -q commit -A -m initial
742 742 $ echo second > foo
743 743 $ hg commit -m second
744 744 $ cd ..
745 745
746 746 $ hg init filteredrev0
747 747 $ cd filteredrev0
748 748 $ cat >> .hg/hgrc << EOF
749 749 > [experimental]
750 750 > evolution.createmarkers=True
751 751 > EOF
752 752 $ echo initial1 > foo
753 753 $ hg -q commit -A -m initial0
754 754 $ hg -q up -r null
755 755 $ echo initial2 > foo
756 756 $ hg -q commit -A -m initial1
757 757 $ hg debugobsolete c05d5c47a5cf81401869999f3d05f7d699d2b29a e082c1832e09a7d1e78b7fd49a592d372de854c8
758 758 obsoleted 1 changesets
759 759 $ cd ..
760 760
761 761 $ hg -q clone --pull source1a source1b
762 762 $ cd source1a
763 763 $ hg bookmark bookA
764 764 $ echo 1a > foo
765 765 $ hg commit -m 1a
766 766 $ cd ../source1b
767 767 $ hg -q up -r 0
768 768 $ echo head1 > foo
769 769 $ hg commit -m head1
770 770 created new head
771 771 $ hg bookmark head1
772 772 $ hg -q up -r 0
773 773 $ echo head2 > foo
774 774 $ hg commit -m head2
775 775 created new head
776 776 $ hg bookmark head2
777 777 $ hg -q up -r 0
778 778 $ hg branch branch1
779 779 marked working directory as branch branch1
780 780 (branches are permanent and global, did you want a bookmark?)
781 781 $ echo branch1 > foo
782 782 $ hg commit -m branch1
783 783 $ hg -q up -r 0
784 784 $ hg branch branch2
785 785 marked working directory as branch branch2
786 786 $ echo branch2 > foo
787 787 $ hg commit -m branch2
788 788 $ cd ..
789 789 $ hg init source2
790 790 $ cd source2
791 791 $ echo initial2 > foo
792 792 $ hg -q commit -A -m initial2
793 793 $ echo second > foo
794 794 $ hg commit -m second
795 795 $ cd ..
796 796
797 797 Clone with auto share from an empty repo should not result in share
798 798
799 799 $ mkdir share
800 800 $ hg --config share.pool=share clone empty share-empty
801 801 (not using pooled storage: remote appears to be empty)
802 802 updating to branch default
803 803 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
804 804 $ ls share
805 805 $ test -d share-empty/.hg/store
806 806 $ test -f share-empty/.hg/sharedpath
807 807 [1]
808 808
809 809 Clone with auto share from a repo with filtered revision 0 should not result in share
810 810
811 811 $ hg --config share.pool=share clone filteredrev0 share-filtered
812 812 (not using pooled storage: unable to resolve identity of remote)
813 813 requesting all changes
814 814 adding changesets
815 815 adding manifests
816 816 adding file changes
817 817 added 1 changesets with 1 changes to 1 files
818 818 new changesets e082c1832e09
819 819 updating to branch default
820 820 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
821 821
822 822 Clone from repo with content should result in shared store being created
823 823
824 824 $ hg --config share.pool=share clone source1a share-dest1a
825 825 (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
826 826 requesting all changes
827 827 adding changesets
828 828 adding manifests
829 829 adding file changes
830 830 added 3 changesets with 3 changes to 1 files
831 831 new changesets b5f04eac9d8f:e5bfe23c0b47
832 832 searching for changes
833 833 no changes found
834 834 adding remote bookmark bookA
835 835 updating working directory
836 836 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
837 837
838 838 The shared repo should have been created
839 839
840 840 $ ls share
841 841 b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1
842 842
843 843 The destination should point to it
844 844
845 845 $ cat share-dest1a/.hg/sharedpath; echo
846 846 $TESTTMP/share/b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1/.hg
847 847
848 848 The destination should have bookmarks
849 849
850 850 $ hg -R share-dest1a bookmarks
851 851 bookA 2:e5bfe23c0b47
852 852
853 853 The default path should be the remote, not the share
854 854
855 855 $ hg -R share-dest1a config paths.default
856 856 $TESTTMP/source1a
857 857
858 858 Clone with existing share dir should result in pull + share
859 859
860 860 $ hg --config share.pool=share clone source1b share-dest1b
861 861 (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
862 862 searching for changes
863 863 adding changesets
864 864 adding manifests
865 865 adding file changes
866 866 added 4 changesets with 4 changes to 1 files (+4 heads)
867 867 adding remote bookmark head1
868 868 adding remote bookmark head2
869 869 new changesets 4a8dc1ab4c13:6bacf4683960
870 870 updating working directory
871 871 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
872 872
873 873 $ ls share
874 874 b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1
875 875
876 876 $ cat share-dest1b/.hg/sharedpath; echo
877 877 $TESTTMP/share/b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1/.hg
878 878
879 879 We only get bookmarks from the remote, not everything in the share
880 880
881 881 $ hg -R share-dest1b bookmarks
882 882 head1 3:4a8dc1ab4c13
883 883 head2 4:99f71071f117
884 884
885 885 Default path should be source, not share.
886 886
887 887 $ hg -R share-dest1b config paths.default
888 888 $TESTTMP/source1b
889 889
890 890 Checked out revision should be head of default branch
891 891
892 892 $ hg -R share-dest1b log -r .
893 893 changeset: 4:99f71071f117
894 894 bookmark: head2
895 895 parent: 0:b5f04eac9d8f
896 896 user: test
897 897 date: Thu Jan 01 00:00:00 1970 +0000
898 898 summary: head2
899 899
900 900
901 901 Clone from unrelated repo should result in new share
902 902
903 903 $ hg --config share.pool=share clone source2 share-dest2
904 904 (sharing from new pooled repository 22aeff664783fd44c6d9b435618173c118c3448e)
905 905 requesting all changes
906 906 adding changesets
907 907 adding manifests
908 908 adding file changes
909 909 added 2 changesets with 2 changes to 1 files
910 910 new changesets 22aeff664783:63cf6c3dba4a
911 911 searching for changes
912 912 no changes found
913 913 updating working directory
914 914 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
915 915
916 916 $ ls share
917 917 22aeff664783fd44c6d9b435618173c118c3448e
918 918 b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1
919 919
920 920 remote naming mode works as advertised
921 921
922 922 $ hg --config share.pool=shareremote --config share.poolnaming=remote clone source1a share-remote1a
923 923 (sharing from new pooled repository 195bb1fcdb595c14a6c13e0269129ed78f6debde)
924 924 requesting all changes
925 925 adding changesets
926 926 adding manifests
927 927 adding file changes
928 928 added 3 changesets with 3 changes to 1 files
929 929 new changesets b5f04eac9d8f:e5bfe23c0b47
930 930 searching for changes
931 931 no changes found
932 932 adding remote bookmark bookA
933 933 updating working directory
934 934 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
935 935
936 936 $ ls shareremote
937 937 195bb1fcdb595c14a6c13e0269129ed78f6debde
938 938
939 939 $ hg --config share.pool=shareremote --config share.poolnaming=remote clone source1b share-remote1b
940 940 (sharing from new pooled repository c0d4f83847ca2a873741feb7048a45085fd47c46)
941 941 requesting all changes
942 942 adding changesets
943 943 adding manifests
944 944 adding file changes
945 945 added 6 changesets with 6 changes to 1 files (+4 heads)
946 946 new changesets b5f04eac9d8f:6bacf4683960
947 947 searching for changes
948 948 no changes found
949 949 adding remote bookmark head1
950 950 adding remote bookmark head2
951 951 updating working directory
952 952 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
953 953
954 954 $ ls shareremote
955 955 195bb1fcdb595c14a6c13e0269129ed78f6debde
956 956 c0d4f83847ca2a873741feb7048a45085fd47c46
957 957
958 958 request to clone a single revision is respected in sharing mode
959 959
960 960 $ hg --config share.pool=sharerevs clone -r 4a8dc1ab4c13 source1b share-1arev
961 961 (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
962 962 adding changesets
963 963 adding manifests
964 964 adding file changes
965 965 added 2 changesets with 2 changes to 1 files
966 966 new changesets b5f04eac9d8f:4a8dc1ab4c13
967 967 no changes found
968 968 adding remote bookmark head1
969 969 updating working directory
970 970 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
971 971
972 972 $ hg -R share-1arev log -G
973 973 @ changeset: 1:4a8dc1ab4c13
974 974 | bookmark: head1
975 975 | tag: tip
976 976 | user: test
977 977 | date: Thu Jan 01 00:00:00 1970 +0000
978 978 | summary: head1
979 979 |
980 980 o changeset: 0:b5f04eac9d8f
981 981 user: test
982 982 date: Thu Jan 01 00:00:00 1970 +0000
983 983 summary: initial
984 984
985 985
986 986 making another clone should only pull down requested rev
987 987
988 988 $ hg --config share.pool=sharerevs clone -r 99f71071f117 source1b share-1brev
989 989 (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
990 990 searching for changes
991 991 adding changesets
992 992 adding manifests
993 993 adding file changes
994 994 added 1 changesets with 1 changes to 1 files (+1 heads)
995 995 adding remote bookmark head1
996 996 adding remote bookmark head2
997 997 new changesets 99f71071f117
998 998 updating working directory
999 999 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1000 1000
1001 1001 $ hg -R share-1brev log -G
1002 1002 @ changeset: 2:99f71071f117
1003 1003 | bookmark: head2
1004 1004 | tag: tip
1005 1005 | parent: 0:b5f04eac9d8f
1006 1006 | user: test
1007 1007 | date: Thu Jan 01 00:00:00 1970 +0000
1008 1008 | summary: head2
1009 1009 |
1010 1010 | o changeset: 1:4a8dc1ab4c13
1011 1011 |/ bookmark: head1
1012 1012 | user: test
1013 1013 | date: Thu Jan 01 00:00:00 1970 +0000
1014 1014 | summary: head1
1015 1015 |
1016 1016 o changeset: 0:b5f04eac9d8f
1017 1017 user: test
1018 1018 date: Thu Jan 01 00:00:00 1970 +0000
1019 1019 summary: initial
1020 1020
1021 1021
1022 1022 Request to clone a single branch is respected in sharing mode
1023 1023
1024 1024 $ hg --config share.pool=sharebranch clone -b branch1 source1b share-1bbranch1
1025 1025 (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
1026 1026 adding changesets
1027 1027 adding manifests
1028 1028 adding file changes
1029 1029 added 2 changesets with 2 changes to 1 files
1030 1030 new changesets b5f04eac9d8f:5f92a6c1a1b1
1031 1031 no changes found
1032 1032 updating working directory
1033 1033 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1034 1034
1035 1035 $ hg -R share-1bbranch1 log -G
1036 1036 o changeset: 1:5f92a6c1a1b1
1037 1037 | branch: branch1
1038 1038 | tag: tip
1039 1039 | user: test
1040 1040 | date: Thu Jan 01 00:00:00 1970 +0000
1041 1041 | summary: branch1
1042 1042 |
1043 1043 @ changeset: 0:b5f04eac9d8f
1044 1044 user: test
1045 1045 date: Thu Jan 01 00:00:00 1970 +0000
1046 1046 summary: initial
1047 1047
1048 1048
1049 1049 $ hg --config share.pool=sharebranch clone -b branch2 source1b share-1bbranch2
1050 1050 (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
1051 1051 searching for changes
1052 1052 adding changesets
1053 1053 adding manifests
1054 1054 adding file changes
1055 1055 added 1 changesets with 1 changes to 1 files (+1 heads)
1056 1056 new changesets 6bacf4683960
1057 1057 updating working directory
1058 1058 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1059 1059
1060 1060 $ hg -R share-1bbranch2 log -G
1061 1061 o changeset: 2:6bacf4683960
1062 1062 | branch: branch2
1063 1063 | tag: tip
1064 1064 | parent: 0:b5f04eac9d8f
1065 1065 | user: test
1066 1066 | date: Thu Jan 01 00:00:00 1970 +0000
1067 1067 | summary: branch2
1068 1068 |
1069 1069 | o changeset: 1:5f92a6c1a1b1
1070 1070 |/ branch: branch1
1071 1071 | user: test
1072 1072 | date: Thu Jan 01 00:00:00 1970 +0000
1073 1073 | summary: branch1
1074 1074 |
1075 1075 @ changeset: 0:b5f04eac9d8f
1076 1076 user: test
1077 1077 date: Thu Jan 01 00:00:00 1970 +0000
1078 1078 summary: initial
1079 1079
1080 1080
1081 1081 -U is respected in share clone mode
1082 1082
1083 1083 $ hg --config share.pool=share clone -U source1a share-1anowc
1084 1084 (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
1085 1085 searching for changes
1086 1086 no changes found
1087 1087 adding remote bookmark bookA
1088 1088
1089 1089 $ ls share-1anowc
1090 1090
1091 1091 Test that auto sharing doesn't cause failure of "hg clone local remote"
1092 1092
1093 1093 $ cd $TESTTMP
1094 1094 $ hg -R a id -r 0
1095 1095 acb14030fe0a
1096 1096 $ hg id -R remote -r 0
1097 1097 abort: repository remote not found!
1098 1098 [255]
1099 1099 $ hg --config share.pool=share -q clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" a ssh://user@dummy/remote
1100 1100 $ hg -R remote id -r 0
1101 1101 acb14030fe0a
1102 1102
1103 1103 Cloning into pooled storage doesn't race (issue5104)
1104 1104
1105 1105 $ HGPOSTLOCKDELAY=2.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace1 > race1.log 2>&1 &
1106 1106 $ HGPRELOCKDELAY=1.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace2 > race2.log 2>&1
1107 1107 $ wait
1108 1108
1109 1109 $ hg -R share-destrace1 log -r tip
1110 1110 changeset: 2:e5bfe23c0b47
1111 1111 bookmark: bookA
1112 1112 tag: tip
1113 1113 user: test
1114 1114 date: Thu Jan 01 00:00:00 1970 +0000
1115 1115 summary: 1a
1116 1116
1117 1117
1118 1118 $ hg -R share-destrace2 log -r tip
1119 1119 changeset: 2:e5bfe23c0b47
1120 1120 bookmark: bookA
1121 1121 tag: tip
1122 1122 user: test
1123 1123 date: Thu Jan 01 00:00:00 1970 +0000
1124 1124 summary: 1a
1125 1125
1126 1126 One repo should be new, the other should be shared from the pool. We
1127 1127 don't care which is which, so we just make sure we always print the
1128 1128 one containing "new pooled" first, then one one containing "existing
1129 1129 pooled".
1130 1130
1131 1131 $ (grep 'new pooled' race1.log > /dev/null && cat race1.log || cat race2.log) | grep -v lock
1132 1132 (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
1133 1133 requesting all changes
1134 1134 adding changesets
1135 1135 adding manifests
1136 1136 adding file changes
1137 1137 added 3 changesets with 3 changes to 1 files
1138 1138 new changesets b5f04eac9d8f:e5bfe23c0b47
1139 1139 searching for changes
1140 1140 no changes found
1141 1141 adding remote bookmark bookA
1142 1142 updating working directory
1143 1143 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1144 1144
1145 1145 $ (grep 'existing pooled' race1.log > /dev/null && cat race1.log || cat race2.log) | grep -v lock
1146 1146 (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1)
1147 1147 searching for changes
1148 1148 no changes found
1149 1149 adding remote bookmark bookA
1150 1150 updating working directory
1151 1151 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1152 1152
1153 1153 SEC: check for unsafe ssh url
1154 1154
1155 1155 $ cat >> $HGRCPATH << EOF
1156 1156 > [ui]
1157 1157 > ssh = sh -c "read l; read l; read l"
1158 1158 > EOF
1159 1159
1160 1160 $ hg clone 'ssh://-oProxyCommand=touch${IFS}owned/path'
1161 1161 abort: potentially unsafe url: 'ssh://-oProxyCommand=touch${IFS}owned/path'
1162 1162 [255]
1163 1163 $ hg clone 'ssh://%2DoProxyCommand=touch${IFS}owned/path'
1164 1164 abort: potentially unsafe url: 'ssh://-oProxyCommand=touch${IFS}owned/path'
1165 1165 [255]
1166 1166 $ hg clone 'ssh://fakehost|touch%20owned/path'
1167 1167 abort: no suitable response from remote hg!
1168 1168 [255]
1169 1169 $ hg clone 'ssh://fakehost%7Ctouch%20owned/path'
1170 1170 abort: no suitable response from remote hg!
1171 1171 [255]
1172 1172
1173 1173 $ hg clone 'ssh://-oProxyCommand=touch owned%20foo@example.com/nonexistent/path'
1174 1174 abort: potentially unsafe url: 'ssh://-oProxyCommand=touch owned foo@example.com/nonexistent/path'
1175 1175 [255]
1176 1176
1177 1177 #if windows
1178 1178 $ hg clone "ssh://%26touch%20owned%20/" --debug
1179 1179 running sh -c "read l; read l; read l" "&touch owned " "hg -R . serve --stdio"
1180 1180 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
1181 1181 sending hello command
1182 1182 sending between command
1183 1183 abort: no suitable response from remote hg!
1184 1184 [255]
1185 1185 $ hg clone "ssh://example.com:%26touch%20owned%20/" --debug
1186 1186 running sh -c "read l; read l; read l" -p "&touch owned " example.com "hg -R . serve --stdio"
1187 1187 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
1188 1188 sending hello command
1189 1189 sending between command
1190 1190 abort: no suitable response from remote hg!
1191 1191 [255]
1192 1192 #else
1193 1193 $ hg clone "ssh://%3btouch%20owned%20/" --debug
1194 1194 running sh -c "read l; read l; read l" ';touch owned ' 'hg -R . serve --stdio'
1195 1195 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
1196 1196 sending hello command
1197 1197 sending between command
1198 1198 abort: no suitable response from remote hg!
1199 1199 [255]
1200 1200 $ hg clone "ssh://example.com:%3btouch%20owned%20/" --debug
1201 1201 running sh -c "read l; read l; read l" -p ';touch owned ' example.com 'hg -R . serve --stdio'
1202 1202 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
1203 1203 sending hello command
1204 1204 sending between command
1205 1205 abort: no suitable response from remote hg!
1206 1206 [255]
1207 1207 #endif
1208 1208
1209 1209 $ hg clone "ssh://v-alid.example.com/" --debug
1210 1210 running sh -c "read l; read l; read l" v-alid\.example\.com ['"]hg -R \. serve --stdio['"] (re)
1211 1211 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
1212 1212 sending hello command
1213 1213 sending between command
1214 1214 abort: no suitable response from remote hg!
1215 1215 [255]
1216 1216
1217 1217 We should not have created a file named owned - if it exists, the
1218 1218 attack succeeded.
1219 1219 $ if test -f owned; then echo 'you got owned'; fi
1220 1220
1221 1221 Cloning without fsmonitor enabled does not print a warning for small repos
1222 1222
1223 1223 $ hg clone a fsmonitor-default
1224 1224 updating to bookmark @ on branch stable
1225 1225 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1226 1226
1227 1227 Lower the warning threshold to simulate a large repo
1228 1228
1229 1229 $ cat >> $HGRCPATH << EOF
1230 1230 > [fsmonitor]
1231 1231 > warn_update_file_count = 2
1232 1232 > EOF
1233 1233
1234 1234 We should see a warning about no fsmonitor on supported platforms
1235 1235
1236 1236 #if linuxormacos no-fsmonitor
1237 1237 $ hg clone a nofsmonitor
1238 1238 updating to bookmark @ on branch stable
1239 1239 (warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor")
1240 1240 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1241 1241 #else
1242 1242 $ hg clone a nofsmonitor
1243 1243 updating to bookmark @ on branch stable
1244 1244 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1245 1245 #endif
1246 1246
1247 1247 We should not see warning about fsmonitor when it is enabled
1248 1248
1249 1249 #if fsmonitor
1250 1250 $ hg clone a fsmonitor-enabled
1251 1251 updating to bookmark @ on branch stable
1252 1252 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1253 1253 #endif
1254 1254
1255 1255 We can disable the fsmonitor warning
1256 1256
1257 1257 $ hg --config fsmonitor.warn_when_unused=false clone a fsmonitor-disable-warning
1258 1258 updating to bookmark @ on branch stable
1259 1259 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1260 1260
1261 1261 Loaded fsmonitor but disabled in config should still print warning
1262 1262
1263 1263 #if linuxormacos fsmonitor
1264 1264 $ hg --config fsmonitor.mode=off clone a fsmonitor-mode-off
1265 1265 updating to bookmark @ on branch stable
1266 1266 (warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor") (fsmonitor !)
1267 1267 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1268 1268 #endif
1269 1269
1270 1270 Warning not printed if working directory isn't empty
1271 1271
1272 1272 $ hg -q clone a fsmonitor-update
1273 1273 (warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor") (?)
1274 1274 $ cd fsmonitor-update
1275 1275 $ hg up acb14030fe0a
1276 1276 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1277 1277 (leaving bookmark @)
1278 1278 $ hg up cf0fe1914066
1279 1279 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1280 1280
1281 1281 `hg update` from null revision also prints
1282 1282
1283 1283 $ hg up null
1284 1284 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1285 1285
1286 1286 #if linuxormacos no-fsmonitor
1287 1287 $ hg up cf0fe1914066
1288 1288 (warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor")
1289 1289 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1290 1290 #else
1291 1291 $ hg up cf0fe1914066
1292 1292 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1293 1293 #endif
1294 1294
1295 1295 $ cd ..
1296 1296
@@ -1,630 +1,630 b''
1 1 $ cat >> $HGRCPATH <<EOF
2 2 > [extensions]
3 3 > convert=
4 4 > [convert]
5 5 > hg.saverev=False
6 6 > EOF
7 7 $ hg help convert
8 8 hg convert [OPTION]... SOURCE [DEST [REVMAP]]
9 9
10 10 convert a foreign SCM repository to a Mercurial one.
11 11
12 12 Accepted source formats [identifiers]:
13 13
14 14 - Mercurial [hg]
15 15 - CVS [cvs]
16 16 - Darcs [darcs]
17 17 - git [git]
18 18 - Subversion [svn]
19 19 - Monotone [mtn]
20 20 - GNU Arch [gnuarch]
21 21 - Bazaar [bzr]
22 22 - Perforce [p4]
23 23
24 24 Accepted destination formats [identifiers]:
25 25
26 26 - Mercurial [hg]
27 27 - Subversion [svn] (history on branches is not preserved)
28 28
29 29 If no revision is given, all revisions will be converted. Otherwise,
30 30 convert will only import up to the named revision (given in a format
31 31 understood by the source).
32 32
33 33 If no destination directory name is specified, it defaults to the basename
34 34 of the source with "-hg" appended. If the destination repository doesn't
35 35 exist, it will be created.
36 36
37 37 By default, all sources except Mercurial will use --branchsort. Mercurial
38 38 uses --sourcesort to preserve original revision numbers order. Sort modes
39 39 have the following effects:
40 40
41 41 --branchsort convert from parent to child revision when possible, which
42 42 means branches are usually converted one after the other.
43 43 It generates more compact repositories.
44 44 --datesort sort revisions by date. Converted repositories have good-
45 45 looking changelogs but are often an order of magnitude
46 46 larger than the same ones generated by --branchsort.
47 47 --sourcesort try to preserve source revisions order, only supported by
48 48 Mercurial sources.
49 49 --closesort try to move closed revisions as close as possible to parent
50 50 branches, only supported by Mercurial sources.
51 51
52 52 If "REVMAP" isn't given, it will be put in a default location
53 53 ("<dest>/.hg/shamap" by default). The "REVMAP" is a simple text file that
54 54 maps each source commit ID to the destination ID for that revision, like
55 55 so:
56 56
57 57 <source ID> <destination ID>
58 58
59 59 If the file doesn't exist, it's automatically created. It's updated on
60 60 each commit copied, so 'hg convert' can be interrupted and can be run
61 61 repeatedly to copy new commits.
62 62
63 63 The authormap is a simple text file that maps each source commit author to
64 64 a destination commit author. It is handy for source SCMs that use unix
65 65 logins to identify authors (e.g.: CVS). One line per author mapping and
66 66 the line format is:
67 67
68 68 source author = destination author
69 69
70 70 Empty lines and lines starting with a "#" are ignored.
71 71
72 72 The filemap is a file that allows filtering and remapping of files and
73 73 directories. Each line can contain one of the following directives:
74 74
75 75 include path/to/file-or-dir
76 76
77 77 exclude path/to/file-or-dir
78 78
79 79 rename path/to/source path/to/destination
80 80
81 81 Comment lines start with "#". A specified path matches if it equals the
82 82 full relative name of a file or one of its parent directories. The
83 83 "include" or "exclude" directive with the longest matching path applies,
84 84 so line order does not matter.
85 85
86 86 The "include" directive causes a file, or all files under a directory, to
87 87 be included in the destination repository. The default if there are no
88 88 "include" statements is to include everything. If there are any "include"
89 89 statements, nothing else is included. The "exclude" directive causes files
90 90 or directories to be omitted. The "rename" directive renames a file or
91 91 directory if it is converted. To rename from a subdirectory into the root
92 92 of the repository, use "." as the path to rename to.
93 93
94 94 "--full" will make sure the converted changesets contain exactly the right
95 95 files with the right content. It will make a full conversion of all files,
96 96 not just the ones that have changed. Files that already are correct will
97 97 not be changed. This can be used to apply filemap changes when converting
98 98 incrementally. This is currently only supported for Mercurial and
99 99 Subversion.
100 100
101 101 The splicemap is a file that allows insertion of synthetic history,
102 102 letting you specify the parents of a revision. This is useful if you want
103 103 to e.g. give a Subversion merge two parents, or graft two disconnected
104 104 series of history together. Each entry contains a key, followed by a
105 105 space, followed by one or two comma-separated values:
106 106
107 107 key parent1, parent2
108 108
109 109 The key is the revision ID in the source revision control system whose
110 110 parents should be modified (same format as a key in .hg/shamap). The
111 111 values are the revision IDs (in either the source or destination revision
112 112 control system) that should be used as the new parents for that node. For
113 113 example, if you have merged "release-1.0" into "trunk", then you should
114 114 specify the revision on "trunk" as the first parent and the one on the
115 115 "release-1.0" branch as the second.
116 116
117 117 The branchmap is a file that allows you to rename a branch when it is
118 118 being brought in from whatever external repository. When used in
119 119 conjunction with a splicemap, it allows for a powerful combination to help
120 120 fix even the most badly mismanaged repositories and turn them into nicely
121 121 structured Mercurial repositories. The branchmap contains lines of the
122 122 form:
123 123
124 124 original_branch_name new_branch_name
125 125
126 126 where "original_branch_name" is the name of the branch in the source
127 127 repository, and "new_branch_name" is the name of the branch is the
128 128 destination repository. No whitespace is allowed in the new branch name.
129 129 This can be used to (for instance) move code in one repository from
130 130 "default" to a named branch.
131 131
132 132 Mercurial Source
133 133 ################
134 134
135 135 The Mercurial source recognizes the following configuration options, which
136 136 you can set on the command line with "--config":
137 137
138 138 convert.hg.ignoreerrors
139 139 ignore integrity errors when reading. Use it to fix
140 140 Mercurial repositories with missing revlogs, by converting
141 141 from and to Mercurial. Default is False.
142 142 convert.hg.saverev
143 143 store original revision ID in changeset (forces target IDs
144 144 to change). It takes a boolean argument and defaults to
145 145 False.
146 146 convert.hg.startrev
147 147 specify the initial Mercurial revision. The default is 0.
148 148 convert.hg.revs
149 149 revset specifying the source revisions to convert.
150 150
151 151 Bazaar Source
152 152 #############
153 153
154 154 The following options can be used with "--config":
155 155
156 156 convert.bzr.saverev
157 157 whether to store the original Bazaar commit ID in the
158 158 metadata of the destination commit. The default is True.
159 159
160 160 CVS Source
161 161 ##########
162 162
163 163 CVS source will use a sandbox (i.e. a checked-out copy) from CVS to
164 164 indicate the starting point of what will be converted. Direct access to
165 165 the repository files is not needed, unless of course the repository is
166 166 ":local:". The conversion uses the top level directory in the sandbox to
167 167 find the CVS repository, and then uses CVS rlog commands to find files to
168 168 convert. This means that unless a filemap is given, all files under the
169 169 starting directory will be converted, and that any directory
170 170 reorganization in the CVS sandbox is ignored.
171 171
172 172 The following options can be used with "--config":
173 173
174 174 convert.cvsps.cache
175 175 Set to False to disable remote log caching, for testing and
176 176 debugging purposes. Default is True.
177 177 convert.cvsps.fuzz
178 178 Specify the maximum time (in seconds) that is allowed
179 179 between commits with identical user and log message in a
180 180 single changeset. When very large files were checked in as
181 181 part of a changeset then the default may not be long enough.
182 182 The default is 60.
183 183 convert.cvsps.logencoding
184 184 Specify encoding name to be used for transcoding CVS log
185 185 messages. Multiple encoding names can be specified as a list
186 186 (see 'hg help config.Syntax'), but only the first acceptable
187 187 encoding in the list is used per CVS log entries. This
188 188 transcoding is executed before cvslog hook below.
189 189 convert.cvsps.mergeto
190 190 Specify a regular expression to which commit log messages
191 191 are matched. If a match occurs, then the conversion process
192 192 will insert a dummy revision merging the branch on which
193 193 this log message occurs to the branch indicated in the
194 194 regex. Default is "{{mergetobranch ([-\w]+)}}"
195 195 convert.cvsps.mergefrom
196 196 Specify a regular expression to which commit log messages
197 197 are matched. If a match occurs, then the conversion process
198 198 will add the most recent revision on the branch indicated in
199 199 the regex as the second parent of the changeset. Default is
200 200 "{{mergefrombranch ([-\w]+)}}"
201 201 convert.localtimezone
202 202 use local time (as determined by the TZ environment
203 203 variable) for changeset date/times. The default is False
204 204 (use UTC).
205 205 hooks.cvslog Specify a Python function to be called at the end of
206 206 gathering the CVS log. The function is passed a list with
207 207 the log entries, and can modify the entries in-place, or add
208 208 or delete them.
209 209 hooks.cvschangesets
210 210 Specify a Python function to be called after the changesets
211 211 are calculated from the CVS log. The function is passed a
212 212 list with the changeset entries, and can modify the
213 213 changesets in-place, or add or delete them.
214 214
215 215 An additional "debugcvsps" Mercurial command allows the builtin changeset
216 216 merging code to be run without doing a conversion. Its parameters and
217 217 output are similar to that of cvsps 2.1. Please see the command help for
218 218 more details.
219 219
220 220 Subversion Source
221 221 #################
222 222
223 223 Subversion source detects classical trunk/branches/tags layouts. By
224 224 default, the supplied "svn://repo/path/" source URL is converted as a
225 225 single branch. If "svn://repo/path/trunk" exists it replaces the default
226 226 branch. If "svn://repo/path/branches" exists, its subdirectories are
227 227 listed as possible branches. If "svn://repo/path/tags" exists, it is
228 228 looked for tags referencing converted branches. Default "trunk",
229 229 "branches" and "tags" values can be overridden with following options. Set
230 230 them to paths relative to the source URL, or leave them blank to disable
231 231 auto detection.
232 232
233 233 The following options can be set with "--config":
234 234
235 235 convert.svn.branches
236 236 specify the directory containing branches. The default is
237 237 "branches".
238 238 convert.svn.tags
239 239 specify the directory containing tags. The default is
240 240 "tags".
241 241 convert.svn.trunk
242 242 specify the name of the trunk branch. The default is
243 243 "trunk".
244 244 convert.localtimezone
245 245 use local time (as determined by the TZ environment
246 246 variable) for changeset date/times. The default is False
247 247 (use UTC).
248 248
249 249 Source history can be retrieved starting at a specific revision, instead
250 250 of being integrally converted. Only single branch conversions are
251 251 supported.
252 252
253 253 convert.svn.startrev
254 254 specify start Subversion revision number. The default is 0.
255 255
256 256 Git Source
257 257 ##########
258 258
259 259 The Git importer converts commits from all reachable branches (refs in
260 260 refs/heads) and remotes (refs in refs/remotes) to Mercurial. Branches are
261 261 converted to bookmarks with the same name, with the leading 'refs/heads'
262 262 stripped. Git submodules are converted to Git subrepos in Mercurial.
263 263
264 264 The following options can be set with "--config":
265 265
266 266 convert.git.similarity
267 267 specify how similar files modified in a commit must be to be
268 268 imported as renames or copies, as a percentage between "0"
269 269 (disabled) and "100" (files must be identical). For example,
270 270 "90" means that a delete/add pair will be imported as a
271 271 rename if more than 90% of the file hasn't changed. The
272 272 default is "50".
273 273 convert.git.findcopiesharder
274 274 while detecting copies, look at all files in the working
275 275 copy instead of just changed ones. This is very expensive
276 276 for large projects, and is only effective when
277 277 "convert.git.similarity" is greater than 0. The default is
278 278 False.
279 279 convert.git.renamelimit
280 280 perform rename and copy detection up to this many changed
281 281 files in a commit. Increasing this will make rename and copy
282 282 detection more accurate but will significantly slow down
283 283 computation on large projects. The option is only relevant
284 284 if "convert.git.similarity" is greater than 0. The default
285 285 is "400".
286 286 convert.git.committeractions
287 287 list of actions to take when processing author and committer
288 288 values.
289 289
290 290 Git commits have separate author (who wrote the commit) and committer
291 291 (who applied the commit) fields. Not all destinations support separate
292 292 author and committer fields (including Mercurial). This config option
293 293 controls what to do with these author and committer fields during
294 294 conversion.
295 295
296 296 A value of "messagedifferent" will append a "committer: ..." line to
297 297 the commit message if the Git committer is different from the author.
298 298 The prefix of that line can be specified using the syntax
299 299 "messagedifferent=<prefix>". e.g. "messagedifferent=git-committer:".
300 300 When a prefix is specified, a space will always be inserted between
301 301 the prefix and the value.
302 302
303 303 "messagealways" behaves like "messagedifferent" except it will always
304 304 result in a "committer: ..." line being appended to the commit
305 305 message. This value is mutually exclusive with "messagedifferent".
306 306
307 307 "dropcommitter" will remove references to the committer. Only
308 308 references to the author will remain. Actions that add references to
309 309 the committer will have no effect when this is set.
310 310
311 311 "replaceauthor" will replace the value of the author field with the
312 312 committer. Other actions that add references to the committer will
313 313 still take effect when this is set.
314 314
315 315 The default is "messagedifferent".
316 316
317 317 convert.git.extrakeys
318 318 list of extra keys from commit metadata to copy to the
319 319 destination. Some Git repositories store extra metadata in
320 320 commits. By default, this non-default metadata will be lost
321 321 during conversion. Setting this config option can retain
322 322 that metadata. Some built-in keys such as "parent" and
323 323 "branch" are not allowed to be copied.
324 324 convert.git.remoteprefix
325 325 remote refs are converted as bookmarks with
326 326 "convert.git.remoteprefix" as a prefix followed by a /. The
327 327 default is 'remote'.
328 328 convert.git.saverev
329 329 whether to store the original Git commit ID in the metadata
330 330 of the destination commit. The default is True.
331 331 convert.git.skipsubmodules
332 332 does not convert root level .gitmodules files or files with
333 333 160000 mode indicating a submodule. Default is False.
334 334
335 335 Perforce Source
336 336 ###############
337 337
338 338 The Perforce (P4) importer can be given a p4 depot path or a client
339 339 specification as source. It will convert all files in the source to a flat
340 340 Mercurial repository, ignoring labels, branches and integrations. Note
341 341 that when a depot path is given you then usually should specify a target
342 342 directory, because otherwise the target may be named "...-hg".
343 343
344 344 The following options can be set with "--config":
345 345
346 346 convert.p4.encoding
347 347 specify the encoding to use when decoding standard output of
348 348 the Perforce command line tool. The default is default
349 349 system encoding.
350 350 convert.p4.startrev
351 351 specify initial Perforce revision (a Perforce changelist
352 352 number).
353 353
354 354 Mercurial Destination
355 355 #####################
356 356
357 357 The Mercurial destination will recognize Mercurial subrepositories in the
358 358 destination directory, and update the .hgsubstate file automatically if
359 359 the destination subrepositories contain the <dest>/<sub>/.hg/shamap file.
360 360 Converting a repository with subrepositories requires converting a single
361 361 repository at a time, from the bottom up.
362 362
363 363 The following options are supported:
364 364
365 365 convert.hg.clonebranches
366 366 dispatch source branches in separate clones. The default is
367 367 False.
368 368 convert.hg.tagsbranch
369 369 branch name for tag revisions, defaults to "default".
370 370 convert.hg.usebranchnames
371 371 preserve branch names. The default is True.
372 372 convert.hg.sourcename
373 373 records the given string as a 'convert_source' extra value
374 374 on each commit made in the target repository. The default is
375 375 None.
376 376
377 377 All Destinations
378 378 ################
379 379
380 380 All destination types accept the following options:
381 381
382 382 convert.skiptags
383 383 does not convert tags from the source repo to the target
384 384 repo. The default is False.
385 385
386 386 options ([+] can be repeated):
387 387
388 388 -s --source-type TYPE source repository type
389 389 -d --dest-type TYPE destination repository type
390 390 -r --rev REV [+] import up to source revision REV
391 391 -A --authormap FILE remap usernames using this file
392 392 --filemap FILE remap file names using contents of file
393 393 --full apply filemap changes by converting all files again
394 394 --splicemap FILE splice synthesized history into place
395 395 --branchmap FILE change branch names while converting
396 396 --branchsort try to sort changesets by branches
397 397 --datesort try to sort changesets by date
398 398 --sourcesort preserve source changesets order
399 399 --closesort try to reorder closed revisions
400 400
401 401 (some details hidden, use --verbose to show complete help)
402 402 $ hg init a
403 403 $ cd a
404 404 $ echo a > a
405 405 $ hg ci -d'0 0' -Ama
406 406 adding a
407 407 $ hg cp a b
408 408 $ hg ci -d'1 0' -mb
409 409 $ hg rm a
410 410 $ hg ci -d'2 0' -mc
411 411 $ hg mv b a
412 412 $ hg ci -d'3 0' -md
413 413 $ echo a >> a
414 414 $ hg ci -d'4 0' -me
415 415 $ cd ..
416 416 $ hg convert a 2>&1 | grep -v 'subversion python bindings could not be loaded'
417 417 assuming destination a-hg
418 418 initializing destination a-hg repository
419 419 scanning source...
420 420 sorting...
421 421 converting...
422 422 4 a
423 423 3 b
424 424 2 c
425 425 1 d
426 426 0 e
427 427 $ hg --cwd a-hg pull ../a
428 428 pulling from ../a
429 429 searching for changes
430 430 no changes found
431 431 5 local changesets published
432 432
433 433 conversion to existing file should fail
434 434
435 435 $ touch bogusfile
436 436 $ hg convert a bogusfile
437 437 initializing destination bogusfile repository
438 438 abort: cannot create new bundle repository
439 439 [255]
440 440
441 441 #if unix-permissions no-root
442 442
443 443 conversion to dir without permissions should fail
444 444
445 445 $ mkdir bogusdir
446 446 $ chmod 000 bogusdir
447 447
448 448 $ hg convert a bogusdir
449 abort: Permission denied: 'bogusdir'
449 abort: Permission denied: *bogusdir* (glob)
450 450 [255]
451 451
452 452 user permissions should succeed
453 453
454 454 $ chmod 700 bogusdir
455 455 $ hg convert a bogusdir
456 456 initializing destination bogusdir repository
457 457 scanning source...
458 458 sorting...
459 459 converting...
460 460 4 a
461 461 3 b
462 462 2 c
463 463 1 d
464 464 0 e
465 465
466 466 #endif
467 467
468 468 test pre and post conversion actions
469 469
470 470 $ echo 'include b' > filemap
471 471 $ hg convert --debug --filemap filemap a partialb | \
472 472 > grep 'run hg'
473 473 run hg source pre-conversion action
474 474 run hg sink pre-conversion action
475 475 run hg sink post-conversion action
476 476 run hg source post-conversion action
477 477
478 478 converting empty dir should fail "nicely
479 479
480 480 $ mkdir emptydir
481 481
482 482 override $PATH to ensure p4 not visible; use $PYTHON in case we're
483 483 running from a devel copy, not a temp installation
484 484
485 485 $ PATH="$BINDIR" "$PYTHON" "$BINDIR"/hg convert emptydir
486 486 assuming destination emptydir-hg
487 487 initializing destination emptydir-hg repository
488 488 emptydir does not look like a CVS checkout
489 489 $TESTTMP/emptydir does not look like a Git repository
490 490 emptydir does not look like a Subversion repository
491 491 emptydir is not a local Mercurial repository
492 492 emptydir does not look like a darcs repository
493 493 emptydir does not look like a monotone repository
494 494 emptydir does not look like a GNU Arch repository
495 495 emptydir does not look like a Bazaar repository
496 496 cannot find required "p4" tool
497 497 abort: emptydir: missing or unsupported repository
498 498 [255]
499 499
500 500 convert with imaginary source type
501 501
502 502 $ hg convert --source-type foo a a-foo
503 503 initializing destination a-foo repository
504 504 abort: foo: invalid source repository type
505 505 [255]
506 506
507 507 convert with imaginary sink type
508 508
509 509 $ hg convert --dest-type foo a a-foo
510 510 abort: foo: invalid destination repository type
511 511 [255]
512 512
513 513 testing: convert must not produce duplicate entries in fncache
514 514
515 515 $ hg convert a b
516 516 initializing destination b repository
517 517 scanning source...
518 518 sorting...
519 519 converting...
520 520 4 a
521 521 3 b
522 522 2 c
523 523 1 d
524 524 0 e
525 525
526 526 contents of fncache file:
527 527
528 528 #if repofncache
529 529 $ cat b/.hg/store/fncache | sort
530 530 data/a.i (reporevlogstore !)
531 531 data/b.i (reporevlogstore !)
532 532 #endif
533 533
534 534 test bogus URL
535 535
536 536 #if no-msys
537 537 $ hg convert -q bzr+ssh://foobar@selenic.com/baz baz
538 538 abort: bzr+ssh://foobar@selenic.com/baz: missing or unsupported repository
539 539 [255]
540 540 #endif
541 541
542 542 test revset converted() lookup
543 543
544 544 $ hg --config convert.hg.saverev=True convert a c
545 545 initializing destination c repository
546 546 scanning source...
547 547 sorting...
548 548 converting...
549 549 4 a
550 550 3 b
551 551 2 c
552 552 1 d
553 553 0 e
554 554 $ echo f > c/f
555 555 $ hg -R c ci -d'0 0' -Amf
556 556 adding f
557 557 created new head
558 558 $ hg -R c log -r "converted(09d945a62ce6)"
559 559 changeset: 1:98c3dd46a874
560 560 user: test
561 561 date: Thu Jan 01 00:00:01 1970 +0000
562 562 summary: b
563 563
564 564 $ hg -R c log -r "converted()"
565 565 changeset: 0:31ed57b2037c
566 566 user: test
567 567 date: Thu Jan 01 00:00:00 1970 +0000
568 568 summary: a
569 569
570 570 changeset: 1:98c3dd46a874
571 571 user: test
572 572 date: Thu Jan 01 00:00:01 1970 +0000
573 573 summary: b
574 574
575 575 changeset: 2:3b9ca06ef716
576 576 user: test
577 577 date: Thu Jan 01 00:00:02 1970 +0000
578 578 summary: c
579 579
580 580 changeset: 3:4e0debd37cf2
581 581 user: test
582 582 date: Thu Jan 01 00:00:03 1970 +0000
583 583 summary: d
584 584
585 585 changeset: 4:9de3bc9349c5
586 586 user: test
587 587 date: Thu Jan 01 00:00:04 1970 +0000
588 588 summary: e
589 589
590 590
591 591 test specifying a sourcename
592 592 $ echo g > a/g
593 593 $ hg -R a ci -d'0 0' -Amg
594 594 adding g
595 595 $ hg --config convert.hg.sourcename=mysource --config convert.hg.saverev=True convert a c
596 596 scanning source...
597 597 sorting...
598 598 converting...
599 599 0 g
600 600 $ hg -R c log -r tip --template '{extras % "{extra}\n"}'
601 601 branch=default
602 602 convert_revision=a3bc6100aa8ec03e00aaf271f1f50046fb432072
603 603 convert_source=mysource
604 604
605 605 $ cat > branchmap.txt << EOF
606 606 > old branch new_branch
607 607 > EOF
608 608
609 609 $ hg -R a branch -q 'old branch'
610 610 $ echo gg > a/g
611 611 $ hg -R a ci -m 'branch name with spaces'
612 612 $ hg convert --branchmap branchmap.txt a d
613 613 initializing destination d repository
614 614 scanning source...
615 615 sorting...
616 616 converting...
617 617 6 a
618 618 5 b
619 619 4 c
620 620 3 d
621 621 2 e
622 622 1 g
623 623 0 branch name with spaces
624 624
625 625 $ hg -R a branches
626 626 old branch 6:a24a66ade009
627 627 default 5:a3bc6100aa8e (inactive)
628 628 $ hg -R d branches
629 629 new_branch 6:64ed208b732b
630 630 default 5:a3bc6100aa8e (inactive)
General Comments 0
You need to be logged in to leave comments. Login now