Comments
Patch
@@ -185,10 +185,25 @@
return
util.rename(repo.svfs.join(backupname), repo.svfs.join(FILENAME))
-def clearbackup(repo, backupname):
+def savewcbackup(repo, backupname):
if repository.NARROW_REQUIREMENT not in repo.requirements:
return
- repo.svfs.unlink(backupname)
+ vfs = repo.vfs
+ vfs.tryunlink(backupname)
+ # It may not exist in old repos
+ if vfs.exists(DIRSTATE_FILENAME):
+ util.copyfile(vfs.join(DIRSTATE_FILENAME), vfs.join(backupname),
+ hardlink=True)
+
+def restorewcbackup(repo, backupname):
+ if repository.NARROW_REQUIREMENT not in repo.requirements:
+ return
+ util.rename(repo.vfs.join(backupname), repo.vfs.join(DIRSTATE_FILENAME))
+
+def clearwcbackup(repo, backupname):
+ if repository.NARROW_REQUIREMENT not in repo.requirements:
+ return
+ repo.vfs.unlink(backupname)
def restrictpatterns(req_includes, req_excludes, repo_includes, repo_excludes):
r""" Restricts the patterns according to repo settings,
@@ -37,7 +37,7 @@
self._narrowspecbackupname = ('narrowspec.backup.%s.%d' %
(name, id(self)))
repo.dirstate.savebackup(repo.currenttransaction(), self._backupname)
- narrowspec.savebackup(repo, self._narrowspecbackupname)
+ narrowspec.savewcbackup(repo, self._narrowspecbackupname)
self._active = True
def __del__(self):
@@ -56,12 +56,12 @@
self._repo.dirstate.clearbackup(self._repo.currenttransaction(),
self._backupname)
- narrowspec.clearbackup(self._repo, self._narrowspecbackupname)
+ narrowspec.clearwcbackup(self._repo, self._narrowspecbackupname)
self._active = False
self._closed = True
def _abort(self):
- narrowspec.restorebackup(self._repo, self._narrowspecbackupname)
+ narrowspec.restorewcbackup(self._repo, self._narrowspecbackupname)
self._repo.dirstate.restorebackup(self._repo.currenttransaction(),
self._backupname)
self._active = False