mercurial/scmutil.py
changeset 51802 95cdc01f313d
parent 51800 e69e3d585f07
child 51859 f4733654f144
--- a/mercurial/scmutil.py	Thu Aug 15 13:52:14 2024 +0100
+++ b/mercurial/scmutil.py	Fri Aug 16 11:12:19 2024 +0100
@@ -1668,7 +1668,7 @@
     return requirementsmod.TREEMANIFEST_REQUIREMENT in repo.requirements
 
 
-def writereporequirements(repo, requirements=None) -> None:
+def writereporequirements(repo, requirements=None, maywritestore=True) -> None:
     """writes requirements for the repo
 
     Requirements are written to .hg/requires and .hg/store/requires based
@@ -1681,10 +1681,11 @@
     if wcreq is not None:
         writerequires(repo.vfs, wcreq)
     if storereq is not None:
-        writerequires(repo.svfs, storereq)
+        writerequires(repo.svfs, storereq, maywrite=maywritestore)
     elif repo.ui.configbool(b'format', b'usestore'):
         # only remove store requires if we are using store
-        repo.svfs.tryunlink(b'requires')
+        if maywritestore:
+            repo.svfs.tryunlink(b'requires')
 
 
 def readrequires(vfs, allowmissing):
@@ -1701,9 +1702,11 @@
     return set(read(b'requires').splitlines())
 
 
-def writerequires(opener, requirements) -> None:
+def writerequires(opener, requirements, maywrite=True) -> None:
     on_disk = readrequires(opener, True)
     if not (on_disk == set(requirements)):
+        if not maywrite:
+            raise error.Abort(_(b"store requirements are not as expected"))
         with opener(b'requires', b'w', atomictemp=True) as fp:
             for r in sorted(requirements):
                 fp.write(b"%s\n" % r)