changeset 30182:144d8fe266d9

cmdutil: satisfy expections in dirstateguard.__del__, even if __init__ fails Python "delstructors" are terrible - this one because it assumed that __init__ had completed before it was called. That would not necessarily be the case if the repository was read only or broken and saving the dirstate thus failed in unexpected ways. That could give confusing warnings about missing '_active' after failures. To fix that, make sure all member variables are "declared" before doing anything that possibly could fail. [Famous last words.]
author Mads Kiilerich <madski@unity3d.com>
date Fri, 14 Oct 2016 01:53:15 +0200
parents 7356e6b1f5b8
children 0106f93ca1d5
files mercurial/cmdutil.py
diffstat 1 files changed, 2 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Fri Oct 14 01:53:15 2016 +0200
+++ b/mercurial/cmdutil.py	Fri Oct 14 01:53:15 2016 +0200
@@ -3526,10 +3526,11 @@
 
     def __init__(self, repo, name):
         self._repo = repo
+        self._active = False
+        self._closed = False
         self._suffix = '.backup.%s.%d' % (name, id(self))
         repo.dirstate.savebackup(repo.currenttransaction(), self._suffix)
         self._active = True
-        self._closed = False
 
     def __del__(self):
         if self._active: # still active