diff mercurial/revlogutils/nodemap.py @ 48690:d55c4472bbb6

persistent-nodemap: properly delete all nodemap files on downgrade Previously, we were only deleting the docket fileā€¦ Differential Revision: https://phab.mercurial-scm.org/D12093
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 27 Jan 2022 17:04:40 +0100
parents 897aa0c4da4a
children de3ac3d2c60b
line wrap: on
line diff
--- a/mercurial/revlogutils/nodemap.py	Sat Jan 15 09:08:41 2022 +0300
+++ b/mercurial/revlogutils/nodemap.py	Thu Jan 27 17:04:40 2022 +0100
@@ -144,10 +144,12 @@
 
 def delete_nodemap(tr, repo, revlog):
     """Delete nodemap data on disk for a given revlog"""
-    if revlog._nodemap_file is None:
-        msg = "calling persist nodemap on a revlog without the feature enabled"
-        raise error.ProgrammingError(msg)
-    repo.svfs.tryunlink(revlog._nodemap_file)
+    prefix = revlog.radix
+    pattern = re.compile(br"(^|/)%s(-[0-9a-f]+\.nd|\.n(\.a)?)$" % prefix)
+    dirpath = revlog.opener.dirname(revlog._indexfile)
+    for f in revlog.opener.listdir(dirpath):
+        if pattern.match(f):
+            repo.svfs.tryunlink(f)
 
 
 def persist_nodemap(tr, revlog, pending=False, force=False):