Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlog.py @ 39120:8f83a953dddf
revlog: skip over empty revision when looking for delta base
There is no point in keeping an empty revision in the middle of a chain since
they won't contribute any data. So we filter them out when looking for a valid
base delta.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 27 Jul 2018 19:09:41 +0200 |
parents | 18e866ae2a7d |
children | 152ae0f84f9a |
comparison
equal
deleted
inserted
replaced
39119:a456c603a83d | 39120:8f83a953dddf |
---|---|
741 cachedelta = revinfo.cachedelta | 741 cachedelta = revinfo.cachedelta |
742 p1 = revinfo.p1 | 742 p1 = revinfo.p1 |
743 p2 = revinfo.p2 | 743 p2 = revinfo.p2 |
744 revlog = self.revlog | 744 revlog = self.revlog |
745 | 745 |
746 deltalength = self.revlog.length | |
747 deltaparent = self.revlog.deltaparent | |
748 | |
746 deltainfo = None | 749 deltainfo = None |
747 for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta): | 750 for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta): |
748 nominateddeltas = [] | 751 nominateddeltas = [] |
749 for candidaterev in candidaterevs: | 752 for candidaterev in candidaterevs: |
753 # skip over empty delta (no need to include them in a chain) | |
754 while candidaterev != nullrev and not deltalength(candidaterev): | |
755 candidaterev = deltaparent(candidaterev) | |
756 # no need to try a delta against nullid, this will be handled | |
757 # by fulltext later. | |
758 if candidaterev == nullrev: | |
759 continue | |
750 # no delta for rawtext-changing revs (see "candelta" for why) | 760 # no delta for rawtext-changing revs (see "candelta" for why) |
751 if revlog.flags(candidaterev) & REVIDX_RAWTEXT_CHANGING_FLAGS: | 761 if revlog.flags(candidaterev) & REVIDX_RAWTEXT_CHANGING_FLAGS: |
752 continue | 762 continue |
753 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh) | 763 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh) |
754 if revlog._isgooddeltainfo(candidatedelta, revinfo): | 764 if revlog._isgooddeltainfo(candidatedelta, revinfo): |