mercurial/dirstate.py
changeset 31207 1ef37b16b8e8
parent 31206 49e5491ed9bd
child 31208 fc57a8b95f1b
--- a/mercurial/dirstate.py	Sun Mar 05 16:20:07 2017 -0800
+++ b/mercurial/dirstate.py	Wed Mar 01 17:59:21 2017 -0800
@@ -1235,8 +1235,14 @@
             # end of this transaction
             tr.registertmp(filename, location='plain')
 
-        self._opener.write(prefix + self._filename + suffix,
-                           self._opener.tryread(filename))
+        backupname = prefix + self._filename + suffix
+        assert backupname != filename
+        if self._opener.exists(backupname):
+            self._opener.unlink(backupname)
+        # hardlink backup is okay because _writedirstate is always called
+        # with an "atomictemp=True" file.
+        util.copyfile(self._opener.join(filename),
+                      self._opener.join(backupname), hardlink=True)
 
     def restorebackup(self, tr, suffix='', prefix=''):
         '''Restore dirstate by backup file with suffix'''