localrepo: reuse commit of parent filectx entries without rehashing
It is currently only amend and debugbuilddag that will pass a filectx to
localrepo._filecommit. Amend will usually not hit the case where a the filectx
is a parent that just can be reused. Future convert changes will use it more.
--- a/mercurial/localrepo.py Thu Mar 19 13:00:44 2015 -0700
+++ b/mercurial/localrepo.py Thu Mar 19 17:36:17 2015 +0100
@@ -1232,11 +1232,15 @@
"""
fname = fctx.path()
- text = fctx.data()
- flog = self.file(fname)
fparent1 = manifest1.get(fname, nullid)
fparent2 = manifest2.get(fname, nullid)
+ if isinstance(fctx, context.filectx):
+ node = fctx.filenode()
+ if node in [fparent1, fparent2]:
+ self.ui.debug('reusing %s filelog entry\n' % fname)
+ return node
+ flog = self.file(fname)
meta = {}
copy = fctx.renamed()
if copy and copy[0] != fname:
@@ -1298,6 +1302,7 @@
fparent2 = nullid
# is the file changed?
+ text = fctx.data()
if fparent2 != nullid or flog.cmp(fparent1, text) or meta:
changelist.append(fname)
return flog.add(text, meta, tr, linkrev, fparent1, fparent2)