# HG changeset patch # User Mads Kiilerich # Date 1476402795 -7200 # Node ID 144d8fe266d9b3205f399b2bc80691220ef06295 # Parent 7356e6b1f5b8f9d73d2b2c8cf0db0498c80b6239 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.] diff -r 7356e6b1f5b8 -r 144d8fe266d9 mercurial/cmdutil.py --- 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