diff mercurial/narrowspec.py @ 41227:b74481038438

narrow: make dirstateguard back up and restore working copy narrowspec instead 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. clearbackup() (for the store narrowspec) is not needed because the presence of the file in localrepository._journalfiles() takes care of that. Differential Revision: https://phab.mercurial-scm.org/D5504
author Martin von Zweigbergk <martinvonz@google.com>
date Sat, 29 Dec 2018 22:27:39 -0800
parents 5838afea8213
children 50ca531f1f24
line wrap: on
line diff
--- a/mercurial/narrowspec.py	Thu Jan 10 13:36:25 2019 -0800
+++ b/mercurial/narrowspec.py	Sat Dec 29 22:27:39 2018 -0800
@@ -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,