mercurial/dirstateguard.py
changeset 38908 ad24b581e4d9
parent 33814 bbbbd3c30bfc
child 41227 b74481038438
equal deleted inserted replaced
38907:0db50770f388 38908:ad24b581e4d9
     9 
     9 
    10 from .i18n import _
    10 from .i18n import _
    11 
    11 
    12 from . import (
    12 from . import (
    13     error,
    13     error,
       
    14     narrowspec,
    14     util,
    15     util,
    15 )
    16 )
    16 
    17 
    17 class dirstateguard(util.transactional):
    18 class dirstateguard(util.transactional):
    18     '''Restore dirstate at unexpected failure.
    19     '''Restore dirstate at unexpected failure.
    31     def __init__(self, repo, name):
    32     def __init__(self, repo, name):
    32         self._repo = repo
    33         self._repo = repo
    33         self._active = False
    34         self._active = False
    34         self._closed = False
    35         self._closed = False
    35         self._backupname = 'dirstate.backup.%s.%d' % (name, id(self))
    36         self._backupname = 'dirstate.backup.%s.%d' % (name, id(self))
       
    37         self._narrowspecbackupname = ('narrowspec.backup.%s.%d' %
       
    38                                       (name, id(self)))
    36         repo.dirstate.savebackup(repo.currenttransaction(), self._backupname)
    39         repo.dirstate.savebackup(repo.currenttransaction(), self._backupname)
       
    40         narrowspec.savebackup(repo, self._narrowspecbackupname)
    37         self._active = True
    41         self._active = True
    38 
    42 
    39     def __del__(self):
    43     def __del__(self):
    40         if self._active: # still active
    44         if self._active: # still active
    41             # this may occur, even if this class is used correctly:
    45             # this may occur, even if this class is used correctly:
    50                    % self._backupname)
    54                    % self._backupname)
    51             raise error.Abort(msg)
    55             raise error.Abort(msg)
    52 
    56 
    53         self._repo.dirstate.clearbackup(self._repo.currenttransaction(),
    57         self._repo.dirstate.clearbackup(self._repo.currenttransaction(),
    54                                          self._backupname)
    58                                          self._backupname)
       
    59         narrowspec.clearbackup(self._repo, self._narrowspecbackupname)
    55         self._active = False
    60         self._active = False
    56         self._closed = True
    61         self._closed = True
    57 
    62 
    58     def _abort(self):
    63     def _abort(self):
       
    64         narrowspec.restorebackup(self._repo, self._narrowspecbackupname)
    59         self._repo.dirstate.restorebackup(self._repo.currenttransaction(),
    65         self._repo.dirstate.restorebackup(self._repo.currenttransaction(),
    60                                            self._backupname)
    66                                            self._backupname)
    61         self._active = False
    67         self._active = False
    62 
    68 
    63     def release(self):
    69     def release(self):