717 continue |
719 continue |
718 if not dry_run: |
720 if not dry_run: |
719 _reorder_filelog_parents(repo, fl, sorted(to_fix)) |
721 _reorder_filelog_parents(repo, fl, sorted(to_fix)) |
720 |
722 |
721 |
723 |
|
724 def filter_delta_issue6528(revlog, deltas_iter): |
|
725 """filter incomind deltas to repaire issue 6528 on the fly""" |
|
726 metadata_cache = {} |
|
727 |
|
728 deltacomputer = deltas.deltacomputer(revlog) |
|
729 |
|
730 for rev, d in enumerate(deltas_iter, len(revlog)): |
|
731 ( |
|
732 node, |
|
733 p1_node, |
|
734 p2_node, |
|
735 linknode, |
|
736 deltabase, |
|
737 delta, |
|
738 flags, |
|
739 sidedata, |
|
740 ) = d |
|
741 |
|
742 if not revlog.index.has_node(deltabase): |
|
743 raise error.LookupError( |
|
744 deltabase, revlog.radix, _(b'unknown parent') |
|
745 ) |
|
746 base_rev = revlog.rev(deltabase) |
|
747 if not revlog.index.has_node(p1_node): |
|
748 raise error.LookupError(p1_node, revlog.radix, _(b'unknown parent')) |
|
749 p1_rev = revlog.rev(p1_node) |
|
750 if not revlog.index.has_node(p2_node): |
|
751 raise error.LookupError(p2_node, revlog.radix, _(b'unknown parent')) |
|
752 p2_rev = revlog.rev(p2_node) |
|
753 |
|
754 is_censored = lambda: bool(flags & REVIDX_ISCENSORED) |
|
755 delta_base = lambda: revlog.rev(delta_base) |
|
756 delta_base = lambda: base_rev |
|
757 parent_revs = lambda: (p1_rev, p2_rev) |
|
758 |
|
759 def full_text(): |
|
760 # note: being able to reuse the full text computation in the |
|
761 # underlying addrevision would be useful however this is a bit too |
|
762 # intrusive the for the "quick" issue6528 we are writing before the |
|
763 # 5.8 release |
|
764 textlen = mdiff.patchedsize(revlog.size(base_rev), delta) |
|
765 |
|
766 revinfo = revlogutils.revisioninfo( |
|
767 node, |
|
768 p1_node, |
|
769 p2_node, |
|
770 [None], |
|
771 textlen, |
|
772 (base_rev, delta), |
|
773 flags, |
|
774 ) |
|
775 # cached by the global "writing" context |
|
776 assert revlog._writinghandles is not None |
|
777 if revlog._inline: |
|
778 fh = revlog._writinghandles[0] |
|
779 else: |
|
780 fh = revlog._writinghandles[1] |
|
781 return deltacomputer.buildtext(revinfo, fh) |
|
782 |
|
783 is_affected = _is_revision_affected_fast_inner( |
|
784 is_censored, |
|
785 delta_base, |
|
786 lambda: delta, |
|
787 full_text, |
|
788 parent_revs, |
|
789 rev, |
|
790 metadata_cache, |
|
791 ) |
|
792 if is_affected: |
|
793 d = ( |
|
794 node, |
|
795 p2_node, |
|
796 p1_node, |
|
797 linknode, |
|
798 deltabase, |
|
799 delta, |
|
800 flags, |
|
801 sidedata, |
|
802 ) |
|
803 yield d |
|
804 |
|
805 |
722 def repair_issue6528( |
806 def repair_issue6528( |
723 ui, repo, dry_run=False, to_report=None, from_report=None, paranoid=False |
807 ui, repo, dry_run=False, to_report=None, from_report=None, paranoid=False |
724 ): |
808 ): |
725 from .. import store # avoid cycle |
809 from .. import store # avoid cycle |
726 |
810 |