Skip to content
Snippets Groups Projects

introduce subclass for delta-search

Merged Pierre-Yves David requested to merge topic/default/better-delta.class-split into branch/default
1 file
+ 51
45
Compare changes
  • Side-by-side
  • Inline
@@ -938,47 +938,6 @@
return False
return True
def _pre_filter_rev_sparse(self, rev):
"""pre filtering that is needed in sparse revlog cases
return True if it seems okay to test a rev, False otherwise.
used by _pre_filter_rev.
"""
assert self.revlog.delta_config.sparse_revlog
# if the revision we test again is too small, the resulting delta
# will be large anyway as that amount of data to be added is big
if self.revlog.rawsize(rev) < (self.textlen // LIMIT_BASE2TEXT):
return False
if self.revlog.delta_config.upper_bound_comp is not None:
maxcomp = self.revlog.delta_config.upper_bound_comp
basenotsnap = (self.p1, self.p2, nullrev)
if rev not in basenotsnap and self.revlog.issnapshot(rev):
snapshotdepth = self.revlog.snapshotdepth(rev)
# If text is significantly larger than the base, we can
# expect the resulting delta to be proportional to the size
# difference
revsize = self.revlog.rawsize(rev)
rawsizedistance = max(self.textlen - revsize, 0)
# use an estimate of the compression upper bound.
lowestrealisticdeltalen = rawsizedistance // maxcomp
# check the absolute constraint on the delta size
snapshotlimit = self.textlen >> snapshotdepth
if snapshotlimit < lowestrealisticdeltalen:
# delta lower bound is larger than accepted upper
# bound
return False
# check the relative constraint on the delta size
revlength = self.revlog.length(rev)
if revlength < lowestrealisticdeltalen:
# delta probable lower bound is larger than target
# base
return False
return True
def _pre_filter_rev_delta_chain(self, rev):
"""pre filtering that is needed in sparse revlog cases
@@ -1016,10 +975,6 @@
return False
if not self._pre_filter_rev_delta_chain(rev):
return False
if self.revlog.delta_config.sparse_revlog:
if not self._pre_filter_rev_sparse(rev):
return False
return True
def _iter_parents(self):
@@ -1104,6 +1059,57 @@
return True
def _pre_filter_rev(self, rev):
"""return True if it seems okay to test a rev, False otherwise"""
if not self._pre_filter_rev_universal(rev):
return False
if not self._pre_filter_rev_delta_chain(rev):
return False
if not self._pre_filter_rev_sparse(rev):
return False
return True
def _pre_filter_rev_sparse(self, rev):
"""pre filtering that is needed in sparse revlog cases
return True if it seems okay to test a rev, False otherwise.
used by _pre_filter_rev.
"""
assert self.revlog.delta_config.sparse_revlog
# if the revision we test again is too small, the resulting delta
# will be large anyway as that amount of data to be added is big
if self.revlog.rawsize(rev) < (self.textlen // LIMIT_BASE2TEXT):
return False
if self.revlog.delta_config.upper_bound_comp is not None:
maxcomp = self.revlog.delta_config.upper_bound_comp
basenotsnap = (self.p1, self.p2, nullrev)
if rev not in basenotsnap and self.revlog.issnapshot(rev):
snapshotdepth = self.revlog.snapshotdepth(rev)
# If text is significantly larger than the base, we can
# expect the resulting delta to be proportional to the size
# difference
revsize = self.revlog.rawsize(rev)
rawsizedistance = max(self.textlen - revsize, 0)
# use an estimate of the compression upper bound.
lowestrealisticdeltalen = rawsizedistance // maxcomp
# check the absolute constraint on the delta size
snapshotlimit = self.textlen >> snapshotdepth
if snapshotlimit < lowestrealisticdeltalen:
# delta lower bound is larger than accepted upper
# bound
return False
# check the relative constraint on the delta size
revlength = self.revlog.length(rev)
if revlength < lowestrealisticdeltalen:
# delta probable lower bound is larger than target
# base
return False
return True
def _iter_snapshots_base(self):
assert self.revlog.delta_config.sparse_revlog
assert self.current_stage == _STAGE_SNAPSHOT
Loading