##// END OF EJS Templates
dirstate: move code paths for backup from dirstateguard to dirstate...
FUJIWARA Katsunori -
r26632:59b5e884 default
parent child Browse files
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._filename = 'dirstate.backup.%s.%d' % (name, id(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._filename)
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: %s")
3364 msg = (_("can't release already inactivated backup:"
3370 % self._filename)
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