equal
deleted
inserted
replaced
418 revmap, |
418 revmap, |
419 trp, |
419 trp, |
420 prog, |
420 prog, |
421 addrevisioncb=None, |
421 addrevisioncb=None, |
422 debug_info=None, |
422 debug_info=None, |
|
423 delta_base_reuse_policy=None, |
423 ): |
424 ): |
424 self.callback = prog.increment |
425 self.callback = prog.increment |
425 # no need to check for empty manifest group here: |
426 # no need to check for empty manifest group here: |
426 # if the result of the merge of 1 and 2 is the same in 3 and 4, |
427 # if the result of the merge of 1 and 2 is the same in 3 and 4, |
427 # no new manifest will be created and the manifest group will |
428 # no new manifest will be created and the manifest group will |
433 deltas, |
434 deltas, |
434 revmap, |
435 revmap, |
435 trp, |
436 trp, |
436 addrevisioncb=addrevisioncb, |
437 addrevisioncb=addrevisioncb, |
437 debug_info=debug_info, |
438 debug_info=debug_info, |
|
439 delta_base_reuse_policy=delta_base_reuse_policy, |
438 ) |
440 ) |
439 prog.complete() |
441 prog.complete() |
440 self.callback = None |
442 self.callback = None |
441 |
443 |
442 def apply( |
444 def apply( |
446 srctype, |
448 srctype, |
447 url, |
449 url, |
448 targetphase=phases.draft, |
450 targetphase=phases.draft, |
449 expectedtotal=None, |
451 expectedtotal=None, |
450 sidedata_categories=None, |
452 sidedata_categories=None, |
|
453 delta_base_reuse_policy=None, |
451 ): |
454 ): |
452 """Add the changegroup returned by source.read() to this repo. |
455 """Add the changegroup returned by source.read() to this repo. |
453 srctype is a string like 'push', 'pull', or 'unbundle'. url is |
456 srctype is a string like 'push', 'pull', or 'unbundle'. url is |
454 the URL of the repo where this changegroup is coming from. |
457 the URL of the repo where this changegroup is coming from. |
455 |
458 |
459 - fewer heads than before: -1-removed heads (-2..-n) |
462 - fewer heads than before: -1-removed heads (-2..-n) |
460 - number of heads stays the same: 1 |
463 - number of heads stays the same: 1 |
461 |
464 |
462 `sidedata_categories` is an optional set of the remote's sidedata wanted |
465 `sidedata_categories` is an optional set of the remote's sidedata wanted |
463 categories. |
466 categories. |
|
467 |
|
468 `delta_base_reuse_policy` is an optional argument, when set to a value |
|
469 it will control the way the delta contained into the bundle are reused |
|
470 when applied in the revlog. |
|
471 |
|
472 See `DELTA_BASE_REUSE_*` entry in mercurial.revlogutils.constants. |
464 """ |
473 """ |
465 repo = repo.unfiltered() |
474 repo = repo.unfiltered() |
466 |
475 |
467 debug_info = None |
476 debug_info = None |
468 if repo.ui.configbool(b'debug', b'unbundling-stats'): |
477 if repo.ui.configbool(b'debug', b'unbundling-stats'): |
541 trp, |
550 trp, |
542 alwayscache=True, |
551 alwayscache=True, |
543 addrevisioncb=onchangelog, |
552 addrevisioncb=onchangelog, |
544 duplicaterevisioncb=ondupchangelog, |
553 duplicaterevisioncb=ondupchangelog, |
545 debug_info=debug_info, |
554 debug_info=debug_info, |
|
555 delta_base_reuse_policy=delta_base_reuse_policy, |
546 ): |
556 ): |
547 repo.ui.develwarn( |
557 repo.ui.develwarn( |
548 b'applied empty changelog from changegroup', |
558 b'applied empty changelog from changegroup', |
549 config=b'warn-empty-changegroup', |
559 config=b'warn-empty-changegroup', |
550 ) |
560 ) |
589 revmap, |
599 revmap, |
590 trp, |
600 trp, |
591 progress, |
601 progress, |
592 addrevisioncb=on_manifest_rev, |
602 addrevisioncb=on_manifest_rev, |
593 debug_info=debug_info, |
603 debug_info=debug_info, |
|
604 delta_base_reuse_policy=delta_base_reuse_policy, |
594 ) |
605 ) |
595 |
606 |
596 needfiles = {} |
607 needfiles = {} |
597 if repo.ui.configbool(b'server', b'validate'): |
608 if repo.ui.configbool(b'server', b'validate'): |
598 cl = repo.changelog |
609 cl = repo.changelog |
626 trp, |
637 trp, |
627 efiles, |
638 efiles, |
628 needfiles, |
639 needfiles, |
629 addrevisioncb=on_filelog_rev, |
640 addrevisioncb=on_filelog_rev, |
630 debug_info=debug_info, |
641 debug_info=debug_info, |
|
642 delta_base_reuse_policy=delta_base_reuse_policy, |
631 ) |
643 ) |
632 |
644 |
633 if sidedata_helpers: |
645 if sidedata_helpers: |
634 if revlog_constants.KIND_CHANGELOG in sidedata_helpers[1]: |
646 if revlog_constants.KIND_CHANGELOG in sidedata_helpers[1]: |
635 cl.rewrite_sidedata( |
647 cl.rewrite_sidedata( |
813 revmap, |
825 revmap, |
814 trp, |
826 trp, |
815 prog, |
827 prog, |
816 addrevisioncb=None, |
828 addrevisioncb=None, |
817 debug_info=None, |
829 debug_info=None, |
|
830 delta_base_reuse_policy=None, |
818 ): |
831 ): |
819 super(cg3unpacker, self)._unpackmanifests( |
832 super(cg3unpacker, self)._unpackmanifests( |
820 repo, |
833 repo, |
821 revmap, |
834 revmap, |
822 trp, |
835 trp, |
823 prog, |
836 prog, |
824 addrevisioncb=addrevisioncb, |
837 addrevisioncb=addrevisioncb, |
825 debug_info=debug_info, |
838 debug_info=debug_info, |
|
839 delta_base_reuse_policy=delta_base_reuse_policy, |
826 ) |
840 ) |
827 for chunkdata in iter(self.filelogheader, {}): |
841 for chunkdata in iter(self.filelogheader, {}): |
828 # If we get here, there are directory manifests in the changegroup |
842 # If we get here, there are directory manifests in the changegroup |
829 d = chunkdata[b"filename"] |
843 d = chunkdata[b"filename"] |
830 repo.ui.debug(b"adding %s revisions\n" % d) |
844 repo.ui.debug(b"adding %s revisions\n" % d) |
833 deltas, |
847 deltas, |
834 revmap, |
848 revmap, |
835 trp, |
849 trp, |
836 addrevisioncb=addrevisioncb, |
850 addrevisioncb=addrevisioncb, |
837 debug_info=debug_info, |
851 debug_info=debug_info, |
|
852 delta_base_reuse_policy=delta_base_reuse_policy, |
838 ): |
853 ): |
839 raise error.Abort(_(b"received dir revlog group is empty")) |
854 raise error.Abort(_(b"received dir revlog group is empty")) |
840 |
855 |
841 |
856 |
842 class cg4unpacker(cg3unpacker): |
857 class cg4unpacker(cg3unpacker): |
2370 trp, |
2385 trp, |
2371 expectedfiles, |
2386 expectedfiles, |
2372 needfiles, |
2387 needfiles, |
2373 addrevisioncb=None, |
2388 addrevisioncb=None, |
2374 debug_info=None, |
2389 debug_info=None, |
|
2390 delta_base_reuse_policy=None, |
2375 ): |
2391 ): |
2376 revisions = 0 |
2392 revisions = 0 |
2377 files = 0 |
2393 files = 0 |
2378 progress = repo.ui.makeprogress( |
2394 progress = repo.ui.makeprogress( |
2379 _(b'files'), unit=_(b'files'), total=expectedfiles |
2395 _(b'files'), unit=_(b'files'), total=expectedfiles |
2391 deltas, |
2407 deltas, |
2392 revmap, |
2408 revmap, |
2393 trp, |
2409 trp, |
2394 addrevisioncb=addrevisioncb, |
2410 addrevisioncb=addrevisioncb, |
2395 debug_info=debug_info, |
2411 debug_info=debug_info, |
|
2412 delta_base_reuse_policy=delta_base_reuse_policy, |
2396 ) |
2413 ) |
2397 if not added: |
2414 if not added: |
2398 raise error.Abort(_(b"received file revlog group is empty")) |
2415 raise error.Abort(_(b"received file revlog group is empty")) |
2399 except error.CensoredBaseError as e: |
2416 except error.CensoredBaseError as e: |
2400 raise error.Abort(_(b"received delta base is censored: %s") % e) |
2417 raise error.Abort(_(b"received delta base is censored: %s") % e) |