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 _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel