##// END OF EJS Templates
discovery: add a discovery.grow-sample.rate...
marmoute -
r47018:f17b6e40 default
parent child Browse files
Show More
@@ -1,2564 +1,2570 b''
1 1 # configitems.py - centralized declaration of configuration option
2 2 #
3 3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
4 4 #
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2 or any later version.
7 7
8 8 from __future__ import absolute_import
9 9
10 10 import functools
11 11 import re
12 12
13 13 from . import (
14 14 encoding,
15 15 error,
16 16 )
17 17
18 18
19 19 def loadconfigtable(ui, extname, configtable):
20 20 """update config item known to the ui with the extension ones"""
21 21 for section, items in sorted(configtable.items()):
22 22 knownitems = ui._knownconfig.setdefault(section, itemregister())
23 23 knownkeys = set(knownitems)
24 24 newkeys = set(items)
25 25 for key in sorted(knownkeys & newkeys):
26 26 msg = b"extension '%s' overwrite config item '%s.%s'"
27 27 msg %= (extname, section, key)
28 28 ui.develwarn(msg, config=b'warn-config')
29 29
30 30 knownitems.update(items)
31 31
32 32
33 33 class configitem(object):
34 34 """represent a known config item
35 35
36 36 :section: the official config section where to find this item,
37 37 :name: the official name within the section,
38 38 :default: default value for this item,
39 39 :alias: optional list of tuples as alternatives,
40 40 :generic: this is a generic definition, match name using regular expression.
41 41 """
42 42
43 43 def __init__(
44 44 self,
45 45 section,
46 46 name,
47 47 default=None,
48 48 alias=(),
49 49 generic=False,
50 50 priority=0,
51 51 experimental=False,
52 52 ):
53 53 self.section = section
54 54 self.name = name
55 55 self.default = default
56 56 self.alias = list(alias)
57 57 self.generic = generic
58 58 self.priority = priority
59 59 self.experimental = experimental
60 60 self._re = None
61 61 if generic:
62 62 self._re = re.compile(self.name)
63 63
64 64
65 65 class itemregister(dict):
66 66 """A specialized dictionary that can handle wild-card selection"""
67 67
68 68 def __init__(self):
69 69 super(itemregister, self).__init__()
70 70 self._generics = set()
71 71
72 72 def update(self, other):
73 73 super(itemregister, self).update(other)
74 74 self._generics.update(other._generics)
75 75
76 76 def __setitem__(self, key, item):
77 77 super(itemregister, self).__setitem__(key, item)
78 78 if item.generic:
79 79 self._generics.add(item)
80 80
81 81 def get(self, key):
82 82 baseitem = super(itemregister, self).get(key)
83 83 if baseitem is not None and not baseitem.generic:
84 84 return baseitem
85 85
86 86 # search for a matching generic item
87 87 generics = sorted(self._generics, key=(lambda x: (x.priority, x.name)))
88 88 for item in generics:
89 89 # we use 'match' instead of 'search' to make the matching simpler
90 90 # for people unfamiliar with regular expression. Having the match
91 91 # rooted to the start of the string will produce less surprising
92 92 # result for user writing simple regex for sub-attribute.
93 93 #
94 94 # For example using "color\..*" match produces an unsurprising
95 95 # result, while using search could suddenly match apparently
96 96 # unrelated configuration that happens to contains "color."
97 97 # anywhere. This is a tradeoff where we favor requiring ".*" on
98 98 # some match to avoid the need to prefix most pattern with "^".
99 99 # The "^" seems more error prone.
100 100 if item._re.match(key):
101 101 return item
102 102
103 103 return None
104 104
105 105
106 106 coreitems = {}
107 107
108 108
109 109 def _register(configtable, *args, **kwargs):
110 110 item = configitem(*args, **kwargs)
111 111 section = configtable.setdefault(item.section, itemregister())
112 112 if item.name in section:
113 113 msg = b"duplicated config item registration for '%s.%s'"
114 114 raise error.ProgrammingError(msg % (item.section, item.name))
115 115 section[item.name] = item
116 116
117 117
118 118 # special value for case where the default is derived from other values
119 119 dynamicdefault = object()
120 120
121 121 # Registering actual config items
122 122
123 123
124 124 def getitemregister(configtable):
125 125 f = functools.partial(_register, configtable)
126 126 # export pseudo enum as configitem.*
127 127 f.dynamicdefault = dynamicdefault
128 128 return f
129 129
130 130
131 131 coreconfigitem = getitemregister(coreitems)
132 132
133 133
134 134 def _registerdiffopts(section, configprefix=b''):
135 135 coreconfigitem(
136 136 section,
137 137 configprefix + b'nodates',
138 138 default=False,
139 139 )
140 140 coreconfigitem(
141 141 section,
142 142 configprefix + b'showfunc',
143 143 default=False,
144 144 )
145 145 coreconfigitem(
146 146 section,
147 147 configprefix + b'unified',
148 148 default=None,
149 149 )
150 150 coreconfigitem(
151 151 section,
152 152 configprefix + b'git',
153 153 default=False,
154 154 )
155 155 coreconfigitem(
156 156 section,
157 157 configprefix + b'ignorews',
158 158 default=False,
159 159 )
160 160 coreconfigitem(
161 161 section,
162 162 configprefix + b'ignorewsamount',
163 163 default=False,
164 164 )
165 165 coreconfigitem(
166 166 section,
167 167 configprefix + b'ignoreblanklines',
168 168 default=False,
169 169 )
170 170 coreconfigitem(
171 171 section,
172 172 configprefix + b'ignorewseol',
173 173 default=False,
174 174 )
175 175 coreconfigitem(
176 176 section,
177 177 configprefix + b'nobinary',
178 178 default=False,
179 179 )
180 180 coreconfigitem(
181 181 section,
182 182 configprefix + b'noprefix',
183 183 default=False,
184 184 )
185 185 coreconfigitem(
186 186 section,
187 187 configprefix + b'word-diff',
188 188 default=False,
189 189 )
190 190
191 191
192 192 coreconfigitem(
193 193 b'alias',
194 194 b'.*',
195 195 default=dynamicdefault,
196 196 generic=True,
197 197 )
198 198 coreconfigitem(
199 199 b'auth',
200 200 b'cookiefile',
201 201 default=None,
202 202 )
203 203 _registerdiffopts(section=b'annotate')
204 204 # bookmarks.pushing: internal hack for discovery
205 205 coreconfigitem(
206 206 b'bookmarks',
207 207 b'pushing',
208 208 default=list,
209 209 )
210 210 # bundle.mainreporoot: internal hack for bundlerepo
211 211 coreconfigitem(
212 212 b'bundle',
213 213 b'mainreporoot',
214 214 default=b'',
215 215 )
216 216 coreconfigitem(
217 217 b'censor',
218 218 b'policy',
219 219 default=b'abort',
220 220 experimental=True,
221 221 )
222 222 coreconfigitem(
223 223 b'chgserver',
224 224 b'idletimeout',
225 225 default=3600,
226 226 )
227 227 coreconfigitem(
228 228 b'chgserver',
229 229 b'skiphash',
230 230 default=False,
231 231 )
232 232 coreconfigitem(
233 233 b'cmdserver',
234 234 b'log',
235 235 default=None,
236 236 )
237 237 coreconfigitem(
238 238 b'cmdserver',
239 239 b'max-log-files',
240 240 default=7,
241 241 )
242 242 coreconfigitem(
243 243 b'cmdserver',
244 244 b'max-log-size',
245 245 default=b'1 MB',
246 246 )
247 247 coreconfigitem(
248 248 b'cmdserver',
249 249 b'max-repo-cache',
250 250 default=0,
251 251 experimental=True,
252 252 )
253 253 coreconfigitem(
254 254 b'cmdserver',
255 255 b'message-encodings',
256 256 default=list,
257 257 )
258 258 coreconfigitem(
259 259 b'cmdserver',
260 260 b'track-log',
261 261 default=lambda: [b'chgserver', b'cmdserver', b'repocache'],
262 262 )
263 263 coreconfigitem(
264 264 b'cmdserver',
265 265 b'shutdown-on-interrupt',
266 266 default=True,
267 267 )
268 268 coreconfigitem(
269 269 b'color',
270 270 b'.*',
271 271 default=None,
272 272 generic=True,
273 273 )
274 274 coreconfigitem(
275 275 b'color',
276 276 b'mode',
277 277 default=b'auto',
278 278 )
279 279 coreconfigitem(
280 280 b'color',
281 281 b'pagermode',
282 282 default=dynamicdefault,
283 283 )
284 284 coreconfigitem(
285 285 b'command-templates',
286 286 b'graphnode',
287 287 default=None,
288 288 alias=[(b'ui', b'graphnodetemplate')],
289 289 )
290 290 coreconfigitem(
291 291 b'command-templates',
292 292 b'log',
293 293 default=None,
294 294 alias=[(b'ui', b'logtemplate')],
295 295 )
296 296 coreconfigitem(
297 297 b'command-templates',
298 298 b'mergemarker',
299 299 default=(
300 300 b'{node|short} '
301 301 b'{ifeq(tags, "tip", "", '
302 302 b'ifeq(tags, "", "", "{tags} "))}'
303 303 b'{if(bookmarks, "{bookmarks} ")}'
304 304 b'{ifeq(branch, "default", "", "{branch} ")}'
305 305 b'- {author|user}: {desc|firstline}'
306 306 ),
307 307 alias=[(b'ui', b'mergemarkertemplate')],
308 308 )
309 309 coreconfigitem(
310 310 b'command-templates',
311 311 b'pre-merge-tool-output',
312 312 default=None,
313 313 alias=[(b'ui', b'pre-merge-tool-output-template')],
314 314 )
315 315 coreconfigitem(
316 316 b'command-templates',
317 317 b'oneline-summary',
318 318 default=None,
319 319 )
320 320 coreconfigitem(
321 321 b'command-templates',
322 322 b'oneline-summary.*',
323 323 default=dynamicdefault,
324 324 generic=True,
325 325 )
326 326 _registerdiffopts(section=b'commands', configprefix=b'commit.interactive.')
327 327 coreconfigitem(
328 328 b'commands',
329 329 b'commit.post-status',
330 330 default=False,
331 331 )
332 332 coreconfigitem(
333 333 b'commands',
334 334 b'grep.all-files',
335 335 default=False,
336 336 experimental=True,
337 337 )
338 338 coreconfigitem(
339 339 b'commands',
340 340 b'merge.require-rev',
341 341 default=False,
342 342 )
343 343 coreconfigitem(
344 344 b'commands',
345 345 b'push.require-revs',
346 346 default=False,
347 347 )
348 348 coreconfigitem(
349 349 b'commands',
350 350 b'resolve.confirm',
351 351 default=False,
352 352 )
353 353 coreconfigitem(
354 354 b'commands',
355 355 b'resolve.explicit-re-merge',
356 356 default=False,
357 357 )
358 358 coreconfigitem(
359 359 b'commands',
360 360 b'resolve.mark-check',
361 361 default=b'none',
362 362 )
363 363 _registerdiffopts(section=b'commands', configprefix=b'revert.interactive.')
364 364 coreconfigitem(
365 365 b'commands',
366 366 b'show.aliasprefix',
367 367 default=list,
368 368 )
369 369 coreconfigitem(
370 370 b'commands',
371 371 b'status.relative',
372 372 default=False,
373 373 )
374 374 coreconfigitem(
375 375 b'commands',
376 376 b'status.skipstates',
377 377 default=[],
378 378 experimental=True,
379 379 )
380 380 coreconfigitem(
381 381 b'commands',
382 382 b'status.terse',
383 383 default=b'',
384 384 )
385 385 coreconfigitem(
386 386 b'commands',
387 387 b'status.verbose',
388 388 default=False,
389 389 )
390 390 coreconfigitem(
391 391 b'commands',
392 392 b'update.check',
393 393 default=None,
394 394 )
395 395 coreconfigitem(
396 396 b'commands',
397 397 b'update.requiredest',
398 398 default=False,
399 399 )
400 400 coreconfigitem(
401 401 b'committemplate',
402 402 b'.*',
403 403 default=None,
404 404 generic=True,
405 405 )
406 406 coreconfigitem(
407 407 b'convert',
408 408 b'bzr.saverev',
409 409 default=True,
410 410 )
411 411 coreconfigitem(
412 412 b'convert',
413 413 b'cvsps.cache',
414 414 default=True,
415 415 )
416 416 coreconfigitem(
417 417 b'convert',
418 418 b'cvsps.fuzz',
419 419 default=60,
420 420 )
421 421 coreconfigitem(
422 422 b'convert',
423 423 b'cvsps.logencoding',
424 424 default=None,
425 425 )
426 426 coreconfigitem(
427 427 b'convert',
428 428 b'cvsps.mergefrom',
429 429 default=None,
430 430 )
431 431 coreconfigitem(
432 432 b'convert',
433 433 b'cvsps.mergeto',
434 434 default=None,
435 435 )
436 436 coreconfigitem(
437 437 b'convert',
438 438 b'git.committeractions',
439 439 default=lambda: [b'messagedifferent'],
440 440 )
441 441 coreconfigitem(
442 442 b'convert',
443 443 b'git.extrakeys',
444 444 default=list,
445 445 )
446 446 coreconfigitem(
447 447 b'convert',
448 448 b'git.findcopiesharder',
449 449 default=False,
450 450 )
451 451 coreconfigitem(
452 452 b'convert',
453 453 b'git.remoteprefix',
454 454 default=b'remote',
455 455 )
456 456 coreconfigitem(
457 457 b'convert',
458 458 b'git.renamelimit',
459 459 default=400,
460 460 )
461 461 coreconfigitem(
462 462 b'convert',
463 463 b'git.saverev',
464 464 default=True,
465 465 )
466 466 coreconfigitem(
467 467 b'convert',
468 468 b'git.similarity',
469 469 default=50,
470 470 )
471 471 coreconfigitem(
472 472 b'convert',
473 473 b'git.skipsubmodules',
474 474 default=False,
475 475 )
476 476 coreconfigitem(
477 477 b'convert',
478 478 b'hg.clonebranches',
479 479 default=False,
480 480 )
481 481 coreconfigitem(
482 482 b'convert',
483 483 b'hg.ignoreerrors',
484 484 default=False,
485 485 )
486 486 coreconfigitem(
487 487 b'convert',
488 488 b'hg.preserve-hash',
489 489 default=False,
490 490 )
491 491 coreconfigitem(
492 492 b'convert',
493 493 b'hg.revs',
494 494 default=None,
495 495 )
496 496 coreconfigitem(
497 497 b'convert',
498 498 b'hg.saverev',
499 499 default=False,
500 500 )
501 501 coreconfigitem(
502 502 b'convert',
503 503 b'hg.sourcename',
504 504 default=None,
505 505 )
506 506 coreconfigitem(
507 507 b'convert',
508 508 b'hg.startrev',
509 509 default=None,
510 510 )
511 511 coreconfigitem(
512 512 b'convert',
513 513 b'hg.tagsbranch',
514 514 default=b'default',
515 515 )
516 516 coreconfigitem(
517 517 b'convert',
518 518 b'hg.usebranchnames',
519 519 default=True,
520 520 )
521 521 coreconfigitem(
522 522 b'convert',
523 523 b'ignoreancestorcheck',
524 524 default=False,
525 525 experimental=True,
526 526 )
527 527 coreconfigitem(
528 528 b'convert',
529 529 b'localtimezone',
530 530 default=False,
531 531 )
532 532 coreconfigitem(
533 533 b'convert',
534 534 b'p4.encoding',
535 535 default=dynamicdefault,
536 536 )
537 537 coreconfigitem(
538 538 b'convert',
539 539 b'p4.startrev',
540 540 default=0,
541 541 )
542 542 coreconfigitem(
543 543 b'convert',
544 544 b'skiptags',
545 545 default=False,
546 546 )
547 547 coreconfigitem(
548 548 b'convert',
549 549 b'svn.debugsvnlog',
550 550 default=True,
551 551 )
552 552 coreconfigitem(
553 553 b'convert',
554 554 b'svn.trunk',
555 555 default=None,
556 556 )
557 557 coreconfigitem(
558 558 b'convert',
559 559 b'svn.tags',
560 560 default=None,
561 561 )
562 562 coreconfigitem(
563 563 b'convert',
564 564 b'svn.branches',
565 565 default=None,
566 566 )
567 567 coreconfigitem(
568 568 b'convert',
569 569 b'svn.startrev',
570 570 default=0,
571 571 )
572 572 coreconfigitem(
573 573 b'debug',
574 574 b'dirstate.delaywrite',
575 575 default=0,
576 576 )
577 577 coreconfigitem(
578 578 b'defaults',
579 579 b'.*',
580 580 default=None,
581 581 generic=True,
582 582 )
583 583 coreconfigitem(
584 584 b'devel',
585 585 b'all-warnings',
586 586 default=False,
587 587 )
588 588 coreconfigitem(
589 589 b'devel',
590 590 b'bundle2.debug',
591 591 default=False,
592 592 )
593 593 coreconfigitem(
594 594 b'devel',
595 595 b'bundle.delta',
596 596 default=b'',
597 597 )
598 598 coreconfigitem(
599 599 b'devel',
600 600 b'cache-vfs',
601 601 default=None,
602 602 )
603 603 coreconfigitem(
604 604 b'devel',
605 605 b'check-locks',
606 606 default=False,
607 607 )
608 608 coreconfigitem(
609 609 b'devel',
610 610 b'check-relroot',
611 611 default=False,
612 612 )
613 613 coreconfigitem(
614 614 b'devel',
615 615 b'default-date',
616 616 default=None,
617 617 )
618 618 coreconfigitem(
619 619 b'devel',
620 620 b'deprec-warn',
621 621 default=False,
622 622 )
623 623 coreconfigitem(
624 624 b'devel',
625 625 b'disableloaddefaultcerts',
626 626 default=False,
627 627 )
628 628 coreconfigitem(
629 629 b'devel',
630 630 b'warn-empty-changegroup',
631 631 default=False,
632 632 )
633 633 coreconfigitem(
634 634 b'devel',
635 635 b'legacy.exchange',
636 636 default=list,
637 637 )
638 638 coreconfigitem(
639 639 b'devel',
640 640 b'persistent-nodemap',
641 641 default=False,
642 642 )
643 643 coreconfigitem(
644 644 b'devel',
645 645 b'servercafile',
646 646 default=b'',
647 647 )
648 648 coreconfigitem(
649 649 b'devel',
650 650 b'serverexactprotocol',
651 651 default=b'',
652 652 )
653 653 coreconfigitem(
654 654 b'devel',
655 655 b'serverrequirecert',
656 656 default=False,
657 657 )
658 658 coreconfigitem(
659 659 b'devel',
660 660 b'strip-obsmarkers',
661 661 default=True,
662 662 )
663 663 coreconfigitem(
664 664 b'devel',
665 665 b'warn-config',
666 666 default=None,
667 667 )
668 668 coreconfigitem(
669 669 b'devel',
670 670 b'warn-config-default',
671 671 default=None,
672 672 )
673 673 coreconfigitem(
674 674 b'devel',
675 675 b'user.obsmarker',
676 676 default=None,
677 677 )
678 678 coreconfigitem(
679 679 b'devel',
680 680 b'warn-config-unknown',
681 681 default=None,
682 682 )
683 683 coreconfigitem(
684 684 b'devel',
685 685 b'debug.copies',
686 686 default=False,
687 687 )
688 688 coreconfigitem(
689 689 b'devel',
690 690 b'debug.extensions',
691 691 default=False,
692 692 )
693 693 coreconfigitem(
694 694 b'devel',
695 695 b'debug.repo-filters',
696 696 default=False,
697 697 )
698 698 coreconfigitem(
699 699 b'devel',
700 700 b'debug.peer-request',
701 701 default=False,
702 702 )
703 703 # If discovery.grow-sample is False, the sample size used in set discovery will
704 704 # not be increased through the process
705 705 coreconfigitem(
706 706 b'devel',
707 707 b'discovery.grow-sample',
708 708 default=True,
709 709 )
710 # discovery.grow-sample.rate control the rate at which the sample grow
711 coreconfigitem(
712 b'devel',
713 b'discovery.grow-sample.rate',
714 default=1.05,
715 )
710 716 # If discovery.randomize is False, random sampling during discovery are
711 717 # deterministic. It is meant for integration tests.
712 718 coreconfigitem(
713 719 b'devel',
714 720 b'discovery.randomize',
715 721 default=True,
716 722 )
717 723 _registerdiffopts(section=b'diff')
718 724 coreconfigitem(
719 725 b'email',
720 726 b'bcc',
721 727 default=None,
722 728 )
723 729 coreconfigitem(
724 730 b'email',
725 731 b'cc',
726 732 default=None,
727 733 )
728 734 coreconfigitem(
729 735 b'email',
730 736 b'charsets',
731 737 default=list,
732 738 )
733 739 coreconfigitem(
734 740 b'email',
735 741 b'from',
736 742 default=None,
737 743 )
738 744 coreconfigitem(
739 745 b'email',
740 746 b'method',
741 747 default=b'smtp',
742 748 )
743 749 coreconfigitem(
744 750 b'email',
745 751 b'reply-to',
746 752 default=None,
747 753 )
748 754 coreconfigitem(
749 755 b'email',
750 756 b'to',
751 757 default=None,
752 758 )
753 759 coreconfigitem(
754 760 b'experimental',
755 761 b'archivemetatemplate',
756 762 default=dynamicdefault,
757 763 )
758 764 coreconfigitem(
759 765 b'experimental',
760 766 b'auto-publish',
761 767 default=b'publish',
762 768 )
763 769 coreconfigitem(
764 770 b'experimental',
765 771 b'bundle-phases',
766 772 default=False,
767 773 )
768 774 coreconfigitem(
769 775 b'experimental',
770 776 b'bundle2-advertise',
771 777 default=True,
772 778 )
773 779 coreconfigitem(
774 780 b'experimental',
775 781 b'bundle2-output-capture',
776 782 default=False,
777 783 )
778 784 coreconfigitem(
779 785 b'experimental',
780 786 b'bundle2.pushback',
781 787 default=False,
782 788 )
783 789 coreconfigitem(
784 790 b'experimental',
785 791 b'bundle2lazylocking',
786 792 default=False,
787 793 )
788 794 coreconfigitem(
789 795 b'experimental',
790 796 b'bundlecomplevel',
791 797 default=None,
792 798 )
793 799 coreconfigitem(
794 800 b'experimental',
795 801 b'bundlecomplevel.bzip2',
796 802 default=None,
797 803 )
798 804 coreconfigitem(
799 805 b'experimental',
800 806 b'bundlecomplevel.gzip',
801 807 default=None,
802 808 )
803 809 coreconfigitem(
804 810 b'experimental',
805 811 b'bundlecomplevel.none',
806 812 default=None,
807 813 )
808 814 coreconfigitem(
809 815 b'experimental',
810 816 b'bundlecomplevel.zstd',
811 817 default=None,
812 818 )
813 819 coreconfigitem(
814 820 b'experimental',
815 821 b'changegroup3',
816 822 default=False,
817 823 )
818 824 coreconfigitem(
819 825 b'experimental',
820 826 b'cleanup-as-archived',
821 827 default=False,
822 828 )
823 829 coreconfigitem(
824 830 b'experimental',
825 831 b'clientcompressionengines',
826 832 default=list,
827 833 )
828 834 coreconfigitem(
829 835 b'experimental',
830 836 b'copytrace',
831 837 default=b'on',
832 838 )
833 839 coreconfigitem(
834 840 b'experimental',
835 841 b'copytrace.movecandidateslimit',
836 842 default=100,
837 843 )
838 844 coreconfigitem(
839 845 b'experimental',
840 846 b'copytrace.sourcecommitlimit',
841 847 default=100,
842 848 )
843 849 coreconfigitem(
844 850 b'experimental',
845 851 b'copies.read-from',
846 852 default=b"filelog-only",
847 853 )
848 854 coreconfigitem(
849 855 b'experimental',
850 856 b'copies.write-to',
851 857 default=b'filelog-only',
852 858 )
853 859 coreconfigitem(
854 860 b'experimental',
855 861 b'crecordtest',
856 862 default=None,
857 863 )
858 864 coreconfigitem(
859 865 b'experimental',
860 866 b'directaccess',
861 867 default=False,
862 868 )
863 869 coreconfigitem(
864 870 b'experimental',
865 871 b'directaccess.revnums',
866 872 default=False,
867 873 )
868 874 coreconfigitem(
869 875 b'experimental',
870 876 b'editortmpinhg',
871 877 default=False,
872 878 )
873 879 coreconfigitem(
874 880 b'experimental',
875 881 b'evolution',
876 882 default=list,
877 883 )
878 884 coreconfigitem(
879 885 b'experimental',
880 886 b'evolution.allowdivergence',
881 887 default=False,
882 888 alias=[(b'experimental', b'allowdivergence')],
883 889 )
884 890 coreconfigitem(
885 891 b'experimental',
886 892 b'evolution.allowunstable',
887 893 default=None,
888 894 )
889 895 coreconfigitem(
890 896 b'experimental',
891 897 b'evolution.createmarkers',
892 898 default=None,
893 899 )
894 900 coreconfigitem(
895 901 b'experimental',
896 902 b'evolution.effect-flags',
897 903 default=True,
898 904 alias=[(b'experimental', b'effect-flags')],
899 905 )
900 906 coreconfigitem(
901 907 b'experimental',
902 908 b'evolution.exchange',
903 909 default=None,
904 910 )
905 911 coreconfigitem(
906 912 b'experimental',
907 913 b'evolution.bundle-obsmarker',
908 914 default=False,
909 915 )
910 916 coreconfigitem(
911 917 b'experimental',
912 918 b'evolution.bundle-obsmarker:mandatory',
913 919 default=True,
914 920 )
915 921 coreconfigitem(
916 922 b'experimental',
917 923 b'log.topo',
918 924 default=False,
919 925 )
920 926 coreconfigitem(
921 927 b'experimental',
922 928 b'evolution.report-instabilities',
923 929 default=True,
924 930 )
925 931 coreconfigitem(
926 932 b'experimental',
927 933 b'evolution.track-operation',
928 934 default=True,
929 935 )
930 936 # repo-level config to exclude a revset visibility
931 937 #
932 938 # The target use case is to use `share` to expose different subset of the same
933 939 # repository, especially server side. See also `server.view`.
934 940 coreconfigitem(
935 941 b'experimental',
936 942 b'extra-filter-revs',
937 943 default=None,
938 944 )
939 945 coreconfigitem(
940 946 b'experimental',
941 947 b'maxdeltachainspan',
942 948 default=-1,
943 949 )
944 950 # tracks files which were undeleted (merge might delete them but we explicitly
945 951 # kept/undeleted them) and creates new filenodes for them
946 952 coreconfigitem(
947 953 b'experimental',
948 954 b'merge-track-salvaged',
949 955 default=False,
950 956 )
951 957 coreconfigitem(
952 958 b'experimental',
953 959 b'mergetempdirprefix',
954 960 default=None,
955 961 )
956 962 coreconfigitem(
957 963 b'experimental',
958 964 b'mmapindexthreshold',
959 965 default=None,
960 966 )
961 967 coreconfigitem(
962 968 b'experimental',
963 969 b'narrow',
964 970 default=False,
965 971 )
966 972 coreconfigitem(
967 973 b'experimental',
968 974 b'nonnormalparanoidcheck',
969 975 default=False,
970 976 )
971 977 coreconfigitem(
972 978 b'experimental',
973 979 b'exportableenviron',
974 980 default=list,
975 981 )
976 982 coreconfigitem(
977 983 b'experimental',
978 984 b'extendedheader.index',
979 985 default=None,
980 986 )
981 987 coreconfigitem(
982 988 b'experimental',
983 989 b'extendedheader.similarity',
984 990 default=False,
985 991 )
986 992 coreconfigitem(
987 993 b'experimental',
988 994 b'graphshorten',
989 995 default=False,
990 996 )
991 997 coreconfigitem(
992 998 b'experimental',
993 999 b'graphstyle.parent',
994 1000 default=dynamicdefault,
995 1001 )
996 1002 coreconfigitem(
997 1003 b'experimental',
998 1004 b'graphstyle.missing',
999 1005 default=dynamicdefault,
1000 1006 )
1001 1007 coreconfigitem(
1002 1008 b'experimental',
1003 1009 b'graphstyle.grandparent',
1004 1010 default=dynamicdefault,
1005 1011 )
1006 1012 coreconfigitem(
1007 1013 b'experimental',
1008 1014 b'hook-track-tags',
1009 1015 default=False,
1010 1016 )
1011 1017 coreconfigitem(
1012 1018 b'experimental',
1013 1019 b'httppeer.advertise-v2',
1014 1020 default=False,
1015 1021 )
1016 1022 coreconfigitem(
1017 1023 b'experimental',
1018 1024 b'httppeer.v2-encoder-order',
1019 1025 default=None,
1020 1026 )
1021 1027 coreconfigitem(
1022 1028 b'experimental',
1023 1029 b'httppostargs',
1024 1030 default=False,
1025 1031 )
1026 1032 coreconfigitem(b'experimental', b'nointerrupt', default=False)
1027 1033 coreconfigitem(b'experimental', b'nointerrupt-interactiveonly', default=True)
1028 1034
1029 1035 coreconfigitem(
1030 1036 b'experimental',
1031 1037 b'obsmarkers-exchange-debug',
1032 1038 default=False,
1033 1039 )
1034 1040 coreconfigitem(
1035 1041 b'experimental',
1036 1042 b'remotenames',
1037 1043 default=False,
1038 1044 )
1039 1045 coreconfigitem(
1040 1046 b'experimental',
1041 1047 b'removeemptydirs',
1042 1048 default=True,
1043 1049 )
1044 1050 coreconfigitem(
1045 1051 b'experimental',
1046 1052 b'revert.interactive.select-to-keep',
1047 1053 default=False,
1048 1054 )
1049 1055 coreconfigitem(
1050 1056 b'experimental',
1051 1057 b'revisions.prefixhexnode',
1052 1058 default=False,
1053 1059 )
1054 1060 coreconfigitem(
1055 1061 b'experimental',
1056 1062 b'revlogv2',
1057 1063 default=None,
1058 1064 )
1059 1065 coreconfigitem(
1060 1066 b'experimental',
1061 1067 b'revisions.disambiguatewithin',
1062 1068 default=None,
1063 1069 )
1064 1070 coreconfigitem(
1065 1071 b'experimental',
1066 1072 b'rust.index',
1067 1073 default=False,
1068 1074 )
1069 1075 coreconfigitem(
1070 1076 b'experimental',
1071 1077 b'server.filesdata.recommended-batch-size',
1072 1078 default=50000,
1073 1079 )
1074 1080 coreconfigitem(
1075 1081 b'experimental',
1076 1082 b'server.manifestdata.recommended-batch-size',
1077 1083 default=100000,
1078 1084 )
1079 1085 coreconfigitem(
1080 1086 b'experimental',
1081 1087 b'server.stream-narrow-clones',
1082 1088 default=False,
1083 1089 )
1084 1090 coreconfigitem(
1085 1091 b'experimental',
1086 1092 b'sharesafe-auto-downgrade-shares',
1087 1093 default=False,
1088 1094 )
1089 1095 coreconfigitem(
1090 1096 b'experimental',
1091 1097 b'sharesafe-auto-upgrade-shares',
1092 1098 default=False,
1093 1099 )
1094 1100 coreconfigitem(
1095 1101 b'experimental',
1096 1102 b'sharesafe-auto-upgrade-fail-error',
1097 1103 default=False,
1098 1104 )
1099 1105 coreconfigitem(
1100 1106 b'experimental',
1101 1107 b'sharesafe-warn-outdated-shares',
1102 1108 default=True,
1103 1109 )
1104 1110 coreconfigitem(
1105 1111 b'experimental',
1106 1112 b'single-head-per-branch',
1107 1113 default=False,
1108 1114 )
1109 1115 coreconfigitem(
1110 1116 b'experimental',
1111 1117 b'single-head-per-branch:account-closed-heads',
1112 1118 default=False,
1113 1119 )
1114 1120 coreconfigitem(
1115 1121 b'experimental',
1116 1122 b'single-head-per-branch:public-changes-only',
1117 1123 default=False,
1118 1124 )
1119 1125 coreconfigitem(
1120 1126 b'experimental',
1121 1127 b'sshserver.support-v2',
1122 1128 default=False,
1123 1129 )
1124 1130 coreconfigitem(
1125 1131 b'experimental',
1126 1132 b'sparse-read',
1127 1133 default=False,
1128 1134 )
1129 1135 coreconfigitem(
1130 1136 b'experimental',
1131 1137 b'sparse-read.density-threshold',
1132 1138 default=0.50,
1133 1139 )
1134 1140 coreconfigitem(
1135 1141 b'experimental',
1136 1142 b'sparse-read.min-gap-size',
1137 1143 default=b'65K',
1138 1144 )
1139 1145 coreconfigitem(
1140 1146 b'experimental',
1141 1147 b'treemanifest',
1142 1148 default=False,
1143 1149 )
1144 1150 coreconfigitem(
1145 1151 b'experimental',
1146 1152 b'update.atomic-file',
1147 1153 default=False,
1148 1154 )
1149 1155 coreconfigitem(
1150 1156 b'experimental',
1151 1157 b'sshpeer.advertise-v2',
1152 1158 default=False,
1153 1159 )
1154 1160 coreconfigitem(
1155 1161 b'experimental',
1156 1162 b'web.apiserver',
1157 1163 default=False,
1158 1164 )
1159 1165 coreconfigitem(
1160 1166 b'experimental',
1161 1167 b'web.api.http-v2',
1162 1168 default=False,
1163 1169 )
1164 1170 coreconfigitem(
1165 1171 b'experimental',
1166 1172 b'web.api.debugreflect',
1167 1173 default=False,
1168 1174 )
1169 1175 coreconfigitem(
1170 1176 b'experimental',
1171 1177 b'worker.wdir-get-thread-safe',
1172 1178 default=False,
1173 1179 )
1174 1180 coreconfigitem(
1175 1181 b'experimental',
1176 1182 b'worker.repository-upgrade',
1177 1183 default=False,
1178 1184 )
1179 1185 coreconfigitem(
1180 1186 b'experimental',
1181 1187 b'xdiff',
1182 1188 default=False,
1183 1189 )
1184 1190 coreconfigitem(
1185 1191 b'extensions',
1186 1192 b'.*',
1187 1193 default=None,
1188 1194 generic=True,
1189 1195 )
1190 1196 coreconfigitem(
1191 1197 b'extdata',
1192 1198 b'.*',
1193 1199 default=None,
1194 1200 generic=True,
1195 1201 )
1196 1202 coreconfigitem(
1197 1203 b'format',
1198 1204 b'bookmarks-in-store',
1199 1205 default=False,
1200 1206 )
1201 1207 coreconfigitem(
1202 1208 b'format',
1203 1209 b'chunkcachesize',
1204 1210 default=None,
1205 1211 experimental=True,
1206 1212 )
1207 1213 coreconfigitem(
1208 1214 b'format',
1209 1215 b'dotencode',
1210 1216 default=True,
1211 1217 )
1212 1218 coreconfigitem(
1213 1219 b'format',
1214 1220 b'generaldelta',
1215 1221 default=False,
1216 1222 experimental=True,
1217 1223 )
1218 1224 coreconfigitem(
1219 1225 b'format',
1220 1226 b'manifestcachesize',
1221 1227 default=None,
1222 1228 experimental=True,
1223 1229 )
1224 1230 coreconfigitem(
1225 1231 b'format',
1226 1232 b'maxchainlen',
1227 1233 default=dynamicdefault,
1228 1234 experimental=True,
1229 1235 )
1230 1236 coreconfigitem(
1231 1237 b'format',
1232 1238 b'obsstore-version',
1233 1239 default=None,
1234 1240 )
1235 1241 coreconfigitem(
1236 1242 b'format',
1237 1243 b'sparse-revlog',
1238 1244 default=True,
1239 1245 )
1240 1246 coreconfigitem(
1241 1247 b'format',
1242 1248 b'revlog-compression',
1243 1249 default=lambda: [b'zlib'],
1244 1250 alias=[(b'experimental', b'format.compression')],
1245 1251 )
1246 1252 coreconfigitem(
1247 1253 b'format',
1248 1254 b'usefncache',
1249 1255 default=True,
1250 1256 )
1251 1257 coreconfigitem(
1252 1258 b'format',
1253 1259 b'usegeneraldelta',
1254 1260 default=True,
1255 1261 )
1256 1262 coreconfigitem(
1257 1263 b'format',
1258 1264 b'usestore',
1259 1265 default=True,
1260 1266 )
1261 1267 # Right now, the only efficient implement of the nodemap logic is in Rust, so
1262 1268 # the persistent nodemap feature needs to stay experimental as long as the Rust
1263 1269 # extensions are an experimental feature.
1264 1270 coreconfigitem(
1265 1271 b'format', b'use-persistent-nodemap', default=False, experimental=True
1266 1272 )
1267 1273 coreconfigitem(
1268 1274 b'format',
1269 1275 b'exp-use-copies-side-data-changeset',
1270 1276 default=False,
1271 1277 experimental=True,
1272 1278 )
1273 1279 coreconfigitem(
1274 1280 b'format',
1275 1281 b'exp-use-side-data',
1276 1282 default=False,
1277 1283 experimental=True,
1278 1284 )
1279 1285 coreconfigitem(
1280 1286 b'format',
1281 1287 b'exp-share-safe',
1282 1288 default=False,
1283 1289 experimental=True,
1284 1290 )
1285 1291 coreconfigitem(
1286 1292 b'format',
1287 1293 b'internal-phase',
1288 1294 default=False,
1289 1295 experimental=True,
1290 1296 )
1291 1297 coreconfigitem(
1292 1298 b'fsmonitor',
1293 1299 b'warn_when_unused',
1294 1300 default=True,
1295 1301 )
1296 1302 coreconfigitem(
1297 1303 b'fsmonitor',
1298 1304 b'warn_update_file_count',
1299 1305 default=50000,
1300 1306 )
1301 1307 coreconfigitem(
1302 1308 b'fsmonitor',
1303 1309 b'warn_update_file_count_rust',
1304 1310 default=400000,
1305 1311 )
1306 1312 coreconfigitem(
1307 1313 b'help',
1308 1314 br'hidden-command\..*',
1309 1315 default=False,
1310 1316 generic=True,
1311 1317 )
1312 1318 coreconfigitem(
1313 1319 b'help',
1314 1320 br'hidden-topic\..*',
1315 1321 default=False,
1316 1322 generic=True,
1317 1323 )
1318 1324 coreconfigitem(
1319 1325 b'hooks',
1320 1326 b'.*',
1321 1327 default=dynamicdefault,
1322 1328 generic=True,
1323 1329 )
1324 1330 coreconfigitem(
1325 1331 b'hgweb-paths',
1326 1332 b'.*',
1327 1333 default=list,
1328 1334 generic=True,
1329 1335 )
1330 1336 coreconfigitem(
1331 1337 b'hostfingerprints',
1332 1338 b'.*',
1333 1339 default=list,
1334 1340 generic=True,
1335 1341 )
1336 1342 coreconfigitem(
1337 1343 b'hostsecurity',
1338 1344 b'ciphers',
1339 1345 default=None,
1340 1346 )
1341 1347 coreconfigitem(
1342 1348 b'hostsecurity',
1343 1349 b'minimumprotocol',
1344 1350 default=dynamicdefault,
1345 1351 )
1346 1352 coreconfigitem(
1347 1353 b'hostsecurity',
1348 1354 b'.*:minimumprotocol$',
1349 1355 default=dynamicdefault,
1350 1356 generic=True,
1351 1357 )
1352 1358 coreconfigitem(
1353 1359 b'hostsecurity',
1354 1360 b'.*:ciphers$',
1355 1361 default=dynamicdefault,
1356 1362 generic=True,
1357 1363 )
1358 1364 coreconfigitem(
1359 1365 b'hostsecurity',
1360 1366 b'.*:fingerprints$',
1361 1367 default=list,
1362 1368 generic=True,
1363 1369 )
1364 1370 coreconfigitem(
1365 1371 b'hostsecurity',
1366 1372 b'.*:verifycertsfile$',
1367 1373 default=None,
1368 1374 generic=True,
1369 1375 )
1370 1376
1371 1377 coreconfigitem(
1372 1378 b'http_proxy',
1373 1379 b'always',
1374 1380 default=False,
1375 1381 )
1376 1382 coreconfigitem(
1377 1383 b'http_proxy',
1378 1384 b'host',
1379 1385 default=None,
1380 1386 )
1381 1387 coreconfigitem(
1382 1388 b'http_proxy',
1383 1389 b'no',
1384 1390 default=list,
1385 1391 )
1386 1392 coreconfigitem(
1387 1393 b'http_proxy',
1388 1394 b'passwd',
1389 1395 default=None,
1390 1396 )
1391 1397 coreconfigitem(
1392 1398 b'http_proxy',
1393 1399 b'user',
1394 1400 default=None,
1395 1401 )
1396 1402
1397 1403 coreconfigitem(
1398 1404 b'http',
1399 1405 b'timeout',
1400 1406 default=None,
1401 1407 )
1402 1408
1403 1409 coreconfigitem(
1404 1410 b'logtoprocess',
1405 1411 b'commandexception',
1406 1412 default=None,
1407 1413 )
1408 1414 coreconfigitem(
1409 1415 b'logtoprocess',
1410 1416 b'commandfinish',
1411 1417 default=None,
1412 1418 )
1413 1419 coreconfigitem(
1414 1420 b'logtoprocess',
1415 1421 b'command',
1416 1422 default=None,
1417 1423 )
1418 1424 coreconfigitem(
1419 1425 b'logtoprocess',
1420 1426 b'develwarn',
1421 1427 default=None,
1422 1428 )
1423 1429 coreconfigitem(
1424 1430 b'logtoprocess',
1425 1431 b'uiblocked',
1426 1432 default=None,
1427 1433 )
1428 1434 coreconfigitem(
1429 1435 b'merge',
1430 1436 b'checkunknown',
1431 1437 default=b'abort',
1432 1438 )
1433 1439 coreconfigitem(
1434 1440 b'merge',
1435 1441 b'checkignored',
1436 1442 default=b'abort',
1437 1443 )
1438 1444 coreconfigitem(
1439 1445 b'experimental',
1440 1446 b'merge.checkpathconflicts',
1441 1447 default=False,
1442 1448 )
1443 1449 coreconfigitem(
1444 1450 b'merge',
1445 1451 b'followcopies',
1446 1452 default=True,
1447 1453 )
1448 1454 coreconfigitem(
1449 1455 b'merge',
1450 1456 b'on-failure',
1451 1457 default=b'continue',
1452 1458 )
1453 1459 coreconfigitem(
1454 1460 b'merge',
1455 1461 b'preferancestor',
1456 1462 default=lambda: [b'*'],
1457 1463 experimental=True,
1458 1464 )
1459 1465 coreconfigitem(
1460 1466 b'merge',
1461 1467 b'strict-capability-check',
1462 1468 default=False,
1463 1469 )
1464 1470 coreconfigitem(
1465 1471 b'merge-tools',
1466 1472 b'.*',
1467 1473 default=None,
1468 1474 generic=True,
1469 1475 )
1470 1476 coreconfigitem(
1471 1477 b'merge-tools',
1472 1478 br'.*\.args$',
1473 1479 default=b"$local $base $other",
1474 1480 generic=True,
1475 1481 priority=-1,
1476 1482 )
1477 1483 coreconfigitem(
1478 1484 b'merge-tools',
1479 1485 br'.*\.binary$',
1480 1486 default=False,
1481 1487 generic=True,
1482 1488 priority=-1,
1483 1489 )
1484 1490 coreconfigitem(
1485 1491 b'merge-tools',
1486 1492 br'.*\.check$',
1487 1493 default=list,
1488 1494 generic=True,
1489 1495 priority=-1,
1490 1496 )
1491 1497 coreconfigitem(
1492 1498 b'merge-tools',
1493 1499 br'.*\.checkchanged$',
1494 1500 default=False,
1495 1501 generic=True,
1496 1502 priority=-1,
1497 1503 )
1498 1504 coreconfigitem(
1499 1505 b'merge-tools',
1500 1506 br'.*\.executable$',
1501 1507 default=dynamicdefault,
1502 1508 generic=True,
1503 1509 priority=-1,
1504 1510 )
1505 1511 coreconfigitem(
1506 1512 b'merge-tools',
1507 1513 br'.*\.fixeol$',
1508 1514 default=False,
1509 1515 generic=True,
1510 1516 priority=-1,
1511 1517 )
1512 1518 coreconfigitem(
1513 1519 b'merge-tools',
1514 1520 br'.*\.gui$',
1515 1521 default=False,
1516 1522 generic=True,
1517 1523 priority=-1,
1518 1524 )
1519 1525 coreconfigitem(
1520 1526 b'merge-tools',
1521 1527 br'.*\.mergemarkers$',
1522 1528 default=b'basic',
1523 1529 generic=True,
1524 1530 priority=-1,
1525 1531 )
1526 1532 coreconfigitem(
1527 1533 b'merge-tools',
1528 1534 br'.*\.mergemarkertemplate$',
1529 1535 default=dynamicdefault, # take from command-templates.mergemarker
1530 1536 generic=True,
1531 1537 priority=-1,
1532 1538 )
1533 1539 coreconfigitem(
1534 1540 b'merge-tools',
1535 1541 br'.*\.priority$',
1536 1542 default=0,
1537 1543 generic=True,
1538 1544 priority=-1,
1539 1545 )
1540 1546 coreconfigitem(
1541 1547 b'merge-tools',
1542 1548 br'.*\.premerge$',
1543 1549 default=dynamicdefault,
1544 1550 generic=True,
1545 1551 priority=-1,
1546 1552 )
1547 1553 coreconfigitem(
1548 1554 b'merge-tools',
1549 1555 br'.*\.symlink$',
1550 1556 default=False,
1551 1557 generic=True,
1552 1558 priority=-1,
1553 1559 )
1554 1560 coreconfigitem(
1555 1561 b'pager',
1556 1562 b'attend-.*',
1557 1563 default=dynamicdefault,
1558 1564 generic=True,
1559 1565 )
1560 1566 coreconfigitem(
1561 1567 b'pager',
1562 1568 b'ignore',
1563 1569 default=list,
1564 1570 )
1565 1571 coreconfigitem(
1566 1572 b'pager',
1567 1573 b'pager',
1568 1574 default=dynamicdefault,
1569 1575 )
1570 1576 coreconfigitem(
1571 1577 b'patch',
1572 1578 b'eol',
1573 1579 default=b'strict',
1574 1580 )
1575 1581 coreconfigitem(
1576 1582 b'patch',
1577 1583 b'fuzz',
1578 1584 default=2,
1579 1585 )
1580 1586 coreconfigitem(
1581 1587 b'paths',
1582 1588 b'default',
1583 1589 default=None,
1584 1590 )
1585 1591 coreconfigitem(
1586 1592 b'paths',
1587 1593 b'default-push',
1588 1594 default=None,
1589 1595 )
1590 1596 coreconfigitem(
1591 1597 b'paths',
1592 1598 b'.*',
1593 1599 default=None,
1594 1600 generic=True,
1595 1601 )
1596 1602 coreconfigitem(
1597 1603 b'phases',
1598 1604 b'checksubrepos',
1599 1605 default=b'follow',
1600 1606 )
1601 1607 coreconfigitem(
1602 1608 b'phases',
1603 1609 b'new-commit',
1604 1610 default=b'draft',
1605 1611 )
1606 1612 coreconfigitem(
1607 1613 b'phases',
1608 1614 b'publish',
1609 1615 default=True,
1610 1616 )
1611 1617 coreconfigitem(
1612 1618 b'profiling',
1613 1619 b'enabled',
1614 1620 default=False,
1615 1621 )
1616 1622 coreconfigitem(
1617 1623 b'profiling',
1618 1624 b'format',
1619 1625 default=b'text',
1620 1626 )
1621 1627 coreconfigitem(
1622 1628 b'profiling',
1623 1629 b'freq',
1624 1630 default=1000,
1625 1631 )
1626 1632 coreconfigitem(
1627 1633 b'profiling',
1628 1634 b'limit',
1629 1635 default=30,
1630 1636 )
1631 1637 coreconfigitem(
1632 1638 b'profiling',
1633 1639 b'nested',
1634 1640 default=0,
1635 1641 )
1636 1642 coreconfigitem(
1637 1643 b'profiling',
1638 1644 b'output',
1639 1645 default=None,
1640 1646 )
1641 1647 coreconfigitem(
1642 1648 b'profiling',
1643 1649 b'showmax',
1644 1650 default=0.999,
1645 1651 )
1646 1652 coreconfigitem(
1647 1653 b'profiling',
1648 1654 b'showmin',
1649 1655 default=dynamicdefault,
1650 1656 )
1651 1657 coreconfigitem(
1652 1658 b'profiling',
1653 1659 b'showtime',
1654 1660 default=True,
1655 1661 )
1656 1662 coreconfigitem(
1657 1663 b'profiling',
1658 1664 b'sort',
1659 1665 default=b'inlinetime',
1660 1666 )
1661 1667 coreconfigitem(
1662 1668 b'profiling',
1663 1669 b'statformat',
1664 1670 default=b'hotpath',
1665 1671 )
1666 1672 coreconfigitem(
1667 1673 b'profiling',
1668 1674 b'time-track',
1669 1675 default=dynamicdefault,
1670 1676 )
1671 1677 coreconfigitem(
1672 1678 b'profiling',
1673 1679 b'type',
1674 1680 default=b'stat',
1675 1681 )
1676 1682 coreconfigitem(
1677 1683 b'progress',
1678 1684 b'assume-tty',
1679 1685 default=False,
1680 1686 )
1681 1687 coreconfigitem(
1682 1688 b'progress',
1683 1689 b'changedelay',
1684 1690 default=1,
1685 1691 )
1686 1692 coreconfigitem(
1687 1693 b'progress',
1688 1694 b'clear-complete',
1689 1695 default=True,
1690 1696 )
1691 1697 coreconfigitem(
1692 1698 b'progress',
1693 1699 b'debug',
1694 1700 default=False,
1695 1701 )
1696 1702 coreconfigitem(
1697 1703 b'progress',
1698 1704 b'delay',
1699 1705 default=3,
1700 1706 )
1701 1707 coreconfigitem(
1702 1708 b'progress',
1703 1709 b'disable',
1704 1710 default=False,
1705 1711 )
1706 1712 coreconfigitem(
1707 1713 b'progress',
1708 1714 b'estimateinterval',
1709 1715 default=60.0,
1710 1716 )
1711 1717 coreconfigitem(
1712 1718 b'progress',
1713 1719 b'format',
1714 1720 default=lambda: [b'topic', b'bar', b'number', b'estimate'],
1715 1721 )
1716 1722 coreconfigitem(
1717 1723 b'progress',
1718 1724 b'refresh',
1719 1725 default=0.1,
1720 1726 )
1721 1727 coreconfigitem(
1722 1728 b'progress',
1723 1729 b'width',
1724 1730 default=dynamicdefault,
1725 1731 )
1726 1732 coreconfigitem(
1727 1733 b'pull',
1728 1734 b'confirm',
1729 1735 default=False,
1730 1736 )
1731 1737 coreconfigitem(
1732 1738 b'push',
1733 1739 b'pushvars.server',
1734 1740 default=False,
1735 1741 )
1736 1742 coreconfigitem(
1737 1743 b'rewrite',
1738 1744 b'backup-bundle',
1739 1745 default=True,
1740 1746 alias=[(b'ui', b'history-editing-backup')],
1741 1747 )
1742 1748 coreconfigitem(
1743 1749 b'rewrite',
1744 1750 b'update-timestamp',
1745 1751 default=False,
1746 1752 )
1747 1753 coreconfigitem(
1748 1754 b'rewrite',
1749 1755 b'empty-successor',
1750 1756 default=b'skip',
1751 1757 experimental=True,
1752 1758 )
1753 1759 coreconfigitem(
1754 1760 b'storage',
1755 1761 b'new-repo-backend',
1756 1762 default=b'revlogv1',
1757 1763 experimental=True,
1758 1764 )
1759 1765 coreconfigitem(
1760 1766 b'storage',
1761 1767 b'revlog.optimize-delta-parent-choice',
1762 1768 default=True,
1763 1769 alias=[(b'format', b'aggressivemergedeltas')],
1764 1770 )
1765 1771 # experimental as long as rust is experimental (or a C version is implemented)
1766 1772 coreconfigitem(
1767 1773 b'storage', b'revlog.nodemap.mmap', default=True, experimental=True
1768 1774 )
1769 1775 # experimental as long as format.use-persistent-nodemap is.
1770 1776 coreconfigitem(
1771 1777 b'storage', b'revlog.nodemap.mode', default=b'compat', experimental=True
1772 1778 )
1773 1779 coreconfigitem(
1774 1780 b'storage',
1775 1781 b'revlog.reuse-external-delta',
1776 1782 default=True,
1777 1783 )
1778 1784 coreconfigitem(
1779 1785 b'storage',
1780 1786 b'revlog.reuse-external-delta-parent',
1781 1787 default=None,
1782 1788 )
1783 1789 coreconfigitem(
1784 1790 b'storage',
1785 1791 b'revlog.zlib.level',
1786 1792 default=None,
1787 1793 )
1788 1794 coreconfigitem(
1789 1795 b'storage',
1790 1796 b'revlog.zstd.level',
1791 1797 default=None,
1792 1798 )
1793 1799 coreconfigitem(
1794 1800 b'server',
1795 1801 b'bookmarks-pushkey-compat',
1796 1802 default=True,
1797 1803 )
1798 1804 coreconfigitem(
1799 1805 b'server',
1800 1806 b'bundle1',
1801 1807 default=True,
1802 1808 )
1803 1809 coreconfigitem(
1804 1810 b'server',
1805 1811 b'bundle1gd',
1806 1812 default=None,
1807 1813 )
1808 1814 coreconfigitem(
1809 1815 b'server',
1810 1816 b'bundle1.pull',
1811 1817 default=None,
1812 1818 )
1813 1819 coreconfigitem(
1814 1820 b'server',
1815 1821 b'bundle1gd.pull',
1816 1822 default=None,
1817 1823 )
1818 1824 coreconfigitem(
1819 1825 b'server',
1820 1826 b'bundle1.push',
1821 1827 default=None,
1822 1828 )
1823 1829 coreconfigitem(
1824 1830 b'server',
1825 1831 b'bundle1gd.push',
1826 1832 default=None,
1827 1833 )
1828 1834 coreconfigitem(
1829 1835 b'server',
1830 1836 b'bundle2.stream',
1831 1837 default=True,
1832 1838 alias=[(b'experimental', b'bundle2.stream')],
1833 1839 )
1834 1840 coreconfigitem(
1835 1841 b'server',
1836 1842 b'compressionengines',
1837 1843 default=list,
1838 1844 )
1839 1845 coreconfigitem(
1840 1846 b'server',
1841 1847 b'concurrent-push-mode',
1842 1848 default=b'check-related',
1843 1849 )
1844 1850 coreconfigitem(
1845 1851 b'server',
1846 1852 b'disablefullbundle',
1847 1853 default=False,
1848 1854 )
1849 1855 coreconfigitem(
1850 1856 b'server',
1851 1857 b'maxhttpheaderlen',
1852 1858 default=1024,
1853 1859 )
1854 1860 coreconfigitem(
1855 1861 b'server',
1856 1862 b'pullbundle',
1857 1863 default=False,
1858 1864 )
1859 1865 coreconfigitem(
1860 1866 b'server',
1861 1867 b'preferuncompressed',
1862 1868 default=False,
1863 1869 )
1864 1870 coreconfigitem(
1865 1871 b'server',
1866 1872 b'streamunbundle',
1867 1873 default=False,
1868 1874 )
1869 1875 coreconfigitem(
1870 1876 b'server',
1871 1877 b'uncompressed',
1872 1878 default=True,
1873 1879 )
1874 1880 coreconfigitem(
1875 1881 b'server',
1876 1882 b'uncompressedallowsecret',
1877 1883 default=False,
1878 1884 )
1879 1885 coreconfigitem(
1880 1886 b'server',
1881 1887 b'view',
1882 1888 default=b'served',
1883 1889 )
1884 1890 coreconfigitem(
1885 1891 b'server',
1886 1892 b'validate',
1887 1893 default=False,
1888 1894 )
1889 1895 coreconfigitem(
1890 1896 b'server',
1891 1897 b'zliblevel',
1892 1898 default=-1,
1893 1899 )
1894 1900 coreconfigitem(
1895 1901 b'server',
1896 1902 b'zstdlevel',
1897 1903 default=3,
1898 1904 )
1899 1905 coreconfigitem(
1900 1906 b'share',
1901 1907 b'pool',
1902 1908 default=None,
1903 1909 )
1904 1910 coreconfigitem(
1905 1911 b'share',
1906 1912 b'poolnaming',
1907 1913 default=b'identity',
1908 1914 )
1909 1915 coreconfigitem(
1910 1916 b'shelve',
1911 1917 b'maxbackups',
1912 1918 default=10,
1913 1919 )
1914 1920 coreconfigitem(
1915 1921 b'smtp',
1916 1922 b'host',
1917 1923 default=None,
1918 1924 )
1919 1925 coreconfigitem(
1920 1926 b'smtp',
1921 1927 b'local_hostname',
1922 1928 default=None,
1923 1929 )
1924 1930 coreconfigitem(
1925 1931 b'smtp',
1926 1932 b'password',
1927 1933 default=None,
1928 1934 )
1929 1935 coreconfigitem(
1930 1936 b'smtp',
1931 1937 b'port',
1932 1938 default=dynamicdefault,
1933 1939 )
1934 1940 coreconfigitem(
1935 1941 b'smtp',
1936 1942 b'tls',
1937 1943 default=b'none',
1938 1944 )
1939 1945 coreconfigitem(
1940 1946 b'smtp',
1941 1947 b'username',
1942 1948 default=None,
1943 1949 )
1944 1950 coreconfigitem(
1945 1951 b'sparse',
1946 1952 b'missingwarning',
1947 1953 default=True,
1948 1954 experimental=True,
1949 1955 )
1950 1956 coreconfigitem(
1951 1957 b'subrepos',
1952 1958 b'allowed',
1953 1959 default=dynamicdefault, # to make backporting simpler
1954 1960 )
1955 1961 coreconfigitem(
1956 1962 b'subrepos',
1957 1963 b'hg:allowed',
1958 1964 default=dynamicdefault,
1959 1965 )
1960 1966 coreconfigitem(
1961 1967 b'subrepos',
1962 1968 b'git:allowed',
1963 1969 default=dynamicdefault,
1964 1970 )
1965 1971 coreconfigitem(
1966 1972 b'subrepos',
1967 1973 b'svn:allowed',
1968 1974 default=dynamicdefault,
1969 1975 )
1970 1976 coreconfigitem(
1971 1977 b'templates',
1972 1978 b'.*',
1973 1979 default=None,
1974 1980 generic=True,
1975 1981 )
1976 1982 coreconfigitem(
1977 1983 b'templateconfig',
1978 1984 b'.*',
1979 1985 default=dynamicdefault,
1980 1986 generic=True,
1981 1987 )
1982 1988 coreconfigitem(
1983 1989 b'trusted',
1984 1990 b'groups',
1985 1991 default=list,
1986 1992 )
1987 1993 coreconfigitem(
1988 1994 b'trusted',
1989 1995 b'users',
1990 1996 default=list,
1991 1997 )
1992 1998 coreconfigitem(
1993 1999 b'ui',
1994 2000 b'_usedassubrepo',
1995 2001 default=False,
1996 2002 )
1997 2003 coreconfigitem(
1998 2004 b'ui',
1999 2005 b'allowemptycommit',
2000 2006 default=False,
2001 2007 )
2002 2008 coreconfigitem(
2003 2009 b'ui',
2004 2010 b'archivemeta',
2005 2011 default=True,
2006 2012 )
2007 2013 coreconfigitem(
2008 2014 b'ui',
2009 2015 b'askusername',
2010 2016 default=False,
2011 2017 )
2012 2018 coreconfigitem(
2013 2019 b'ui',
2014 2020 b'available-memory',
2015 2021 default=None,
2016 2022 )
2017 2023
2018 2024 coreconfigitem(
2019 2025 b'ui',
2020 2026 b'clonebundlefallback',
2021 2027 default=False,
2022 2028 )
2023 2029 coreconfigitem(
2024 2030 b'ui',
2025 2031 b'clonebundleprefers',
2026 2032 default=list,
2027 2033 )
2028 2034 coreconfigitem(
2029 2035 b'ui',
2030 2036 b'clonebundles',
2031 2037 default=True,
2032 2038 )
2033 2039 coreconfigitem(
2034 2040 b'ui',
2035 2041 b'color',
2036 2042 default=b'auto',
2037 2043 )
2038 2044 coreconfigitem(
2039 2045 b'ui',
2040 2046 b'commitsubrepos',
2041 2047 default=False,
2042 2048 )
2043 2049 coreconfigitem(
2044 2050 b'ui',
2045 2051 b'debug',
2046 2052 default=False,
2047 2053 )
2048 2054 coreconfigitem(
2049 2055 b'ui',
2050 2056 b'debugger',
2051 2057 default=None,
2052 2058 )
2053 2059 coreconfigitem(
2054 2060 b'ui',
2055 2061 b'editor',
2056 2062 default=dynamicdefault,
2057 2063 )
2058 2064 coreconfigitem(
2059 2065 b'ui',
2060 2066 b'detailed-exit-code',
2061 2067 default=False,
2062 2068 experimental=True,
2063 2069 )
2064 2070 coreconfigitem(
2065 2071 b'ui',
2066 2072 b'fallbackencoding',
2067 2073 default=None,
2068 2074 )
2069 2075 coreconfigitem(
2070 2076 b'ui',
2071 2077 b'forcecwd',
2072 2078 default=None,
2073 2079 )
2074 2080 coreconfigitem(
2075 2081 b'ui',
2076 2082 b'forcemerge',
2077 2083 default=None,
2078 2084 )
2079 2085 coreconfigitem(
2080 2086 b'ui',
2081 2087 b'formatdebug',
2082 2088 default=False,
2083 2089 )
2084 2090 coreconfigitem(
2085 2091 b'ui',
2086 2092 b'formatjson',
2087 2093 default=False,
2088 2094 )
2089 2095 coreconfigitem(
2090 2096 b'ui',
2091 2097 b'formatted',
2092 2098 default=None,
2093 2099 )
2094 2100 coreconfigitem(
2095 2101 b'ui',
2096 2102 b'interactive',
2097 2103 default=None,
2098 2104 )
2099 2105 coreconfigitem(
2100 2106 b'ui',
2101 2107 b'interface',
2102 2108 default=None,
2103 2109 )
2104 2110 coreconfigitem(
2105 2111 b'ui',
2106 2112 b'interface.chunkselector',
2107 2113 default=None,
2108 2114 )
2109 2115 coreconfigitem(
2110 2116 b'ui',
2111 2117 b'large-file-limit',
2112 2118 default=10000000,
2113 2119 )
2114 2120 coreconfigitem(
2115 2121 b'ui',
2116 2122 b'logblockedtimes',
2117 2123 default=False,
2118 2124 )
2119 2125 coreconfigitem(
2120 2126 b'ui',
2121 2127 b'merge',
2122 2128 default=None,
2123 2129 )
2124 2130 coreconfigitem(
2125 2131 b'ui',
2126 2132 b'mergemarkers',
2127 2133 default=b'basic',
2128 2134 )
2129 2135 coreconfigitem(
2130 2136 b'ui',
2131 2137 b'message-output',
2132 2138 default=b'stdio',
2133 2139 )
2134 2140 coreconfigitem(
2135 2141 b'ui',
2136 2142 b'nontty',
2137 2143 default=False,
2138 2144 )
2139 2145 coreconfigitem(
2140 2146 b'ui',
2141 2147 b'origbackuppath',
2142 2148 default=None,
2143 2149 )
2144 2150 coreconfigitem(
2145 2151 b'ui',
2146 2152 b'paginate',
2147 2153 default=True,
2148 2154 )
2149 2155 coreconfigitem(
2150 2156 b'ui',
2151 2157 b'patch',
2152 2158 default=None,
2153 2159 )
2154 2160 coreconfigitem(
2155 2161 b'ui',
2156 2162 b'portablefilenames',
2157 2163 default=b'warn',
2158 2164 )
2159 2165 coreconfigitem(
2160 2166 b'ui',
2161 2167 b'promptecho',
2162 2168 default=False,
2163 2169 )
2164 2170 coreconfigitem(
2165 2171 b'ui',
2166 2172 b'quiet',
2167 2173 default=False,
2168 2174 )
2169 2175 coreconfigitem(
2170 2176 b'ui',
2171 2177 b'quietbookmarkmove',
2172 2178 default=False,
2173 2179 )
2174 2180 coreconfigitem(
2175 2181 b'ui',
2176 2182 b'relative-paths',
2177 2183 default=b'legacy',
2178 2184 )
2179 2185 coreconfigitem(
2180 2186 b'ui',
2181 2187 b'remotecmd',
2182 2188 default=b'hg',
2183 2189 )
2184 2190 coreconfigitem(
2185 2191 b'ui',
2186 2192 b'report_untrusted',
2187 2193 default=True,
2188 2194 )
2189 2195 coreconfigitem(
2190 2196 b'ui',
2191 2197 b'rollback',
2192 2198 default=True,
2193 2199 )
2194 2200 coreconfigitem(
2195 2201 b'ui',
2196 2202 b'signal-safe-lock',
2197 2203 default=True,
2198 2204 )
2199 2205 coreconfigitem(
2200 2206 b'ui',
2201 2207 b'slash',
2202 2208 default=False,
2203 2209 )
2204 2210 coreconfigitem(
2205 2211 b'ui',
2206 2212 b'ssh',
2207 2213 default=b'ssh',
2208 2214 )
2209 2215 coreconfigitem(
2210 2216 b'ui',
2211 2217 b'ssherrorhint',
2212 2218 default=None,
2213 2219 )
2214 2220 coreconfigitem(
2215 2221 b'ui',
2216 2222 b'statuscopies',
2217 2223 default=False,
2218 2224 )
2219 2225 coreconfigitem(
2220 2226 b'ui',
2221 2227 b'strict',
2222 2228 default=False,
2223 2229 )
2224 2230 coreconfigitem(
2225 2231 b'ui',
2226 2232 b'style',
2227 2233 default=b'',
2228 2234 )
2229 2235 coreconfigitem(
2230 2236 b'ui',
2231 2237 b'supportcontact',
2232 2238 default=None,
2233 2239 )
2234 2240 coreconfigitem(
2235 2241 b'ui',
2236 2242 b'textwidth',
2237 2243 default=78,
2238 2244 )
2239 2245 coreconfigitem(
2240 2246 b'ui',
2241 2247 b'timeout',
2242 2248 default=b'600',
2243 2249 )
2244 2250 coreconfigitem(
2245 2251 b'ui',
2246 2252 b'timeout.warn',
2247 2253 default=0,
2248 2254 )
2249 2255 coreconfigitem(
2250 2256 b'ui',
2251 2257 b'timestamp-output',
2252 2258 default=False,
2253 2259 )
2254 2260 coreconfigitem(
2255 2261 b'ui',
2256 2262 b'traceback',
2257 2263 default=False,
2258 2264 )
2259 2265 coreconfigitem(
2260 2266 b'ui',
2261 2267 b'tweakdefaults',
2262 2268 default=False,
2263 2269 )
2264 2270 coreconfigitem(b'ui', b'username', alias=[(b'ui', b'user')])
2265 2271 coreconfigitem(
2266 2272 b'ui',
2267 2273 b'verbose',
2268 2274 default=False,
2269 2275 )
2270 2276 coreconfigitem(
2271 2277 b'verify',
2272 2278 b'skipflags',
2273 2279 default=None,
2274 2280 )
2275 2281 coreconfigitem(
2276 2282 b'web',
2277 2283 b'allowbz2',
2278 2284 default=False,
2279 2285 )
2280 2286 coreconfigitem(
2281 2287 b'web',
2282 2288 b'allowgz',
2283 2289 default=False,
2284 2290 )
2285 2291 coreconfigitem(
2286 2292 b'web',
2287 2293 b'allow-pull',
2288 2294 alias=[(b'web', b'allowpull')],
2289 2295 default=True,
2290 2296 )
2291 2297 coreconfigitem(
2292 2298 b'web',
2293 2299 b'allow-push',
2294 2300 alias=[(b'web', b'allow_push')],
2295 2301 default=list,
2296 2302 )
2297 2303 coreconfigitem(
2298 2304 b'web',
2299 2305 b'allowzip',
2300 2306 default=False,
2301 2307 )
2302 2308 coreconfigitem(
2303 2309 b'web',
2304 2310 b'archivesubrepos',
2305 2311 default=False,
2306 2312 )
2307 2313 coreconfigitem(
2308 2314 b'web',
2309 2315 b'cache',
2310 2316 default=True,
2311 2317 )
2312 2318 coreconfigitem(
2313 2319 b'web',
2314 2320 b'comparisoncontext',
2315 2321 default=5,
2316 2322 )
2317 2323 coreconfigitem(
2318 2324 b'web',
2319 2325 b'contact',
2320 2326 default=None,
2321 2327 )
2322 2328 coreconfigitem(
2323 2329 b'web',
2324 2330 b'deny_push',
2325 2331 default=list,
2326 2332 )
2327 2333 coreconfigitem(
2328 2334 b'web',
2329 2335 b'guessmime',
2330 2336 default=False,
2331 2337 )
2332 2338 coreconfigitem(
2333 2339 b'web',
2334 2340 b'hidden',
2335 2341 default=False,
2336 2342 )
2337 2343 coreconfigitem(
2338 2344 b'web',
2339 2345 b'labels',
2340 2346 default=list,
2341 2347 )
2342 2348 coreconfigitem(
2343 2349 b'web',
2344 2350 b'logoimg',
2345 2351 default=b'hglogo.png',
2346 2352 )
2347 2353 coreconfigitem(
2348 2354 b'web',
2349 2355 b'logourl',
2350 2356 default=b'https://mercurial-scm.org/',
2351 2357 )
2352 2358 coreconfigitem(
2353 2359 b'web',
2354 2360 b'accesslog',
2355 2361 default=b'-',
2356 2362 )
2357 2363 coreconfigitem(
2358 2364 b'web',
2359 2365 b'address',
2360 2366 default=b'',
2361 2367 )
2362 2368 coreconfigitem(
2363 2369 b'web',
2364 2370 b'allow-archive',
2365 2371 alias=[(b'web', b'allow_archive')],
2366 2372 default=list,
2367 2373 )
2368 2374 coreconfigitem(
2369 2375 b'web',
2370 2376 b'allow_read',
2371 2377 default=list,
2372 2378 )
2373 2379 coreconfigitem(
2374 2380 b'web',
2375 2381 b'baseurl',
2376 2382 default=None,
2377 2383 )
2378 2384 coreconfigitem(
2379 2385 b'web',
2380 2386 b'cacerts',
2381 2387 default=None,
2382 2388 )
2383 2389 coreconfigitem(
2384 2390 b'web',
2385 2391 b'certificate',
2386 2392 default=None,
2387 2393 )
2388 2394 coreconfigitem(
2389 2395 b'web',
2390 2396 b'collapse',
2391 2397 default=False,
2392 2398 )
2393 2399 coreconfigitem(
2394 2400 b'web',
2395 2401 b'csp',
2396 2402 default=None,
2397 2403 )
2398 2404 coreconfigitem(
2399 2405 b'web',
2400 2406 b'deny_read',
2401 2407 default=list,
2402 2408 )
2403 2409 coreconfigitem(
2404 2410 b'web',
2405 2411 b'descend',
2406 2412 default=True,
2407 2413 )
2408 2414 coreconfigitem(
2409 2415 b'web',
2410 2416 b'description',
2411 2417 default=b"",
2412 2418 )
2413 2419 coreconfigitem(
2414 2420 b'web',
2415 2421 b'encoding',
2416 2422 default=lambda: encoding.encoding,
2417 2423 )
2418 2424 coreconfigitem(
2419 2425 b'web',
2420 2426 b'errorlog',
2421 2427 default=b'-',
2422 2428 )
2423 2429 coreconfigitem(
2424 2430 b'web',
2425 2431 b'ipv6',
2426 2432 default=False,
2427 2433 )
2428 2434 coreconfigitem(
2429 2435 b'web',
2430 2436 b'maxchanges',
2431 2437 default=10,
2432 2438 )
2433 2439 coreconfigitem(
2434 2440 b'web',
2435 2441 b'maxfiles',
2436 2442 default=10,
2437 2443 )
2438 2444 coreconfigitem(
2439 2445 b'web',
2440 2446 b'maxshortchanges',
2441 2447 default=60,
2442 2448 )
2443 2449 coreconfigitem(
2444 2450 b'web',
2445 2451 b'motd',
2446 2452 default=b'',
2447 2453 )
2448 2454 coreconfigitem(
2449 2455 b'web',
2450 2456 b'name',
2451 2457 default=dynamicdefault,
2452 2458 )
2453 2459 coreconfigitem(
2454 2460 b'web',
2455 2461 b'port',
2456 2462 default=8000,
2457 2463 )
2458 2464 coreconfigitem(
2459 2465 b'web',
2460 2466 b'prefix',
2461 2467 default=b'',
2462 2468 )
2463 2469 coreconfigitem(
2464 2470 b'web',
2465 2471 b'push_ssl',
2466 2472 default=True,
2467 2473 )
2468 2474 coreconfigitem(
2469 2475 b'web',
2470 2476 b'refreshinterval',
2471 2477 default=20,
2472 2478 )
2473 2479 coreconfigitem(
2474 2480 b'web',
2475 2481 b'server-header',
2476 2482 default=None,
2477 2483 )
2478 2484 coreconfigitem(
2479 2485 b'web',
2480 2486 b'static',
2481 2487 default=None,
2482 2488 )
2483 2489 coreconfigitem(
2484 2490 b'web',
2485 2491 b'staticurl',
2486 2492 default=None,
2487 2493 )
2488 2494 coreconfigitem(
2489 2495 b'web',
2490 2496 b'stripes',
2491 2497 default=1,
2492 2498 )
2493 2499 coreconfigitem(
2494 2500 b'web',
2495 2501 b'style',
2496 2502 default=b'paper',
2497 2503 )
2498 2504 coreconfigitem(
2499 2505 b'web',
2500 2506 b'templates',
2501 2507 default=None,
2502 2508 )
2503 2509 coreconfigitem(
2504 2510 b'web',
2505 2511 b'view',
2506 2512 default=b'served',
2507 2513 experimental=True,
2508 2514 )
2509 2515 coreconfigitem(
2510 2516 b'worker',
2511 2517 b'backgroundclose',
2512 2518 default=dynamicdefault,
2513 2519 )
2514 2520 # Windows defaults to a limit of 512 open files. A buffer of 128
2515 2521 # should give us enough headway.
2516 2522 coreconfigitem(
2517 2523 b'worker',
2518 2524 b'backgroundclosemaxqueue',
2519 2525 default=384,
2520 2526 )
2521 2527 coreconfigitem(
2522 2528 b'worker',
2523 2529 b'backgroundcloseminfilecount',
2524 2530 default=2048,
2525 2531 )
2526 2532 coreconfigitem(
2527 2533 b'worker',
2528 2534 b'backgroundclosethreadcount',
2529 2535 default=4,
2530 2536 )
2531 2537 coreconfigitem(
2532 2538 b'worker',
2533 2539 b'enabled',
2534 2540 default=True,
2535 2541 )
2536 2542 coreconfigitem(
2537 2543 b'worker',
2538 2544 b'numcpus',
2539 2545 default=None,
2540 2546 )
2541 2547
2542 2548 # Rebase related configuration moved to core because other extension are doing
2543 2549 # strange things. For example, shelve import the extensions to reuse some bit
2544 2550 # without formally loading it.
2545 2551 coreconfigitem(
2546 2552 b'commands',
2547 2553 b'rebase.requiredest',
2548 2554 default=False,
2549 2555 )
2550 2556 coreconfigitem(
2551 2557 b'experimental',
2552 2558 b'rebaseskipobsolete',
2553 2559 default=True,
2554 2560 )
2555 2561 coreconfigitem(
2556 2562 b'rebase',
2557 2563 b'singletransaction',
2558 2564 default=False,
2559 2565 )
2560 2566 coreconfigitem(
2561 2567 b'rebase',
2562 2568 b'experimental.inmemory',
2563 2569 default=False,
2564 2570 )
@@ -1,505 +1,507 b''
1 1 # setdiscovery.py - improved discovery of common nodeset for mercurial
2 2 #
3 3 # Copyright 2010 Benoit Boissinot <bboissin@gmail.com>
4 4 # and Peter Arrenbrecht <peter@arrenbrecht.ch>
5 5 #
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2 or any later version.
8 8 """
9 9 Algorithm works in the following way. You have two repository: local and
10 10 remote. They both contains a DAG of changelists.
11 11
12 12 The goal of the discovery protocol is to find one set of node *common*,
13 13 the set of nodes shared by local and remote.
14 14
15 15 One of the issue with the original protocol was latency, it could
16 16 potentially require lots of roundtrips to discover that the local repo was a
17 17 subset of remote (which is a very common case, you usually have few changes
18 18 compared to upstream, while upstream probably had lots of development).
19 19
20 20 The new protocol only requires one interface for the remote repo: `known()`,
21 21 which given a set of changelists tells you if they are present in the DAG.
22 22
23 23 The algorithm then works as follow:
24 24
25 25 - We will be using three sets, `common`, `missing`, `unknown`. Originally
26 26 all nodes are in `unknown`.
27 27 - Take a sample from `unknown`, call `remote.known(sample)`
28 28 - For each node that remote knows, move it and all its ancestors to `common`
29 29 - For each node that remote doesn't know, move it and all its descendants
30 30 to `missing`
31 31 - Iterate until `unknown` is empty
32 32
33 33 There are a couple optimizations, first is instead of starting with a random
34 34 sample of missing, start by sending all heads, in the case where the local
35 35 repo is a subset, you computed the answer in one round trip.
36 36
37 37 Then you can do something similar to the bisecting strategy used when
38 38 finding faulty changesets. Instead of random samples, you can try picking
39 39 nodes that will maximize the number of nodes that will be
40 40 classified with it (since all ancestors or descendants will be marked as well).
41 41 """
42 42
43 43 from __future__ import absolute_import
44 44
45 45 import collections
46 46 import random
47 47
48 48 from .i18n import _
49 49 from .node import (
50 50 nullid,
51 51 nullrev,
52 52 )
53 53 from . import (
54 54 error,
55 55 policy,
56 56 util,
57 57 )
58 58
59 59
60 60 def _updatesample(revs, heads, sample, parentfn, quicksamplesize=0):
61 61 """update an existing sample to match the expected size
62 62
63 63 The sample is updated with revs exponentially distant from each head of the
64 64 <revs> set. (H~1, H~2, H~4, H~8, etc).
65 65
66 66 If a target size is specified, the sampling will stop once this size is
67 67 reached. Otherwise sampling will happen until roots of the <revs> set are
68 68 reached.
69 69
70 70 :revs: set of revs we want to discover (if None, assume the whole dag)
71 71 :heads: set of DAG head revs
72 72 :sample: a sample to update
73 73 :parentfn: a callable to resolve parents for a revision
74 74 :quicksamplesize: optional target size of the sample"""
75 75 dist = {}
76 76 visit = collections.deque(heads)
77 77 seen = set()
78 78 factor = 1
79 79 while visit:
80 80 curr = visit.popleft()
81 81 if curr in seen:
82 82 continue
83 83 d = dist.setdefault(curr, 1)
84 84 if d > factor:
85 85 factor *= 2
86 86 if d == factor:
87 87 sample.add(curr)
88 88 if quicksamplesize and (len(sample) >= quicksamplesize):
89 89 return
90 90 seen.add(curr)
91 91
92 92 for p in parentfn(curr):
93 93 if p != nullrev and (not revs or p in revs):
94 94 dist.setdefault(p, d + 1)
95 95 visit.append(p)
96 96
97 97
98 98 def _limitsample(sample, desiredlen, randomize=True):
99 99 """return a random subset of sample of at most desiredlen item.
100 100
101 101 If randomize is False, though, a deterministic subset is returned.
102 102 This is meant for integration tests.
103 103 """
104 104 if len(sample) <= desiredlen:
105 105 return sample
106 106 if randomize:
107 107 return set(random.sample(sample, desiredlen))
108 108 sample = list(sample)
109 109 sample.sort()
110 110 return set(sample[:desiredlen])
111 111
112 112
113 113 class partialdiscovery(object):
114 114 """an object representing ongoing discovery
115 115
116 116 Feed with data from the remote repository, this object keep track of the
117 117 current set of changeset in various states:
118 118
119 119 - common: revs also known remotely
120 120 - undecided: revs we don't have information on yet
121 121 - missing: revs missing remotely
122 122 (all tracked revisions are known locally)
123 123 """
124 124
125 125 def __init__(self, repo, targetheads, respectsize, randomize=True):
126 126 self._repo = repo
127 127 self._targetheads = targetheads
128 128 self._common = repo.changelog.incrementalmissingrevs()
129 129 self._undecided = None
130 130 self.missing = set()
131 131 self._childrenmap = None
132 132 self._respectsize = respectsize
133 133 self.randomize = randomize
134 134
135 135 def addcommons(self, commons):
136 136 """register nodes known as common"""
137 137 self._common.addbases(commons)
138 138 if self._undecided is not None:
139 139 self._common.removeancestorsfrom(self._undecided)
140 140
141 141 def addmissings(self, missings):
142 142 """register some nodes as missing"""
143 143 newmissing = self._repo.revs(b'%ld::%ld', missings, self.undecided)
144 144 if newmissing:
145 145 self.missing.update(newmissing)
146 146 self.undecided.difference_update(newmissing)
147 147
148 148 def addinfo(self, sample):
149 149 """consume an iterable of (rev, known) tuples"""
150 150 common = set()
151 151 missing = set()
152 152 for rev, known in sample:
153 153 if known:
154 154 common.add(rev)
155 155 else:
156 156 missing.add(rev)
157 157 if common:
158 158 self.addcommons(common)
159 159 if missing:
160 160 self.addmissings(missing)
161 161
162 162 def hasinfo(self):
163 163 """return True is we have any clue about the remote state"""
164 164 return self._common.hasbases()
165 165
166 166 def iscomplete(self):
167 167 """True if all the necessary data have been gathered"""
168 168 return self._undecided is not None and not self._undecided
169 169
170 170 @property
171 171 def undecided(self):
172 172 if self._undecided is not None:
173 173 return self._undecided
174 174 self._undecided = set(self._common.missingancestors(self._targetheads))
175 175 return self._undecided
176 176
177 177 def stats(self):
178 178 return {
179 179 'undecided': len(self.undecided),
180 180 }
181 181
182 182 def commonheads(self):
183 183 """the heads of the known common set"""
184 184 # heads(common) == heads(common.bases) since common represents
185 185 # common.bases and all its ancestors
186 186 return self._common.basesheads()
187 187
188 188 def _parentsgetter(self):
189 189 getrev = self._repo.changelog.index.__getitem__
190 190
191 191 def getparents(r):
192 192 return getrev(r)[5:7]
193 193
194 194 return getparents
195 195
196 196 def _childrengetter(self):
197 197
198 198 if self._childrenmap is not None:
199 199 # During discovery, the `undecided` set keep shrinking.
200 200 # Therefore, the map computed for an iteration N will be
201 201 # valid for iteration N+1. Instead of computing the same
202 202 # data over and over we cached it the first time.
203 203 return self._childrenmap.__getitem__
204 204
205 205 # _updatesample() essentially does interaction over revisions to look
206 206 # up their children. This lookup is expensive and doing it in a loop is
207 207 # quadratic. We precompute the children for all relevant revisions and
208 208 # make the lookup in _updatesample() a simple dict lookup.
209 209 self._childrenmap = children = {}
210 210
211 211 parentrevs = self._parentsgetter()
212 212 revs = self.undecided
213 213
214 214 for rev in sorted(revs):
215 215 # Always ensure revision has an entry so we don't need to worry
216 216 # about missing keys.
217 217 children[rev] = []
218 218 for prev in parentrevs(rev):
219 219 if prev == nullrev:
220 220 continue
221 221 c = children.get(prev)
222 222 if c is not None:
223 223 c.append(rev)
224 224 return children.__getitem__
225 225
226 226 def takequicksample(self, headrevs, size):
227 227 """takes a quick sample of size <size>
228 228
229 229 It is meant for initial sampling and focuses on querying heads and close
230 230 ancestors of heads.
231 231
232 232 :headrevs: set of head revisions in local DAG to consider
233 233 :size: the maximum size of the sample"""
234 234 revs = self.undecided
235 235 if len(revs) <= size:
236 236 return list(revs)
237 237 sample = set(self._repo.revs(b'heads(%ld)', revs))
238 238
239 239 if len(sample) >= size:
240 240 return _limitsample(sample, size, randomize=self.randomize)
241 241
242 242 _updatesample(
243 243 None, headrevs, sample, self._parentsgetter(), quicksamplesize=size
244 244 )
245 245 return sample
246 246
247 247 def takefullsample(self, headrevs, size):
248 248 revs = self.undecided
249 249 if len(revs) <= size:
250 250 return list(revs)
251 251 repo = self._repo
252 252 sample = set(repo.revs(b'heads(%ld)', revs))
253 253 parentrevs = self._parentsgetter()
254 254
255 255 # update from heads
256 256 revsheads = sample.copy()
257 257 _updatesample(revs, revsheads, sample, parentrevs)
258 258
259 259 # update from roots
260 260 revsroots = set(repo.revs(b'roots(%ld)', revs))
261 261 childrenrevs = self._childrengetter()
262 262 _updatesample(revs, revsroots, sample, childrenrevs)
263 263 assert sample
264 264
265 265 if not self._respectsize:
266 266 size = max(size, min(len(revsroots), len(revsheads)))
267 267
268 268 sample = _limitsample(sample, size, randomize=self.randomize)
269 269 if len(sample) < size:
270 270 more = size - len(sample)
271 271 takefrom = list(revs - sample)
272 272 if self.randomize:
273 273 sample.update(random.sample(takefrom, more))
274 274 else:
275 275 takefrom.sort()
276 276 sample.update(takefrom[:more])
277 277 return sample
278 278
279 279
280 280 partialdiscovery = policy.importrust(
281 281 'discovery', member='PartialDiscovery', default=partialdiscovery
282 282 )
283 283
284 284
285 285 def findcommonheads(
286 286 ui,
287 287 local,
288 288 remote,
289 289 initialsamplesize=100,
290 290 fullsamplesize=200,
291 291 abortwhenunrelated=True,
292 292 ancestorsof=None,
293 samplegrowth=1.05,
294 293 audit=None,
295 294 ):
296 295 """Return a tuple (common, anyincoming, remoteheads) used to identify
297 296 missing nodes from or in remote.
298 297
299 298 The audit argument is an optional dictionnary that a caller can pass. it
300 299 will be updated with extra data about the discovery, this is useful for
301 300 debug.
302 301 """
302
303 samplegrowth = float(ui.config(b'devel', b'discovery.grow-sample.rate'))
304
303 305 start = util.timer()
304 306
305 307 roundtrips = 0
306 308 cl = local.changelog
307 309 clnode = cl.node
308 310 clrev = cl.rev
309 311
310 312 if ancestorsof is not None:
311 313 ownheads = [clrev(n) for n in ancestorsof]
312 314 else:
313 315 ownheads = [rev for rev in cl.headrevs() if rev != nullrev]
314 316
315 317 # early exit if we know all the specified remote heads already
316 318 ui.debug(b"query 1; heads\n")
317 319 roundtrips += 1
318 320 # We also ask remote about all the local heads. That set can be arbitrarily
319 321 # large, so we used to limit it size to `initialsamplesize`. We no longer
320 322 # do as it proved counter productive. The skipped heads could lead to a
321 323 # large "undecided" set, slower to be clarified than if we asked the
322 324 # question for all heads right away.
323 325 #
324 326 # We are already fetching all server heads using the `heads` commands,
325 327 # sending a equivalent number of heads the other way should not have a
326 328 # significant impact. In addition, it is very likely that we are going to
327 329 # have to issue "known" request for an equivalent amount of revisions in
328 330 # order to decide if theses heads are common or missing.
329 331 #
330 332 # find a detailled analysis below.
331 333 #
332 334 # Case A: local and server both has few heads
333 335 #
334 336 # Ownheads is below initialsamplesize, limit would not have any effect.
335 337 #
336 338 # Case B: local has few heads and server has many
337 339 #
338 340 # Ownheads is below initialsamplesize, limit would not have any effect.
339 341 #
340 342 # Case C: local and server both has many heads
341 343 #
342 344 # We now transfert some more data, but not significantly more than is
343 345 # already transfered to carry the server heads.
344 346 #
345 347 # Case D: local has many heads, server has few
346 348 #
347 349 # D.1 local heads are mostly known remotely
348 350 #
349 351 # All the known head will have be part of a `known` request at some
350 352 # point for the discovery to finish. Sending them all earlier is
351 353 # actually helping.
352 354 #
353 355 # (This case is fairly unlikely, it requires the numerous heads to all
354 356 # be merged server side in only a few heads)
355 357 #
356 358 # D.2 local heads are mostly missing remotely
357 359 #
358 360 # To determine that the heads are missing, we'll have to issue `known`
359 361 # request for them or one of their ancestors. This amount of `known`
360 362 # request will likely be in the same order of magnitude than the amount
361 363 # of local heads.
362 364 #
363 365 # The only case where we can be more efficient using `known` request on
364 366 # ancestors are case were all the "missing" local heads are based on a
365 367 # few changeset, also "missing". This means we would have a "complex"
366 368 # graph (with many heads) attached to, but very independant to a the
367 369 # "simple" graph on the server. This is a fairly usual case and have
368 370 # not been met in the wild so far.
369 371 if remote.limitedarguments:
370 372 sample = _limitsample(ownheads, initialsamplesize)
371 373 # indices between sample and externalized version must match
372 374 sample = list(sample)
373 375 else:
374 376 sample = ownheads
375 377
376 378 with remote.commandexecutor() as e:
377 379 fheads = e.callcommand(b'heads', {})
378 380 fknown = e.callcommand(
379 381 b'known',
380 382 {
381 383 b'nodes': [clnode(r) for r in sample],
382 384 },
383 385 )
384 386
385 387 srvheadhashes, yesno = fheads.result(), fknown.result()
386 388
387 389 if audit is not None:
388 390 audit[b'total-roundtrips'] = 1
389 391
390 392 if cl.tip() == nullid:
391 393 if srvheadhashes != [nullid]:
392 394 return [nullid], True, srvheadhashes
393 395 return [nullid], False, []
394 396
395 397 # start actual discovery (we note this before the next "if" for
396 398 # compatibility reasons)
397 399 ui.status(_(b"searching for changes\n"))
398 400
399 401 knownsrvheads = [] # revnos of remote heads that are known locally
400 402 for node in srvheadhashes:
401 403 if node == nullid:
402 404 continue
403 405
404 406 try:
405 407 knownsrvheads.append(clrev(node))
406 408 # Catches unknown and filtered nodes.
407 409 except error.LookupError:
408 410 continue
409 411
410 412 if len(knownsrvheads) == len(srvheadhashes):
411 413 ui.debug(b"all remote heads known locally\n")
412 414 return srvheadhashes, False, srvheadhashes
413 415
414 416 if len(sample) == len(ownheads) and all(yesno):
415 417 ui.note(_(b"all local changesets known remotely\n"))
416 418 ownheadhashes = [clnode(r) for r in ownheads]
417 419 return ownheadhashes, True, srvheadhashes
418 420
419 421 # full blown discovery
420 422
421 423 # if the server has a limit to its arguments size, we can't grow the sample.
422 424 hard_limit_sample = remote.limitedarguments
423 425 grow_sample = local.ui.configbool(b'devel', b'discovery.grow-sample')
424 426 hard_limit_sample = hard_limit_sample and grow_sample
425 427
426 428 randomize = ui.configbool(b'devel', b'discovery.randomize')
427 429 disco = partialdiscovery(
428 430 local, ownheads, hard_limit_sample, randomize=randomize
429 431 )
430 432 # treat remote heads (and maybe own heads) as a first implicit sample
431 433 # response
432 434 disco.addcommons(knownsrvheads)
433 435 disco.addinfo(zip(sample, yesno))
434 436
435 437 full = False
436 438 progress = ui.makeprogress(_(b'searching'), unit=_(b'queries'))
437 439 while not disco.iscomplete():
438 440
439 441 if full or disco.hasinfo():
440 442 if full:
441 443 ui.note(_(b"sampling from both directions\n"))
442 444 else:
443 445 ui.debug(b"taking initial sample\n")
444 446 samplefunc = disco.takefullsample
445 447 targetsize = fullsamplesize
446 448 if not hard_limit_sample:
447 449 fullsamplesize = int(fullsamplesize * samplegrowth)
448 450 else:
449 451 # use even cheaper initial sample
450 452 ui.debug(b"taking quick initial sample\n")
451 453 samplefunc = disco.takequicksample
452 454 targetsize = initialsamplesize
453 455 sample = samplefunc(ownheads, targetsize)
454 456
455 457 roundtrips += 1
456 458 progress.update(roundtrips)
457 459 stats = disco.stats()
458 460 ui.debug(
459 461 b"query %i; still undecided: %i, sample size is: %i\n"
460 462 % (roundtrips, stats['undecided'], len(sample))
461 463 )
462 464
463 465 # indices between sample and externalized version must match
464 466 sample = list(sample)
465 467
466 468 with remote.commandexecutor() as e:
467 469 yesno = e.callcommand(
468 470 b'known',
469 471 {
470 472 b'nodes': [clnode(r) for r in sample],
471 473 },
472 474 ).result()
473 475
474 476 full = True
475 477
476 478 disco.addinfo(zip(sample, yesno))
477 479
478 480 result = disco.commonheads()
479 481 elapsed = util.timer() - start
480 482 progress.complete()
481 483 ui.debug(b"%d total queries in %.4fs\n" % (roundtrips, elapsed))
482 484 msg = (
483 485 b'found %d common and %d unknown server heads,'
484 486 b' %d roundtrips in %.4fs\n'
485 487 )
486 488 missing = set(result) - set(knownsrvheads)
487 489 ui.log(b'discovery', msg, len(result), len(missing), roundtrips, elapsed)
488 490
489 491 if audit is not None:
490 492 audit[b'total-roundtrips'] = roundtrips
491 493
492 494 if not result and srvheadhashes != [nullid]:
493 495 if abortwhenunrelated:
494 496 raise error.Abort(_(b"repository is unrelated"))
495 497 else:
496 498 ui.warn(_(b"warning: repository is unrelated\n"))
497 499 return (
498 500 {nullid},
499 501 True,
500 502 srvheadhashes,
501 503 )
502 504
503 505 anyincoming = srvheadhashes != [nullid]
504 506 result = {clnode(r) for r in result}
505 507 return result, anyincoming, srvheadhashes
@@ -1,1541 +1,1583 b''
1 1
2 2 Function to test discovery between two repos in both directions, using both the local shortcut
3 3 (which is currently not activated by default) and the full remotable protocol:
4 4
5 5 $ testdesc() { # revs_a, revs_b, dagdesc
6 6 > if [ -d foo ]; then rm -rf foo; fi
7 7 > hg init foo
8 8 > cd foo
9 9 > hg debugbuilddag "$3"
10 10 > hg clone . a $1 --quiet
11 11 > hg clone . b $2 --quiet
12 12 > echo
13 13 > echo "% -- a -> b tree"
14 14 > hg -R a debugdiscovery b --verbose --old
15 15 > echo
16 16 > echo "% -- a -> b set"
17 17 > hg -R a debugdiscovery b --verbose --debug --config progress.debug=true
18 18 > echo
19 19 > echo "% -- a -> b set (tip only)"
20 20 > hg -R a debugdiscovery b --verbose --debug --config progress.debug=true --rev tip
21 21 > echo
22 22 > echo "% -- b -> a tree"
23 23 > hg -R b debugdiscovery a --verbose --old
24 24 > echo
25 25 > echo "% -- b -> a set"
26 26 > hg -R b debugdiscovery a --verbose --debug --config progress.debug=true
27 27 > echo
28 28 > echo "% -- b -> a set (tip only)"
29 29 > hg -R b debugdiscovery a --verbose --debug --config progress.debug=true --rev tip
30 30 > cd ..
31 31 > }
32 32
33 33
34 34 Small superset:
35 35
36 36 $ testdesc '-ra1 -ra2' '-rb1 -rb2 -rb3' '
37 37 > +2:f +1:a1:b1
38 38 > <f +4 :a2
39 39 > +5 :b2
40 40 > <f +3 :b3'
41 41
42 42 % -- a -> b tree
43 43 comparing with b
44 44 searching for changes
45 45 unpruned common: 01241442b3c2 66f7d451a68b b5714e113bc0
46 46 elapsed time: * seconds (glob)
47 47 round-trips: 2
48 48 heads summary:
49 49 total common heads: 2
50 50 also local heads: 2
51 51 also remote heads: 1
52 52 both: 1
53 53 local heads: 2
54 54 common: 2
55 55 missing: 0
56 56 remote heads: 3
57 57 common: 1
58 58 unknown: 2
59 59 local changesets: 7
60 60 common: 7
61 61 heads: 2
62 62 roots: 1
63 63 missing: 0
64 64 heads: 0
65 65 roots: 0
66 66 first undecided set: 3
67 67 heads: 1
68 68 roots: 1
69 69 common: 3
70 70 missing: 0
71 71 common heads: 01241442b3c2 b5714e113bc0
72 72
73 73 % -- a -> b set
74 74 comparing with b
75 75 query 1; heads
76 76 searching for changes
77 77 all local changesets known remotely
78 78 elapsed time: * seconds (glob)
79 79 round-trips: 1
80 80 heads summary:
81 81 total common heads: 2
82 82 also local heads: 2
83 83 also remote heads: 1
84 84 both: 1
85 85 local heads: 2
86 86 common: 2
87 87 missing: 0
88 88 remote heads: 3
89 89 common: 1
90 90 unknown: 2
91 91 local changesets: 7
92 92 common: 7
93 93 heads: 2
94 94 roots: 1
95 95 missing: 0
96 96 heads: 0
97 97 roots: 0
98 98 first undecided set: 3
99 99 heads: 1
100 100 roots: 1
101 101 common: 3
102 102 missing: 0
103 103 common heads: 01241442b3c2 b5714e113bc0
104 104
105 105 % -- a -> b set (tip only)
106 106 comparing with b
107 107 query 1; heads
108 108 searching for changes
109 109 all local changesets known remotely
110 110 elapsed time: * seconds (glob)
111 111 round-trips: 1
112 112 heads summary:
113 113 total common heads: 1
114 114 also local heads: 1
115 115 also remote heads: 0
116 116 both: 0
117 117 local heads: 2
118 118 common: 1
119 119 missing: 1
120 120 remote heads: 3
121 121 common: 0
122 122 unknown: 3
123 123 local changesets: 7
124 124 common: 6
125 125 heads: 1
126 126 roots: 1
127 127 missing: 1
128 128 heads: 1
129 129 roots: 1
130 130 first undecided set: 6
131 131 heads: 2
132 132 roots: 1
133 133 common: 5
134 134 missing: 1
135 135 common heads: b5714e113bc0
136 136
137 137 % -- b -> a tree
138 138 comparing with a
139 139 searching for changes
140 140 unpruned common: 01241442b3c2 b5714e113bc0
141 141 elapsed time: * seconds (glob)
142 142 round-trips: 1
143 143 heads summary:
144 144 total common heads: 2
145 145 also local heads: 1
146 146 also remote heads: 2
147 147 both: 1
148 148 local heads: 3
149 149 common: 1
150 150 missing: 2
151 151 remote heads: 2
152 152 common: 2
153 153 unknown: 0
154 154 local changesets: 15
155 155 common: 7
156 156 heads: 2
157 157 roots: 1
158 158 missing: 8
159 159 heads: 2
160 160 roots: 2
161 161 first undecided set: 8
162 162 heads: 2
163 163 roots: 2
164 164 common: 0
165 165 missing: 8
166 166 common heads: 01241442b3c2 b5714e113bc0
167 167
168 168 % -- b -> a set
169 169 comparing with a
170 170 query 1; heads
171 171 searching for changes
172 172 all remote heads known locally
173 173 elapsed time: * seconds (glob)
174 174 round-trips: 1
175 175 heads summary:
176 176 total common heads: 2
177 177 also local heads: 1
178 178 also remote heads: 2
179 179 both: 1
180 180 local heads: 3
181 181 common: 1
182 182 missing: 2
183 183 remote heads: 2
184 184 common: 2
185 185 unknown: 0
186 186 local changesets: 15
187 187 common: 7
188 188 heads: 2
189 189 roots: 1
190 190 missing: 8
191 191 heads: 2
192 192 roots: 2
193 193 first undecided set: 8
194 194 heads: 2
195 195 roots: 2
196 196 common: 0
197 197 missing: 8
198 198 common heads: 01241442b3c2 b5714e113bc0
199 199
200 200 % -- b -> a set (tip only)
201 201 comparing with a
202 202 query 1; heads
203 203 searching for changes
204 204 all remote heads known locally
205 205 elapsed time: * seconds (glob)
206 206 round-trips: 1
207 207 heads summary:
208 208 total common heads: 2
209 209 also local heads: 1
210 210 also remote heads: 2
211 211 both: 1
212 212 local heads: 3
213 213 common: 1
214 214 missing: 2
215 215 remote heads: 2
216 216 common: 2
217 217 unknown: 0
218 218 local changesets: 15
219 219 common: 7
220 220 heads: 2
221 221 roots: 1
222 222 missing: 8
223 223 heads: 2
224 224 roots: 2
225 225 first undecided set: 8
226 226 heads: 2
227 227 roots: 2
228 228 common: 0
229 229 missing: 8
230 230 common heads: 01241442b3c2 b5714e113bc0
231 231
232 232
233 233 Many new:
234 234
235 235 $ testdesc '-ra1 -ra2' '-rb' '
236 236 > +2:f +3:a1 +3:b
237 237 > <f +30 :a2'
238 238
239 239 % -- a -> b tree
240 240 comparing with b
241 241 searching for changes
242 242 unpruned common: bebd167eb94d
243 243 elapsed time: * seconds (glob)
244 244 round-trips: 2
245 245 heads summary:
246 246 total common heads: 1
247 247 also local heads: 1
248 248 also remote heads: 0
249 249 both: 0
250 250 local heads: 2
251 251 common: 1
252 252 missing: 1
253 253 remote heads: 1
254 254 common: 0
255 255 unknown: 1
256 256 local changesets: 35
257 257 common: 5
258 258 heads: 1
259 259 roots: 1
260 260 missing: 30
261 261 heads: 1
262 262 roots: 1
263 263 first undecided set: 34
264 264 heads: 2
265 265 roots: 1
266 266 common: 4
267 267 missing: 30
268 268 common heads: bebd167eb94d
269 269
270 270 % -- a -> b set
271 271 comparing with b
272 272 query 1; heads
273 273 searching for changes
274 274 taking initial sample
275 275 searching: 2 queries
276 276 query 2; still undecided: 29, sample size is: 29
277 277 2 total queries in *.????s (glob)
278 278 elapsed time: * seconds (glob)
279 279 round-trips: 2
280 280 heads summary:
281 281 total common heads: 1
282 282 also local heads: 1
283 283 also remote heads: 0
284 284 both: 0
285 285 local heads: 2
286 286 common: 1
287 287 missing: 1
288 288 remote heads: 1
289 289 common: 0
290 290 unknown: 1
291 291 local changesets: 35
292 292 common: 5
293 293 heads: 1
294 294 roots: 1
295 295 missing: 30
296 296 heads: 1
297 297 roots: 1
298 298 first undecided set: 34
299 299 heads: 2
300 300 roots: 1
301 301 common: 4
302 302 missing: 30
303 303 common heads: bebd167eb94d
304 304
305 305 % -- a -> b set (tip only)
306 306 comparing with b
307 307 query 1; heads
308 308 searching for changes
309 309 taking quick initial sample
310 310 searching: 2 queries
311 311 query 2; still undecided: 31, sample size is: 31
312 312 2 total queries in *.????s (glob)
313 313 elapsed time: * seconds (glob)
314 314 round-trips: 2
315 315 heads summary:
316 316 total common heads: 1
317 317 also local heads: 0
318 318 also remote heads: 0
319 319 both: 0
320 320 local heads: 2
321 321 common: 0
322 322 missing: 2
323 323 remote heads: 1
324 324 common: 0
325 325 unknown: 1
326 326 local changesets: 35
327 327 common: 2
328 328 heads: 1
329 329 roots: 1
330 330 missing: 33
331 331 heads: 2
332 332 roots: 2
333 333 first undecided set: 35
334 334 heads: 2
335 335 roots: 1
336 336 common: 2
337 337 missing: 33
338 338 common heads: 66f7d451a68b
339 339
340 340 % -- b -> a tree
341 341 comparing with a
342 342 searching for changes
343 343 unpruned common: 66f7d451a68b bebd167eb94d
344 344 elapsed time: * seconds (glob)
345 345 round-trips: 4
346 346 heads summary:
347 347 total common heads: 1
348 348 also local heads: 0
349 349 also remote heads: 1
350 350 both: 0
351 351 local heads: 1
352 352 common: 0
353 353 missing: 1
354 354 remote heads: 2
355 355 common: 1
356 356 unknown: 1
357 357 local changesets: 8
358 358 common: 5
359 359 heads: 1
360 360 roots: 1
361 361 missing: 3
362 362 heads: 1
363 363 roots: 1
364 364 first undecided set: 3
365 365 heads: 1
366 366 roots: 1
367 367 common: 0
368 368 missing: 3
369 369 common heads: bebd167eb94d
370 370
371 371 % -- b -> a set
372 372 comparing with a
373 373 query 1; heads
374 374 searching for changes
375 375 taking initial sample
376 376 searching: 2 queries
377 377 query 2; still undecided: 2, sample size is: 2
378 378 2 total queries in *.????s (glob)
379 379 elapsed time: * seconds (glob)
380 380 round-trips: 2
381 381 heads summary:
382 382 total common heads: 1
383 383 also local heads: 0
384 384 also remote heads: 1
385 385 both: 0
386 386 local heads: 1
387 387 common: 0
388 388 missing: 1
389 389 remote heads: 2
390 390 common: 1
391 391 unknown: 1
392 392 local changesets: 8
393 393 common: 5
394 394 heads: 1
395 395 roots: 1
396 396 missing: 3
397 397 heads: 1
398 398 roots: 1
399 399 first undecided set: 3
400 400 heads: 1
401 401 roots: 1
402 402 common: 0
403 403 missing: 3
404 404 common heads: bebd167eb94d
405 405
406 406 % -- b -> a set (tip only)
407 407 comparing with a
408 408 query 1; heads
409 409 searching for changes
410 410 taking initial sample
411 411 searching: 2 queries
412 412 query 2; still undecided: 2, sample size is: 2
413 413 2 total queries in *.????s (glob)
414 414 elapsed time: * seconds (glob)
415 415 round-trips: 2
416 416 heads summary:
417 417 total common heads: 1
418 418 also local heads: 0
419 419 also remote heads: 1
420 420 both: 0
421 421 local heads: 1
422 422 common: 0
423 423 missing: 1
424 424 remote heads: 2
425 425 common: 1
426 426 unknown: 1
427 427 local changesets: 8
428 428 common: 5
429 429 heads: 1
430 430 roots: 1
431 431 missing: 3
432 432 heads: 1
433 433 roots: 1
434 434 first undecided set: 3
435 435 heads: 1
436 436 roots: 1
437 437 common: 0
438 438 missing: 3
439 439 common heads: bebd167eb94d
440 440
441 441 Both sides many new with stub:
442 442
443 443 $ testdesc '-ra1 -ra2' '-rb' '
444 444 > +2:f +2:a1 +30 :b
445 445 > <f +30 :a2'
446 446
447 447 % -- a -> b tree
448 448 comparing with b
449 449 searching for changes
450 450 unpruned common: 2dc09a01254d
451 451 elapsed time: * seconds (glob)
452 452 round-trips: 4
453 453 heads summary:
454 454 total common heads: 1
455 455 also local heads: 1
456 456 also remote heads: 0
457 457 both: 0
458 458 local heads: 2
459 459 common: 1
460 460 missing: 1
461 461 remote heads: 1
462 462 common: 0
463 463 unknown: 1
464 464 local changesets: 34
465 465 common: 4
466 466 heads: 1
467 467 roots: 1
468 468 missing: 30
469 469 heads: 1
470 470 roots: 1
471 471 first undecided set: 33
472 472 heads: 2
473 473 roots: 1
474 474 common: 3
475 475 missing: 30
476 476 common heads: 2dc09a01254d
477 477
478 478 % -- a -> b set
479 479 comparing with b
480 480 query 1; heads
481 481 searching for changes
482 482 taking initial sample
483 483 searching: 2 queries
484 484 query 2; still undecided: 29, sample size is: 29
485 485 2 total queries in *.????s (glob)
486 486 elapsed time: * seconds (glob)
487 487 round-trips: 2
488 488 heads summary:
489 489 total common heads: 1
490 490 also local heads: 1
491 491 also remote heads: 0
492 492 both: 0
493 493 local heads: 2
494 494 common: 1
495 495 missing: 1
496 496 remote heads: 1
497 497 common: 0
498 498 unknown: 1
499 499 local changesets: 34
500 500 common: 4
501 501 heads: 1
502 502 roots: 1
503 503 missing: 30
504 504 heads: 1
505 505 roots: 1
506 506 first undecided set: 33
507 507 heads: 2
508 508 roots: 1
509 509 common: 3
510 510 missing: 30
511 511 common heads: 2dc09a01254d
512 512
513 513 % -- a -> b set (tip only)
514 514 comparing with b
515 515 query 1; heads
516 516 searching for changes
517 517 taking quick initial sample
518 518 searching: 2 queries
519 519 query 2; still undecided: 31, sample size is: 31
520 520 2 total queries in *.????s (glob)
521 521 elapsed time: * seconds (glob)
522 522 round-trips: 2
523 523 heads summary:
524 524 total common heads: 1
525 525 also local heads: 0
526 526 also remote heads: 0
527 527 both: 0
528 528 local heads: 2
529 529 common: 0
530 530 missing: 2
531 531 remote heads: 1
532 532 common: 0
533 533 unknown: 1
534 534 local changesets: 34
535 535 common: 2
536 536 heads: 1
537 537 roots: 1
538 538 missing: 32
539 539 heads: 2
540 540 roots: 2
541 541 first undecided set: 34
542 542 heads: 2
543 543 roots: 1
544 544 common: 2
545 545 missing: 32
546 546 common heads: 66f7d451a68b
547 547
548 548 % -- b -> a tree
549 549 comparing with a
550 550 searching for changes
551 551 unpruned common: 2dc09a01254d 66f7d451a68b
552 552 elapsed time: * seconds (glob)
553 553 round-trips: 4
554 554 heads summary:
555 555 total common heads: 1
556 556 also local heads: 0
557 557 also remote heads: 1
558 558 both: 0
559 559 local heads: 1
560 560 common: 0
561 561 missing: 1
562 562 remote heads: 2
563 563 common: 1
564 564 unknown: 1
565 565 local changesets: 34
566 566 common: 4
567 567 heads: 1
568 568 roots: 1
569 569 missing: 30
570 570 heads: 1
571 571 roots: 1
572 572 first undecided set: 30
573 573 heads: 1
574 574 roots: 1
575 575 common: 0
576 576 missing: 30
577 577 common heads: 2dc09a01254d
578 578
579 579 % -- b -> a set
580 580 comparing with a
581 581 query 1; heads
582 582 searching for changes
583 583 taking initial sample
584 584 searching: 2 queries
585 585 query 2; still undecided: 29, sample size is: 29
586 586 2 total queries in *.????s (glob)
587 587 elapsed time: * seconds (glob)
588 588 round-trips: 2
589 589 heads summary:
590 590 total common heads: 1
591 591 also local heads: 0
592 592 also remote heads: 1
593 593 both: 0
594 594 local heads: 1
595 595 common: 0
596 596 missing: 1
597 597 remote heads: 2
598 598 common: 1
599 599 unknown: 1
600 600 local changesets: 34
601 601 common: 4
602 602 heads: 1
603 603 roots: 1
604 604 missing: 30
605 605 heads: 1
606 606 roots: 1
607 607 first undecided set: 30
608 608 heads: 1
609 609 roots: 1
610 610 common: 0
611 611 missing: 30
612 612 common heads: 2dc09a01254d
613 613
614 614 % -- b -> a set (tip only)
615 615 comparing with a
616 616 query 1; heads
617 617 searching for changes
618 618 taking initial sample
619 619 searching: 2 queries
620 620 query 2; still undecided: 29, sample size is: 29
621 621 2 total queries in *.????s (glob)
622 622 elapsed time: * seconds (glob)
623 623 round-trips: 2
624 624 heads summary:
625 625 total common heads: 1
626 626 also local heads: 0
627 627 also remote heads: 1
628 628 both: 0
629 629 local heads: 1
630 630 common: 0
631 631 missing: 1
632 632 remote heads: 2
633 633 common: 1
634 634 unknown: 1
635 635 local changesets: 34
636 636 common: 4
637 637 heads: 1
638 638 roots: 1
639 639 missing: 30
640 640 heads: 1
641 641 roots: 1
642 642 first undecided set: 30
643 643 heads: 1
644 644 roots: 1
645 645 common: 0
646 646 missing: 30
647 647 common heads: 2dc09a01254d
648 648
649 649
650 650 Both many new:
651 651
652 652 $ testdesc '-ra' '-rb' '
653 653 > +2:f +30 :b
654 654 > <f +30 :a'
655 655
656 656 % -- a -> b tree
657 657 comparing with b
658 658 searching for changes
659 659 unpruned common: 66f7d451a68b
660 660 elapsed time: * seconds (glob)
661 661 round-trips: 4
662 662 heads summary:
663 663 total common heads: 1
664 664 also local heads: 0
665 665 also remote heads: 0
666 666 both: 0
667 667 local heads: 1
668 668 common: 0
669 669 missing: 1
670 670 remote heads: 1
671 671 common: 0
672 672 unknown: 1
673 673 local changesets: 32
674 674 common: 2
675 675 heads: 1
676 676 roots: 1
677 677 missing: 30
678 678 heads: 1
679 679 roots: 1
680 680 first undecided set: 32
681 681 heads: 1
682 682 roots: 1
683 683 common: 2
684 684 missing: 30
685 685 common heads: 66f7d451a68b
686 686
687 687 % -- a -> b set
688 688 comparing with b
689 689 query 1; heads
690 690 searching for changes
691 691 taking quick initial sample
692 692 searching: 2 queries
693 693 query 2; still undecided: 31, sample size is: 31
694 694 2 total queries in *.????s (glob)
695 695 elapsed time: * seconds (glob)
696 696 round-trips: 2
697 697 heads summary:
698 698 total common heads: 1
699 699 also local heads: 0
700 700 also remote heads: 0
701 701 both: 0
702 702 local heads: 1
703 703 common: 0
704 704 missing: 1
705 705 remote heads: 1
706 706 common: 0
707 707 unknown: 1
708 708 local changesets: 32
709 709 common: 2
710 710 heads: 1
711 711 roots: 1
712 712 missing: 30
713 713 heads: 1
714 714 roots: 1
715 715 first undecided set: 32
716 716 heads: 1
717 717 roots: 1
718 718 common: 2
719 719 missing: 30
720 720 common heads: 66f7d451a68b
721 721
722 722 % -- a -> b set (tip only)
723 723 comparing with b
724 724 query 1; heads
725 725 searching for changes
726 726 taking quick initial sample
727 727 searching: 2 queries
728 728 query 2; still undecided: 31, sample size is: 31
729 729 2 total queries in *.????s (glob)
730 730 elapsed time: * seconds (glob)
731 731 round-trips: 2
732 732 heads summary:
733 733 total common heads: 1
734 734 also local heads: 0
735 735 also remote heads: 0
736 736 both: 0
737 737 local heads: 1
738 738 common: 0
739 739 missing: 1
740 740 remote heads: 1
741 741 common: 0
742 742 unknown: 1
743 743 local changesets: 32
744 744 common: 2
745 745 heads: 1
746 746 roots: 1
747 747 missing: 30
748 748 heads: 1
749 749 roots: 1
750 750 first undecided set: 32
751 751 heads: 1
752 752 roots: 1
753 753 common: 2
754 754 missing: 30
755 755 common heads: 66f7d451a68b
756 756
757 757 % -- b -> a tree
758 758 comparing with a
759 759 searching for changes
760 760 unpruned common: 66f7d451a68b
761 761 elapsed time: * seconds (glob)
762 762 round-trips: 4
763 763 heads summary:
764 764 total common heads: 1
765 765 also local heads: 0
766 766 also remote heads: 0
767 767 both: 0
768 768 local heads: 1
769 769 common: 0
770 770 missing: 1
771 771 remote heads: 1
772 772 common: 0
773 773 unknown: 1
774 774 local changesets: 32
775 775 common: 2
776 776 heads: 1
777 777 roots: 1
778 778 missing: 30
779 779 heads: 1
780 780 roots: 1
781 781 first undecided set: 32
782 782 heads: 1
783 783 roots: 1
784 784 common: 2
785 785 missing: 30
786 786 common heads: 66f7d451a68b
787 787
788 788 % -- b -> a set
789 789 comparing with a
790 790 query 1; heads
791 791 searching for changes
792 792 taking quick initial sample
793 793 searching: 2 queries
794 794 query 2; still undecided: 31, sample size is: 31
795 795 2 total queries in *.????s (glob)
796 796 elapsed time: * seconds (glob)
797 797 round-trips: 2
798 798 heads summary:
799 799 total common heads: 1
800 800 also local heads: 0
801 801 also remote heads: 0
802 802 both: 0
803 803 local heads: 1
804 804 common: 0
805 805 missing: 1
806 806 remote heads: 1
807 807 common: 0
808 808 unknown: 1
809 809 local changesets: 32
810 810 common: 2
811 811 heads: 1
812 812 roots: 1
813 813 missing: 30
814 814 heads: 1
815 815 roots: 1
816 816 first undecided set: 32
817 817 heads: 1
818 818 roots: 1
819 819 common: 2
820 820 missing: 30
821 821 common heads: 66f7d451a68b
822 822
823 823 % -- b -> a set (tip only)
824 824 comparing with a
825 825 query 1; heads
826 826 searching for changes
827 827 taking quick initial sample
828 828 searching: 2 queries
829 829 query 2; still undecided: 31, sample size is: 31
830 830 2 total queries in *.????s (glob)
831 831 elapsed time: * seconds (glob)
832 832 round-trips: 2
833 833 heads summary:
834 834 total common heads: 1
835 835 also local heads: 0
836 836 also remote heads: 0
837 837 both: 0
838 838 local heads: 1
839 839 common: 0
840 840 missing: 1
841 841 remote heads: 1
842 842 common: 0
843 843 unknown: 1
844 844 local changesets: 32
845 845 common: 2
846 846 heads: 1
847 847 roots: 1
848 848 missing: 30
849 849 heads: 1
850 850 roots: 1
851 851 first undecided set: 32
852 852 heads: 1
853 853 roots: 1
854 854 common: 2
855 855 missing: 30
856 856 common heads: 66f7d451a68b
857 857
858 858
859 859 Both many new skewed:
860 860
861 861 $ testdesc '-ra' '-rb' '
862 862 > +2:f +30 :b
863 863 > <f +50 :a'
864 864
865 865 % -- a -> b tree
866 866 comparing with b
867 867 searching for changes
868 868 unpruned common: 66f7d451a68b
869 869 elapsed time: * seconds (glob)
870 870 round-trips: 4
871 871 heads summary:
872 872 total common heads: 1
873 873 also local heads: 0
874 874 also remote heads: 0
875 875 both: 0
876 876 local heads: 1
877 877 common: 0
878 878 missing: 1
879 879 remote heads: 1
880 880 common: 0
881 881 unknown: 1
882 882 local changesets: 52
883 883 common: 2
884 884 heads: 1
885 885 roots: 1
886 886 missing: 50
887 887 heads: 1
888 888 roots: 1
889 889 first undecided set: 52
890 890 heads: 1
891 891 roots: 1
892 892 common: 2
893 893 missing: 50
894 894 common heads: 66f7d451a68b
895 895
896 896 % -- a -> b set
897 897 comparing with b
898 898 query 1; heads
899 899 searching for changes
900 900 taking quick initial sample
901 901 searching: 2 queries
902 902 query 2; still undecided: 51, sample size is: 51
903 903 2 total queries in *.????s (glob)
904 904 elapsed time: * seconds (glob)
905 905 round-trips: 2
906 906 heads summary:
907 907 total common heads: 1
908 908 also local heads: 0
909 909 also remote heads: 0
910 910 both: 0
911 911 local heads: 1
912 912 common: 0
913 913 missing: 1
914 914 remote heads: 1
915 915 common: 0
916 916 unknown: 1
917 917 local changesets: 52
918 918 common: 2
919 919 heads: 1
920 920 roots: 1
921 921 missing: 50
922 922 heads: 1
923 923 roots: 1
924 924 first undecided set: 52
925 925 heads: 1
926 926 roots: 1
927 927 common: 2
928 928 missing: 50
929 929 common heads: 66f7d451a68b
930 930
931 931 % -- a -> b set (tip only)
932 932 comparing with b
933 933 query 1; heads
934 934 searching for changes
935 935 taking quick initial sample
936 936 searching: 2 queries
937 937 query 2; still undecided: 51, sample size is: 51
938 938 2 total queries in *.????s (glob)
939 939 elapsed time: * seconds (glob)
940 940 round-trips: 2
941 941 heads summary:
942 942 total common heads: 1
943 943 also local heads: 0
944 944 also remote heads: 0
945 945 both: 0
946 946 local heads: 1
947 947 common: 0
948 948 missing: 1
949 949 remote heads: 1
950 950 common: 0
951 951 unknown: 1
952 952 local changesets: 52
953 953 common: 2
954 954 heads: 1
955 955 roots: 1
956 956 missing: 50
957 957 heads: 1
958 958 roots: 1
959 959 first undecided set: 52
960 960 heads: 1
961 961 roots: 1
962 962 common: 2
963 963 missing: 50
964 964 common heads: 66f7d451a68b
965 965
966 966 % -- b -> a tree
967 967 comparing with a
968 968 searching for changes
969 969 unpruned common: 66f7d451a68b
970 970 elapsed time: * seconds (glob)
971 971 round-trips: 3
972 972 heads summary:
973 973 total common heads: 1
974 974 also local heads: 0
975 975 also remote heads: 0
976 976 both: 0
977 977 local heads: 1
978 978 common: 0
979 979 missing: 1
980 980 remote heads: 1
981 981 common: 0
982 982 unknown: 1
983 983 local changesets: 32
984 984 common: 2
985 985 heads: 1
986 986 roots: 1
987 987 missing: 30
988 988 heads: 1
989 989 roots: 1
990 990 first undecided set: 32
991 991 heads: 1
992 992 roots: 1
993 993 common: 2
994 994 missing: 30
995 995 common heads: 66f7d451a68b
996 996
997 997 % -- b -> a set
998 998 comparing with a
999 999 query 1; heads
1000 1000 searching for changes
1001 1001 taking quick initial sample
1002 1002 searching: 2 queries
1003 1003 query 2; still undecided: 31, sample size is: 31
1004 1004 2 total queries in *.????s (glob)
1005 1005 elapsed time: * seconds (glob)
1006 1006 round-trips: 2
1007 1007 heads summary:
1008 1008 total common heads: 1
1009 1009 also local heads: 0
1010 1010 also remote heads: 0
1011 1011 both: 0
1012 1012 local heads: 1
1013 1013 common: 0
1014 1014 missing: 1
1015 1015 remote heads: 1
1016 1016 common: 0
1017 1017 unknown: 1
1018 1018 local changesets: 32
1019 1019 common: 2
1020 1020 heads: 1
1021 1021 roots: 1
1022 1022 missing: 30
1023 1023 heads: 1
1024 1024 roots: 1
1025 1025 first undecided set: 32
1026 1026 heads: 1
1027 1027 roots: 1
1028 1028 common: 2
1029 1029 missing: 30
1030 1030 common heads: 66f7d451a68b
1031 1031
1032 1032 % -- b -> a set (tip only)
1033 1033 comparing with a
1034 1034 query 1; heads
1035 1035 searching for changes
1036 1036 taking quick initial sample
1037 1037 searching: 2 queries
1038 1038 query 2; still undecided: 31, sample size is: 31
1039 1039 2 total queries in *.????s (glob)
1040 1040 elapsed time: * seconds (glob)
1041 1041 round-trips: 2
1042 1042 heads summary:
1043 1043 total common heads: 1
1044 1044 also local heads: 0
1045 1045 also remote heads: 0
1046 1046 both: 0
1047 1047 local heads: 1
1048 1048 common: 0
1049 1049 missing: 1
1050 1050 remote heads: 1
1051 1051 common: 0
1052 1052 unknown: 1
1053 1053 local changesets: 32
1054 1054 common: 2
1055 1055 heads: 1
1056 1056 roots: 1
1057 1057 missing: 30
1058 1058 heads: 1
1059 1059 roots: 1
1060 1060 first undecided set: 32
1061 1061 heads: 1
1062 1062 roots: 1
1063 1063 common: 2
1064 1064 missing: 30
1065 1065 common heads: 66f7d451a68b
1066 1066
1067 1067
1068 1068 Both many new on top of long history:
1069 1069
1070 1070 $ testdesc '-ra' '-rb' '
1071 1071 > +1000:f +30 :b
1072 1072 > <f +50 :a'
1073 1073
1074 1074 % -- a -> b tree
1075 1075 comparing with b
1076 1076 searching for changes
1077 1077 unpruned common: 7ead0cba2838
1078 1078 elapsed time: * seconds (glob)
1079 1079 round-trips: 4
1080 1080 heads summary:
1081 1081 total common heads: 1
1082 1082 also local heads: 0
1083 1083 also remote heads: 0
1084 1084 both: 0
1085 1085 local heads: 1
1086 1086 common: 0
1087 1087 missing: 1
1088 1088 remote heads: 1
1089 1089 common: 0
1090 1090 unknown: 1
1091 1091 local changesets: 1050
1092 1092 common: 1000
1093 1093 heads: 1
1094 1094 roots: 1
1095 1095 missing: 50
1096 1096 heads: 1
1097 1097 roots: 1
1098 1098 first undecided set: 1050
1099 1099 heads: 1
1100 1100 roots: 1
1101 1101 common: 1000
1102 1102 missing: 50
1103 1103 common heads: 7ead0cba2838
1104 1104
1105 1105 % -- a -> b set
1106 1106 comparing with b
1107 1107 query 1; heads
1108 1108 searching for changes
1109 1109 taking quick initial sample
1110 1110 searching: 2 queries
1111 1111 query 2; still undecided: 1049, sample size is: 11
1112 1112 sampling from both directions
1113 1113 searching: 3 queries
1114 1114 query 3; still undecided: 31, sample size is: 31
1115 1115 3 total queries in *.????s (glob)
1116 1116 elapsed time: * seconds (glob)
1117 1117 round-trips: 3
1118 1118 heads summary:
1119 1119 total common heads: 1
1120 1120 also local heads: 0
1121 1121 also remote heads: 0
1122 1122 both: 0
1123 1123 local heads: 1
1124 1124 common: 0
1125 1125 missing: 1
1126 1126 remote heads: 1
1127 1127 common: 0
1128 1128 unknown: 1
1129 1129 local changesets: 1050
1130 1130 common: 1000
1131 1131 heads: 1
1132 1132 roots: 1
1133 1133 missing: 50
1134 1134 heads: 1
1135 1135 roots: 1
1136 1136 first undecided set: 1050
1137 1137 heads: 1
1138 1138 roots: 1
1139 1139 common: 1000
1140 1140 missing: 50
1141 1141 common heads: 7ead0cba2838
1142 1142
1143 1143 % -- a -> b set (tip only)
1144 1144 comparing with b
1145 1145 query 1; heads
1146 1146 searching for changes
1147 1147 taking quick initial sample
1148 1148 searching: 2 queries
1149 1149 query 2; still undecided: 1049, sample size is: 11
1150 1150 sampling from both directions
1151 1151 searching: 3 queries
1152 1152 query 3; still undecided: 31, sample size is: 31
1153 1153 3 total queries in *.????s (glob)
1154 1154 elapsed time: * seconds (glob)
1155 1155 round-trips: 3
1156 1156 heads summary:
1157 1157 total common heads: 1
1158 1158 also local heads: 0
1159 1159 also remote heads: 0
1160 1160 both: 0
1161 1161 local heads: 1
1162 1162 common: 0
1163 1163 missing: 1
1164 1164 remote heads: 1
1165 1165 common: 0
1166 1166 unknown: 1
1167 1167 local changesets: 1050
1168 1168 common: 1000
1169 1169 heads: 1
1170 1170 roots: 1
1171 1171 missing: 50
1172 1172 heads: 1
1173 1173 roots: 1
1174 1174 first undecided set: 1050
1175 1175 heads: 1
1176 1176 roots: 1
1177 1177 common: 1000
1178 1178 missing: 50
1179 1179 common heads: 7ead0cba2838
1180 1180
1181 1181 % -- b -> a tree
1182 1182 comparing with a
1183 1183 searching for changes
1184 1184 unpruned common: 7ead0cba2838
1185 1185 elapsed time: * seconds (glob)
1186 1186 round-trips: 3
1187 1187 heads summary:
1188 1188 total common heads: 1
1189 1189 also local heads: 0
1190 1190 also remote heads: 0
1191 1191 both: 0
1192 1192 local heads: 1
1193 1193 common: 0
1194 1194 missing: 1
1195 1195 remote heads: 1
1196 1196 common: 0
1197 1197 unknown: 1
1198 1198 local changesets: 1030
1199 1199 common: 1000
1200 1200 heads: 1
1201 1201 roots: 1
1202 1202 missing: 30
1203 1203 heads: 1
1204 1204 roots: 1
1205 1205 first undecided set: 1030
1206 1206 heads: 1
1207 1207 roots: 1
1208 1208 common: 1000
1209 1209 missing: 30
1210 1210 common heads: 7ead0cba2838
1211 1211
1212 1212 % -- b -> a set
1213 1213 comparing with a
1214 1214 query 1; heads
1215 1215 searching for changes
1216 1216 taking quick initial sample
1217 1217 searching: 2 queries
1218 1218 query 2; still undecided: 1029, sample size is: 11
1219 1219 sampling from both directions
1220 1220 searching: 3 queries
1221 1221 query 3; still undecided: 15, sample size is: 15
1222 1222 3 total queries in *.????s (glob)
1223 1223 elapsed time: * seconds (glob)
1224 1224 round-trips: 3
1225 1225 heads summary:
1226 1226 total common heads: 1
1227 1227 also local heads: 0
1228 1228 also remote heads: 0
1229 1229 both: 0
1230 1230 local heads: 1
1231 1231 common: 0
1232 1232 missing: 1
1233 1233 remote heads: 1
1234 1234 common: 0
1235 1235 unknown: 1
1236 1236 local changesets: 1030
1237 1237 common: 1000
1238 1238 heads: 1
1239 1239 roots: 1
1240 1240 missing: 30
1241 1241 heads: 1
1242 1242 roots: 1
1243 1243 first undecided set: 1030
1244 1244 heads: 1
1245 1245 roots: 1
1246 1246 common: 1000
1247 1247 missing: 30
1248 1248 common heads: 7ead0cba2838
1249 1249
1250 1250 % -- b -> a set (tip only)
1251 1251 comparing with a
1252 1252 query 1; heads
1253 1253 searching for changes
1254 1254 taking quick initial sample
1255 1255 searching: 2 queries
1256 1256 query 2; still undecided: 1029, sample size is: 11
1257 1257 sampling from both directions
1258 1258 searching: 3 queries
1259 1259 query 3; still undecided: 15, sample size is: 15
1260 1260 3 total queries in *.????s (glob)
1261 1261 elapsed time: * seconds (glob)
1262 1262 round-trips: 3
1263 1263 heads summary:
1264 1264 total common heads: 1
1265 1265 also local heads: 0
1266 1266 also remote heads: 0
1267 1267 both: 0
1268 1268 local heads: 1
1269 1269 common: 0
1270 1270 missing: 1
1271 1271 remote heads: 1
1272 1272 common: 0
1273 1273 unknown: 1
1274 1274 local changesets: 1030
1275 1275 common: 1000
1276 1276 heads: 1
1277 1277 roots: 1
1278 1278 missing: 30
1279 1279 heads: 1
1280 1280 roots: 1
1281 1281 first undecided set: 1030
1282 1282 heads: 1
1283 1283 roots: 1
1284 1284 common: 1000
1285 1285 missing: 30
1286 1286 common heads: 7ead0cba2838
1287 1287
1288 1288
1289 1289 One with >200 heads. We now switch to send them all in the initial roundtrip, but still do sampling for the later request.
1290 1290
1291 1291 $ hg init manyheads
1292 1292 $ cd manyheads
1293 1293 $ echo "+300:r @a" >dagdesc
1294 1294 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1295 1295 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1296 1296 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1297 1297 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1298 1298 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1299 1299 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1300 1300 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1301 1301 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1302 1302 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1303 1303 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1304 1304 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1305 1305 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1306 1306 $ echo "*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3 *r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3*r+3" >>dagdesc # 20 heads
1307 1307 $ echo "@b *r+3" >>dagdesc # one more head
1308 1308 $ hg debugbuilddag <dagdesc
1309 1309 reading DAG from stdin
1310 1310
1311 1311 $ hg heads -t --template . | wc -c
1312 1312 \s*261 (re)
1313 1313
1314 1314 $ hg clone -b a . a
1315 1315 adding changesets
1316 1316 adding manifests
1317 1317 adding file changes
1318 1318 added 1340 changesets with 0 changes to 0 files (+259 heads)
1319 1319 new changesets 1ea73414a91b:1c51e2c80832
1320 1320 updating to branch a
1321 1321 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1322 1322 $ hg clone -b b . b
1323 1323 adding changesets
1324 1324 adding manifests
1325 1325 adding file changes
1326 1326 added 304 changesets with 0 changes to 0 files
1327 1327 new changesets 1ea73414a91b:513314ca8b3a
1328 1328 updating to branch b
1329 1329 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1330 1330
1331 1331 $ hg -R a debugdiscovery b --debug --verbose --config progress.debug=true --config devel.discovery.randomize=false
1332 1332 comparing with b
1333 1333 query 1; heads
1334 1334 searching for changes
1335 1335 taking quick initial sample
1336 1336 searching: 2 queries
1337 1337 query 2; still undecided: 1080, sample size is: 100
1338 1338 sampling from both directions
1339 1339 searching: 3 queries
1340 1340 query 3; still undecided: 980, sample size is: 200
1341 1341 sampling from both directions
1342 1342 searching: 4 queries
1343 1343 query 4; still undecided: 497, sample size is: 210
1344 1344 sampling from both directions
1345 1345 searching: 5 queries
1346 1346 query 5; still undecided: 285, sample size is: 220
1347 1347 sampling from both directions
1348 1348 searching: 6 queries
1349 1349 query 6; still undecided: 63, sample size is: 63
1350 1350 6 total queries in *.????s (glob)
1351 1351 elapsed time: * seconds (glob)
1352 1352 round-trips: 6
1353 1353 heads summary:
1354 1354 total common heads: 1
1355 1355 also local heads: 0
1356 1356 also remote heads: 0
1357 1357 both: 0
1358 1358 local heads: 260
1359 1359 common: 0
1360 1360 missing: 260
1361 1361 remote heads: 1
1362 1362 common: 0
1363 1363 unknown: 1
1364 1364 local changesets: 1340
1365 1365 common: 300
1366 1366 heads: 1
1367 1367 roots: 1
1368 1368 missing: 1040
1369 1369 heads: 260
1370 1370 roots: 260
1371 1371 first undecided set: 1340
1372 1372 heads: 260
1373 1373 roots: 1
1374 1374 common: 300
1375 1375 missing: 1040
1376 1376 common heads: 3ee37d65064a
1377 1377 $ hg -R a debugdiscovery b --debug --verbose --config progress.debug=true --rev tip
1378 1378 comparing with b
1379 1379 query 1; heads
1380 1380 searching for changes
1381 1381 taking quick initial sample
1382 1382 searching: 2 queries
1383 1383 query 2; still undecided: 303, sample size is: 9
1384 1384 sampling from both directions
1385 1385 searching: 3 queries
1386 1386 query 3; still undecided: 3, sample size is: 3
1387 1387 3 total queries in *.????s (glob)
1388 1388 elapsed time: * seconds (glob)
1389 1389 round-trips: 3
1390 1390 heads summary:
1391 1391 total common heads: 1
1392 1392 also local heads: 0
1393 1393 also remote heads: 0
1394 1394 both: 0
1395 1395 local heads: 260
1396 1396 common: 0
1397 1397 missing: 260
1398 1398 remote heads: 1
1399 1399 common: 0
1400 1400 unknown: 1
1401 1401 local changesets: 1340
1402 1402 common: 300
1403 1403 heads: 1
1404 1404 roots: 1
1405 1405 missing: 1040
1406 1406 heads: 260
1407 1407 roots: 260
1408 1408 first undecided set: 1340
1409 1409 heads: 260
1410 1410 roots: 1
1411 1411 common: 300
1412 1412 missing: 1040
1413 1413 common heads: 3ee37d65064a
1414 1414
1415 $ hg -R a debugdiscovery b --debug --config devel.discovery.randomize=false --config devel.discovery.grow-sample.rate=1.01
1416 comparing with b
1417 query 1; heads
1418 searching for changes
1419 taking quick initial sample
1420 query 2; still undecided: 1080, sample size is: 100
1421 sampling from both directions
1422 query 3; still undecided: 980, sample size is: 200
1423 sampling from both directions
1424 query 4; still undecided: 497, sample size is: 202
1425 sampling from both directions
1426 query 5; still undecided: 294, sample size is: 204
1427 sampling from both directions
1428 query 6; still undecided: 90, sample size is: 90
1429 6 total queries in *s (glob)
1430 elapsed time: * seconds (glob)
1431 round-trips: 6
1432 heads summary:
1433 total common heads: 1
1434 also local heads: 0
1435 also remote heads: 0
1436 both: 0
1437 local heads: 260
1438 common: 0
1439 missing: 260
1440 remote heads: 1
1441 common: 0
1442 unknown: 1
1443 local changesets: 1340
1444 common: 300
1445 heads: 1
1446 roots: 1
1447 missing: 1040
1448 heads: 260
1449 roots: 260
1450 first undecided set: 1340
1451 heads: 260
1452 roots: 1
1453 common: 300
1454 missing: 1040
1455 common heads: 3ee37d65064a
1456
1415 1457 Test actual protocol when pulling one new head in addition to common heads
1416 1458
1417 1459 $ hg clone -U b c
1418 1460 $ hg -R c id -ir tip
1419 1461 513314ca8b3a
1420 1462 $ hg -R c up -qr default
1421 1463 $ touch c/f
1422 1464 $ hg -R c ci -Aqm "extra head"
1423 1465 $ hg -R c id -i
1424 1466 e64a39e7da8b
1425 1467
1426 1468 $ hg serve -R c -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
1427 1469 $ cat hg.pid >> $DAEMON_PIDS
1428 1470
1429 1471 $ hg -R b incoming http://localhost:$HGPORT/ -T '{node|short}\n'
1430 1472 comparing with http://localhost:$HGPORT/
1431 1473 searching for changes
1432 1474 e64a39e7da8b
1433 1475
1434 1476 $ killdaemons.py
1435 1477 $ cut -d' ' -f6- access.log | grep -v cmd=known # cmd=known uses random sampling
1436 1478 "GET /?cmd=capabilities HTTP/1.1" 200 -
1437 1479 "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D513314ca8b3ae4dac8eec56966265b00fcf866db x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull
1438 1480 "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:$USUAL_BUNDLE_CAPS$&cg=1&common=513314ca8b3ae4dac8eec56966265b00fcf866db&heads=e64a39e7da8b0d54bc63e81169aff001c13b3477 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull
1439 1481 "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull
1440 1482 $ cat errors.log
1441 1483
1442 1484 $ cd ..
1443 1485
1444 1486
1445 1487 Issue 4438 - test coverage for 3ef893520a85 issues.
1446 1488
1447 1489 $ mkdir issue4438
1448 1490 $ cd issue4438
1449 1491 #if false
1450 1492 generate new bundles:
1451 1493 $ hg init r1
1452 1494 $ for i in `"$PYTHON" $TESTDIR/seq.py 101`; do hg -R r1 up -qr null && hg -R r1 branch -q b$i && hg -R r1 ci -qmb$i; done
1453 1495 $ hg clone -q r1 r2
1454 1496 $ for i in `"$PYTHON" $TESTDIR/seq.py 10`; do hg -R r1 up -qr null && hg -R r1 branch -q c$i && hg -R r1 ci -qmc$i; done
1455 1497 $ hg -R r2 branch -q r2change && hg -R r2 ci -qmr2change
1456 1498 $ hg -R r1 bundle -qa $TESTDIR/bundles/issue4438-r1.hg
1457 1499 $ hg -R r2 bundle -qa $TESTDIR/bundles/issue4438-r2.hg
1458 1500 #else
1459 1501 use existing bundles:
1460 1502 $ hg init r1
1461 1503 $ hg -R r1 -q unbundle $TESTDIR/bundles/issue4438-r1.hg
1462 1504 $ hg -R r1 -q up
1463 1505 $ hg init r2
1464 1506 $ hg -R r2 -q unbundle $TESTDIR/bundles/issue4438-r2.hg
1465 1507 $ hg -R r2 -q up
1466 1508 #endif
1467 1509
1468 1510 Set iteration order could cause wrong and unstable results - fixed in 73cfaa348650:
1469 1511
1470 1512 $ hg -R r1 outgoing r2 -T'{rev} '
1471 1513 comparing with r2
1472 1514 searching for changes
1473 1515 101 102 103 104 105 106 107 108 109 110 (no-eol)
1474 1516
1475 1517 The case where all the 'initialsamplesize' samples already were common would
1476 1518 give 'all remote heads known locally' without checking the remaining heads -
1477 1519 fixed in 86c35b7ae300:
1478 1520
1479 1521 $ cat >> r1/.hg/hgrc << EOF
1480 1522 > [devel]
1481 1523 > discovery.randomize = False
1482 1524 > EOF
1483 1525
1484 1526 $ hg -R r1 outgoing r2 -T'{rev} ' --config extensions.blackbox= \
1485 1527 > --config blackbox.track='command commandfinish discovery'
1486 1528 comparing with r2
1487 1529 searching for changes
1488 1530 101 102 103 104 105 106 107 108 109 110 (no-eol)
1489 1531 $ hg -R r1 --config extensions.blackbox= blackbox --config blackbox.track=
1490 1532 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> serve --cmdserver chgunix * (glob) (chg !)
1491 1533 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> -R r1 outgoing r2 *-T{rev} * --config *extensions.blackbox=* (glob)
1492 1534 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> found 101 common and 1 unknown server heads, 1 roundtrips in *.????s (glob)
1493 1535 * @5d0b986a083e0d91f116de4691e2aaa54d5bbec0 (*)> -R r1 outgoing r2 *-T{rev} * --config *extensions.blackbox=* exited 0 after *.?? seconds (glob)
1494 1536 $ cd ..
1495 1537
1496 1538 Even if the set of revs to discover is restricted, unrelated revs may be
1497 1539 returned as common heads.
1498 1540
1499 1541 $ mkdir ancestorsof
1500 1542 $ cd ancestorsof
1501 1543 $ hg init a
1502 1544 $ hg clone a b -q
1503 1545 $ cd b
1504 1546 $ hg debugbuilddag '.:root *root *root'
1505 1547 $ hg log -G -T '{node|short}'
1506 1548 o fa942426a6fd
1507 1549 |
1508 1550 | o 66f7d451a68b
1509 1551 |/
1510 1552 o 1ea73414a91b
1511 1553
1512 1554 $ hg push -r 66f7d451a68b -q
1513 1555 $ hg debugdiscovery --verbose --rev fa942426a6fd
1514 1556 comparing with $TESTTMP/ancestorsof/a
1515 1557 searching for changes
1516 1558 elapsed time: * seconds (glob)
1517 1559 round-trips: 1
1518 1560 heads summary:
1519 1561 total common heads: 1
1520 1562 also local heads: 1
1521 1563 also remote heads: 1
1522 1564 both: 1
1523 1565 local heads: 2
1524 1566 common: 1
1525 1567 missing: 1
1526 1568 remote heads: 1
1527 1569 common: 1
1528 1570 unknown: 0
1529 1571 local changesets: 3
1530 1572 common: 2
1531 1573 heads: 1
1532 1574 roots: 1
1533 1575 missing: 1
1534 1576 heads: 1
1535 1577 roots: 1
1536 1578 first undecided set: 1
1537 1579 heads: 1
1538 1580 roots: 1
1539 1581 common: 0
1540 1582 missing: 1
1541 1583 common heads: 66f7d451a68b
General Comments 0
You need to be logged in to leave comments. Login now