equal
deleted
inserted
replaced
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): |