diff -r 8f3f8b8dbab7 -r 6226668a7169 mercurial/revlog.py --- 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)