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):