Show More
@@ -3330,10 +3330,9 class dirstateguard(object): | |||||
3330 | ''' |
|
3330 | ''' | |
3331 |
|
3331 | |||
3332 | def __init__(self, repo, name): |
|
3332 | def __init__(self, repo, name): | |
3333 | repo.dirstate.write() |
|
|||
3334 | self._repo = repo |
|
3333 | self._repo = repo | |
3335 |
self._ |
|
3334 | self._suffix = '.backup.%s.%d' % (name, id(self)) | |
3336 | repo.vfs.write(self._filename, repo.vfs.tryread('dirstate')) |
|
3335 | repo.dirstate._savebackup(repo, self._suffix) | |
3337 | self._active = True |
|
3336 | self._active = True | |
3338 | self._closed = False |
|
3337 | self._closed = False | |
3339 |
|
3338 | |||
@@ -3347,27 +3346,24 class dirstateguard(object): | |||||
3347 |
|
3346 | |||
3348 | def close(self): |
|
3347 | def close(self): | |
3349 | if not self._active: # already inactivated |
|
3348 | if not self._active: # already inactivated | |
3350 | msg = (_("can't close already inactivated backup: %s") |
|
3349 | msg = (_("can't close already inactivated backup: dirstate%s") | |
3351 |
% self._ |
|
3350 | % self._suffix) | |
3352 | raise error.Abort(msg) |
|
3351 | raise error.Abort(msg) | |
3353 |
|
3352 | |||
3354 | self._repo.vfs.unlink(self._filename) |
|
3353 | self._repo.dirstate._clearbackup(self._repo, self._suffix) | |
3355 | self._active = False |
|
3354 | self._active = False | |
3356 | self._closed = True |
|
3355 | self._closed = True | |
3357 |
|
3356 | |||
3358 | def _abort(self): |
|
3357 | def _abort(self): | |
3359 | # this "invalidate()" prevents "wlock.release()" from writing |
|
3358 | self._repo.dirstate._restorebackup(self._repo, self._suffix) | |
3360 | # changes of dirstate out after restoring to original status |
|
|||
3361 | self._repo.dirstate.invalidate() |
|
|||
3362 |
|
||||
3363 | self._repo.vfs.rename(self._filename, 'dirstate') |
|
|||
3364 | self._active = False |
|
3359 | self._active = False | |
3365 |
|
3360 | |||
3366 | def release(self): |
|
3361 | def release(self): | |
3367 | if not self._closed: |
|
3362 | if not self._closed: | |
3368 | if not self._active: # already inactivated |
|
3363 | if not self._active: # already inactivated | |
3369 |
msg = (_("can't release already inactivated backup: |
|
3364 | msg = (_("can't release already inactivated backup:" | |
3370 |
|
|
3365 | " dirstate%s") | |
|
3366 | % self._suffix) | |||
3371 | raise error.Abort(msg) |
|
3367 | raise error.Abort(msg) | |
3372 | self._abort() |
|
3368 | self._abort() | |
3373 |
|
3369 |
@@ -1051,3 +1051,22 class dirstate(object): | |||||
1051 | # that |
|
1051 | # that | |
1052 | return list(files) |
|
1052 | return list(files) | |
1053 | return [f for f in dmap if match(f)] |
|
1053 | return [f for f in dmap if match(f)] | |
|
1054 | ||||
|
1055 | def _savebackup(self, repo, suffix): | |||
|
1056 | '''Save current dirstate into backup file with suffix''' | |||
|
1057 | self.write() | |||
|
1058 | filename = self._filename | |||
|
1059 | self._opener.write(filename + suffix, self._opener.tryread(filename)) | |||
|
1060 | ||||
|
1061 | def _restorebackup(self, repo, suffix): | |||
|
1062 | '''Restore dirstate by backup file with suffix''' | |||
|
1063 | # this "invalidate()" prevents "wlock.release()" from writing | |||
|
1064 | # changes of dirstate out after restoring from backup file | |||
|
1065 | self.invalidate() | |||
|
1066 | filename = self._filename | |||
|
1067 | self._opener.rename(filename + suffix, filename) | |||
|
1068 | ||||
|
1069 | def _clearbackup(self, repo, suffix): | |||
|
1070 | '''Clear backup file with suffix''' | |||
|
1071 | filename = self._filename | |||
|
1072 | self._opener.unlink(filename + suffix) |
General Comments 0
You need to be logged in to leave comments.
Login now