mercurial/cmdutil.py
changeset 26632 59b5e8844eb0
parent 26587 56b2bcea2529
child 26639 92d67e5729b9
--- a/mercurial/cmdutil.py	Tue Oct 13 12:25:43 2015 -0700
+++ b/mercurial/cmdutil.py	Wed Oct 14 02:49:17 2015 +0900
@@ -3330,10 +3330,9 @@
     '''
 
     def __init__(self, repo, name):
-        repo.dirstate.write()
         self._repo = repo
-        self._filename = 'dirstate.backup.%s.%d' % (name, id(self))
-        repo.vfs.write(self._filename, repo.vfs.tryread('dirstate'))
+        self._suffix = '.backup.%s.%d' % (name, id(self))
+        repo.dirstate._savebackup(repo, self._suffix)
         self._active = True
         self._closed = False
 
@@ -3347,27 +3346,24 @@
 
     def close(self):
         if not self._active: # already inactivated
-            msg = (_("can't close already inactivated backup: %s")
-                   % self._filename)
+            msg = (_("can't close already inactivated backup: dirstate%s")
+                   % self._suffix)
             raise error.Abort(msg)
 
-        self._repo.vfs.unlink(self._filename)
+        self._repo.dirstate._clearbackup(self._repo, self._suffix)
         self._active = False
         self._closed = True
 
     def _abort(self):
-        # this "invalidate()" prevents "wlock.release()" from writing
-        # changes of dirstate out after restoring to original status
-        self._repo.dirstate.invalidate()
-
-        self._repo.vfs.rename(self._filename, 'dirstate')
+        self._repo.dirstate._restorebackup(self._repo, self._suffix)
         self._active = False
 
     def release(self):
         if not self._closed:
             if not self._active: # already inactivated
-                msg = (_("can't release already inactivated backup: %s")
-                       % self._filename)
+                msg = (_("can't release already inactivated backup:"
+                         " dirstate%s")
+                       % self._suffix)
                 raise error.Abort(msg)
             self._abort()