dirstate: enforce holding the lock while doing any changes
authorPierre-Yves David <pierre-yves.david@octobus.net>
Tue, 13 Dec 2022 12:50:52 +0100
changeset 49966 380ed77e9ad3
parent 49965 0cf4c1b80fd9
child 49967 5698c5eee12b
dirstate: enforce holding the lock while doing any changes This seems like a sensible sanity check. This already caught the issue in largefile. This will catch more issue when we start using similar context manager for operation other than the parent changes.
mercurial/dirstate.py
--- a/mercurial/dirstate.py	Fri Jan 27 00:45:07 2023 +0100
+++ b/mercurial/dirstate.py	Tue Dec 13 12:50:52 2022 +0100
@@ -158,6 +158,9 @@
         the incoherent dirstate won't be written when wlock is
         released.
         """
+        if repo.currentwlock() is None:
+            msg = b"changing parents without holding the wlock"
+            raise error.ProgrammingError(msg)
         if self._invalidated_context:
             msg = "trying to use an invalidated dirstate before it has reset"
             raise error.ProgrammingError(msg)