##// END OF EJS Templates
snapshot: add refining logic at the findeltainfo level...
Boris Feld -
r39534:04b75f3a default
parent child Browse files
Show More
@@ -582,6 +582,7 b' def _candidategroups(revlog, textlen, p1'
582 582
583 583 deltalength = revlog.length
584 584 deltaparent = revlog.deltaparent
585 good = None
585 586
586 587 deltas_limit = textlen * LIMIT_DELTA2TEXT
587 588
@@ -612,7 +613,9 b' def _candidategroups(revlog, textlen, p1'
612 613 # XXX: in the sparse revlog case, group can become large,
613 614 # impacting performances. Some bounding or slicing mecanism
614 615 # would help to reduce this impact.
615 yield tuple(group)
616 good = yield tuple(group)
617 if good is not None:
618 break
616 619 yield None
617 620
618 621 def _findsnapshots(revlog, cache, start_rev):
@@ -847,14 +850,20 b' class deltacomputer(object):'
847 850 candidaterevs = next(groups)
848 851 while candidaterevs is not None:
849 852 nominateddeltas = []
853 if deltainfo is not None:
854 # if we already found a good delta,
855 # challenge it against refined candidates
856 nominateddeltas.append(deltainfo)
850 857 for candidaterev in candidaterevs:
851 858 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh)
852 859 if isgooddeltainfo(self.revlog, candidatedelta, revinfo):
853 860 nominateddeltas.append(candidatedelta)
854 861 if nominateddeltas:
855 862 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen)
856 break
857 candidaterevs = next(groups)
863 if deltainfo is not None:
864 candidaterevs = groups.send(deltainfo.base)
865 else:
866 candidaterevs = next(groups)
858 867
859 868 if deltainfo is None:
860 869 deltainfo = self._fullsnapshotinfo(fh, revinfo)
General Comments 0
You need to be logged in to leave comments. Login now