Show More
@@ -662,8 +662,6 b' class _BaseDeltaSearch(abc.ABC):' | |||||
662 | return False |
|
662 | return False | |
663 | if not self._is_good_delta_info_chain_quality(deltainfo): |
|
663 | if not self._is_good_delta_info_chain_quality(deltainfo): | |
664 | return False |
|
664 | return False | |
665 | if not self._is_good_delta_info_snapshot_constraints(deltainfo): |
|
|||
666 | return False |
|
|||
667 | return True |
|
665 | return True | |
668 |
|
666 | |||
669 | def _is_good_delta_info_universal(self, deltainfo): |
|
667 | def _is_good_delta_info_universal(self, deltainfo): | |
@@ -746,34 +744,6 b' class _BaseDeltaSearch(abc.ABC):' | |||||
746 | return False |
|
744 | return False | |
747 | return True |
|
745 | return True | |
748 |
|
746 | |||
749 | def _is_good_delta_info_snapshot_constraints(self, deltainfo): |
|
|||
750 | """Returns True if the chain associated with snapshots |
|
|||
751 |
|
||||
752 | This performs checks for format that use sparse-revlog and intermediate |
|
|||
753 | snapshots. |
|
|||
754 |
|
||||
755 | This is used by is_good_delta_info. |
|
|||
756 | """ |
|
|||
757 | # if not a snapshot, this method has no filtering to do |
|
|||
758 | if deltainfo.snapshotdepth is None: |
|
|||
759 | return True |
|
|||
760 | # bad delta from intermediate snapshot size limit |
|
|||
761 | # |
|
|||
762 | # If an intermediate snapshot size is higher than the limit. The |
|
|||
763 | # limit exist to prevent endless chain of intermediate delta to be |
|
|||
764 | # created. |
|
|||
765 | if ( |
|
|||
766 | self.revinfo.textlen >> deltainfo.snapshotdepth |
|
|||
767 | ) < deltainfo.deltalen: |
|
|||
768 | return False |
|
|||
769 |
|
||||
770 | # bad delta if new intermediate snapshot is larger than the previous |
|
|||
771 | # snapshot |
|
|||
772 | if self.revlog.length(deltainfo.base) < deltainfo.deltalen: |
|
|||
773 | return False |
|
|||
774 |
|
||||
775 | return True |
|
|||
776 |
|
||||
777 | @property |
|
747 | @property | |
778 | def done(self): |
|
748 | def done(self): | |
779 | """True when all possible candidate have been tested""" |
|
749 | """True when all possible candidate have been tested""" | |
@@ -1092,6 +1062,48 b' class _GeneralDeltaSearch(_BaseDeltaSear' | |||||
1092 | class _SparseDeltaSearch(_GeneralDeltaSearch): |
|
1062 | class _SparseDeltaSearch(_GeneralDeltaSearch): | |
1093 | """Delta search variants for sparse-revlog""" |
|
1063 | """Delta search variants for sparse-revlog""" | |
1094 |
|
1064 | |||
|
1065 | def is_good_delta_info(self, deltainfo): | |||
|
1066 | """Returns True if the given delta is good. | |||
|
1067 | ||||
|
1068 | Good means that it is within the disk span, disk size, and chain length | |||
|
1069 | bounds that we know to be performant. | |||
|
1070 | """ | |||
|
1071 | if not self._is_good_delta_info_universal(deltainfo): | |||
|
1072 | return False | |||
|
1073 | if not self._is_good_delta_info_chain_quality(deltainfo): | |||
|
1074 | return False | |||
|
1075 | if not self._is_good_delta_info_snapshot_constraints(deltainfo): | |||
|
1076 | return False | |||
|
1077 | return True | |||
|
1078 | ||||
|
1079 | def _is_good_delta_info_snapshot_constraints(self, deltainfo): | |||
|
1080 | """Returns True if the chain associated with snapshots | |||
|
1081 | ||||
|
1082 | This performs checks for format that use sparse-revlog and intermediate | |||
|
1083 | snapshots. | |||
|
1084 | ||||
|
1085 | This is used by is_good_delta_info. | |||
|
1086 | """ | |||
|
1087 | # if not a snapshot, this method has no filtering to do | |||
|
1088 | if deltainfo.snapshotdepth is None: | |||
|
1089 | return True | |||
|
1090 | # bad delta from intermediate snapshot size limit | |||
|
1091 | # | |||
|
1092 | # If an intermediate snapshot size is higher than the limit. The | |||
|
1093 | # limit exist to prevent endless chain of intermediate delta to be | |||
|
1094 | # created. | |||
|
1095 | if ( | |||
|
1096 | self.revinfo.textlen >> deltainfo.snapshotdepth | |||
|
1097 | ) < deltainfo.deltalen: | |||
|
1098 | return False | |||
|
1099 | ||||
|
1100 | # bad delta if new intermediate snapshot is larger than the previous | |||
|
1101 | # snapshot | |||
|
1102 | if self.revlog.length(deltainfo.base) < deltainfo.deltalen: | |||
|
1103 | return False | |||
|
1104 | ||||
|
1105 | return True | |||
|
1106 | ||||
1095 | def _iter_snapshots_base(self): |
|
1107 | def _iter_snapshots_base(self): | |
1096 | assert self.revlog.delta_config.sparse_revlog |
|
1108 | assert self.revlog.delta_config.sparse_revlog | |
1097 | assert self.current_stage == _STAGE_SNAPSHOT |
|
1109 | assert self.current_stage == _STAGE_SNAPSHOT |
General Comments 0
You need to be logged in to leave comments.
Login now