changeset 18310:4499ba5ac35c

localrepo: introduce destroying function
author Idan Kamara <idankk86@gmail.com>
date Sat, 15 Dec 2012 20:08:13 +0200
parents cfeab932cff7
children 084074648755
files mercurial/localrepo.py mercurial/repair.py
diffstat 2 files changed, 16 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/localrepo.py	Sun Dec 16 23:13:02 2012 +0200
+++ b/mercurial/localrepo.py	Sat Dec 15 20:08:13 2012 +0200
@@ -895,6 +895,7 @@
             return 0
 
         parents = self.dirstate.parents()
+        self.destroying()
         transaction.rollback(self.sopener, self.sjoin('undo'), ui.warn)
         if os.path.exists(self.join('undo.bookmarks')):
             util.rename(self.join('undo.bookmarks'),
@@ -1379,6 +1380,20 @@
             lock.release()
 
     @unfilteredmethod
+    def destroying(self):
+        '''Inform the repository that nodes are about to be destroyed.
+        Intended for use by strip and rollback, so there's a common
+        place for anything that has to be done before destroying history.
+
+        This is mostly useful for saving state that is in memory and waiting
+        to be flushed when the current lock is released. Because a call to
+        destroyed is imminent, the repo will be invalidated causing those
+        changes to stay in memory (waiting for the next unlock), or vanish
+        completely.
+        '''
+        pass
+
+    @unfilteredmethod
     def destroyed(self, newheadnodes=None):
         '''Inform the repository that nodes have been destroyed.
         Intended for use by strip and rollback, so there's a common
--- a/mercurial/repair.py	Sun Dec 16 23:13:02 2012 +0200
+++ b/mercurial/repair.py	Sat Dec 15 20:08:13 2012 +0200
@@ -61,6 +61,7 @@
     # have to consider the effect of the stripped revisions and not revisions
     # missing because the cache is out-of-date.
     branchmap.updatecache(repo)
+    repo.destroying()
 
     cl = repo.changelog
     # TODO handle undo of merge sets