D5504: narrow: make dirstateguard back up and restore working copy narrowspec instead
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Mon Jan 7 08:45:30 UTC 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
We used to have only one narrowspec for the store and the working
copy, but now that we have one narrowspec for each, it seems clear
that the dirstateguard was supposed to back up and restore the
narrowspec associated with the working copy, not the one associated
with the store.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5504
AFFECTED FILES
mercurial/dirstateguard.py
mercurial/narrowspec.py
CHANGE DETAILS
diff --git a/mercurial/narrowspec.py b/mercurial/narrowspec.py
--- a/mercurial/narrowspec.py
+++ b/mercurial/narrowspec.py
@@ -185,10 +185,23 @@
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)
+ 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,
diff --git a/mercurial/dirstateguard.py b/mercurial/dirstateguard.py
--- a/mercurial/dirstateguard.py
+++ b/mercurial/dirstateguard.py
@@ -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
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list