Mercurial > public > mercurial-scm > hg-stable
diff mercurial/revlog.py @ 35354:6226668a7169
upgrade: add a 'redeltafullall' mode
We add a new mode for delta recomputation, when selected, each full text will
go through the full "addrevision" mechanism again. This is slower than
"redeltaall" but this gives the opportunity for extensions to trigger special
logic. For example, the lfs extensions can decide to promote some revision to
lfs storage during the upgrade.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 07 Dec 2017 20:27:03 +0100 |
parents | 1bde8e8e5de0 |
children | a0fab647a8f1 |
line wrap: on
line diff
--- a/mercurial/revlog.py Thu Dec 07 22:37:18 2017 +0100 +++ b/mercurial/revlog.py Thu Dec 07 20:27:03 2017 +0100 @@ -2264,7 +2264,9 @@ DELTAREUSESAMEREVS = 'samerevs' DELTAREUSENEVER = 'never' - DELTAREUSEALL = {'always', 'samerevs', 'never'} + DELTAREUSEFULLADD = 'fulladd' + + DELTAREUSEALL = {'always', 'samerevs', 'never', 'fulladd'} def clone(self, tr, destrevlog, addrevisioncb=None, deltareuse=DELTAREUSESAMEREVS, aggressivemergedeltas=None): @@ -2355,18 +2357,24 @@ if not cachedelta: rawtext = self.revision(rev, raw=True) - ifh = destrevlog.opener(destrevlog.indexfile, 'a+', - checkambig=False) - dfh = None - if not destrevlog._inline: - dfh = destrevlog.opener(destrevlog.datafile, 'a+') - try: - destrevlog._addrevision(node, rawtext, tr, linkrev, p1, p2, - flags, cachedelta, ifh, dfh) - finally: - if dfh: - dfh.close() - ifh.close() + + if deltareuse == self.DELTAREUSEFULLADD: + destrevlog.addrevision(rawtext, tr, linkrev, p1, p2, + cachedelta=cachedelta, + node=node, flags=flags) + else: + ifh = destrevlog.opener(destrevlog.indexfile, 'a+', + checkambig=False) + dfh = None + if not destrevlog._inline: + dfh = destrevlog.opener(destrevlog.datafile, 'a+') + try: + destrevlog._addrevision(node, rawtext, tr, linkrev, p1, + p2, flags, cachedelta, ifh, dfh) + finally: + if dfh: + dfh.close() + ifh.close() if addrevisioncb: addrevisioncb(self, rev, node)