Show More
@@ -938,47 +938,6 b' class _GeneralDeltaSearch(_BaseDeltaSear' | |||
|
938 | 938 | return False |
|
939 | 939 | return True |
|
940 | 940 | |
|
941 | def _pre_filter_rev_sparse(self, rev): | |
|
942 | """pre filtering that is needed in sparse revlog cases | |
|
943 | ||
|
944 | return True if it seems okay to test a rev, False otherwise. | |
|
945 | ||
|
946 | used by _pre_filter_rev. | |
|
947 | """ | |
|
948 | assert self.revlog.delta_config.sparse_revlog | |
|
949 | # if the revision we test again is too small, the resulting delta | |
|
950 | # will be large anyway as that amount of data to be added is big | |
|
951 | if self.revlog.rawsize(rev) < (self.textlen // LIMIT_BASE2TEXT): | |
|
952 | return False | |
|
953 | ||
|
954 | if self.revlog.delta_config.upper_bound_comp is not None: | |
|
955 | maxcomp = self.revlog.delta_config.upper_bound_comp | |
|
956 | basenotsnap = (self.p1, self.p2, nullrev) | |
|
957 | if rev not in basenotsnap and self.revlog.issnapshot(rev): | |
|
958 | snapshotdepth = self.revlog.snapshotdepth(rev) | |
|
959 | # If text is significantly larger than the base, we can | |
|
960 | # expect the resulting delta to be proportional to the size | |
|
961 | # difference | |
|
962 | revsize = self.revlog.rawsize(rev) | |
|
963 | rawsizedistance = max(self.textlen - revsize, 0) | |
|
964 | # use an estimate of the compression upper bound. | |
|
965 | lowestrealisticdeltalen = rawsizedistance // maxcomp | |
|
966 | ||
|
967 | # check the absolute constraint on the delta size | |
|
968 | snapshotlimit = self.textlen >> snapshotdepth | |
|
969 | if snapshotlimit < lowestrealisticdeltalen: | |
|
970 | # delta lower bound is larger than accepted upper | |
|
971 | # bound | |
|
972 | return False | |
|
973 | ||
|
974 | # check the relative constraint on the delta size | |
|
975 | revlength = self.revlog.length(rev) | |
|
976 | if revlength < lowestrealisticdeltalen: | |
|
977 | # delta probable lower bound is larger than target | |
|
978 | # base | |
|
979 | return False | |
|
980 | return True | |
|
981 | ||
|
982 | 941 | def _pre_filter_rev_delta_chain(self, rev): |
|
983 | 942 | """pre filtering that is needed in sparse revlog cases |
|
984 | 943 | |
@@ -1016,10 +975,6 b' class _GeneralDeltaSearch(_BaseDeltaSear' | |||
|
1016 | 975 | return False |
|
1017 | 976 | if not self._pre_filter_rev_delta_chain(rev): |
|
1018 | 977 | return False |
|
1019 | if self.revlog.delta_config.sparse_revlog: | |
|
1020 | if not self._pre_filter_rev_sparse(rev): | |
|
1021 | return False | |
|
1022 | ||
|
1023 | 978 | return True |
|
1024 | 979 | |
|
1025 | 980 | def _iter_parents(self): |
@@ -1104,6 +1059,57 b' class _SparseDeltaSearch(_GeneralDeltaSe' | |||
|
1104 | 1059 | |
|
1105 | 1060 | return True |
|
1106 | 1061 | |
|
1062 | def _pre_filter_rev(self, rev): | |
|
1063 | """return True if it seems okay to test a rev, False otherwise""" | |
|
1064 | if not self._pre_filter_rev_universal(rev): | |
|
1065 | return False | |
|
1066 | if not self._pre_filter_rev_delta_chain(rev): | |
|
1067 | return False | |
|
1068 | if not self._pre_filter_rev_sparse(rev): | |
|
1069 | return False | |
|
1070 | return True | |
|
1071 | ||
|
1072 | def _pre_filter_rev_sparse(self, rev): | |
|
1073 | """pre filtering that is needed in sparse revlog cases | |
|
1074 | ||
|
1075 | return True if it seems okay to test a rev, False otherwise. | |
|
1076 | ||
|
1077 | used by _pre_filter_rev. | |
|
1078 | """ | |
|
1079 | assert self.revlog.delta_config.sparse_revlog | |
|
1080 | # if the revision we test again is too small, the resulting delta | |
|
1081 | # will be large anyway as that amount of data to be added is big | |
|
1082 | if self.revlog.rawsize(rev) < (self.textlen // LIMIT_BASE2TEXT): | |
|
1083 | return False | |
|
1084 | ||
|
1085 | if self.revlog.delta_config.upper_bound_comp is not None: | |
|
1086 | maxcomp = self.revlog.delta_config.upper_bound_comp | |
|
1087 | basenotsnap = (self.p1, self.p2, nullrev) | |
|
1088 | if rev not in basenotsnap and self.revlog.issnapshot(rev): | |
|
1089 | snapshotdepth = self.revlog.snapshotdepth(rev) | |
|
1090 | # If text is significantly larger than the base, we can | |
|
1091 | # expect the resulting delta to be proportional to the size | |
|
1092 | # difference | |
|
1093 | revsize = self.revlog.rawsize(rev) | |
|
1094 | rawsizedistance = max(self.textlen - revsize, 0) | |
|
1095 | # use an estimate of the compression upper bound. | |
|
1096 | lowestrealisticdeltalen = rawsizedistance // maxcomp | |
|
1097 | ||
|
1098 | # check the absolute constraint on the delta size | |
|
1099 | snapshotlimit = self.textlen >> snapshotdepth | |
|
1100 | if snapshotlimit < lowestrealisticdeltalen: | |
|
1101 | # delta lower bound is larger than accepted upper | |
|
1102 | # bound | |
|
1103 | return False | |
|
1104 | ||
|
1105 | # check the relative constraint on the delta size | |
|
1106 | revlength = self.revlog.length(rev) | |
|
1107 | if revlength < lowestrealisticdeltalen: | |
|
1108 | # delta probable lower bound is larger than target | |
|
1109 | # base | |
|
1110 | return False | |
|
1111 | return True | |
|
1112 | ||
|
1107 | 1113 | def _iter_snapshots_base(self): |
|
1108 | 1114 | assert self.revlog.delta_config.sparse_revlog |
|
1109 | 1115 | assert self.current_stage == _STAGE_SNAPSHOT |
General Comments 0
You need to be logged in to leave comments.
Login now