diff mercurial/localrepo.py @ 29181:dae38633eba8 stable

localrepo: prevent executable-bit only changes from being lost on amend If you have just executable-bit change and amend it twice it will vanish: * After the first amend the commit will have the proper executable bit set in manifest but it won't have the the file on the list of files in changelog. * The second amend will read the wrong list of files from changelog and it will copy the manifest entry from parent for this file. * Voila! The change is lost. This change repairs the bug in localrepo causing this and adds a test for it.
author Mateusz Kwapich <mitrandir@fb.com>
date Thu, 19 May 2016 14:35:22 -0700
parents 032c4c2f802a
children ee935a6e1ea2
line wrap: on
line diff
--- a/mercurial/localrepo.py	Sat May 21 02:48:51 2016 +0900
+++ b/mercurial/localrepo.py	Thu May 19 14:35:22 2016 -0700
@@ -1404,6 +1404,8 @@
             node = fctx.filenode()
             if node in [fparent1, fparent2]:
                 self.ui.debug('reusing %s filelog entry\n' % fname)
+                if manifest1.flags(fname) != fctx.flags():
+                    changelist.append(fname)
                 return node
 
         flog = self.file(fname)