dirstate: warn if dirty when starting an edition
authorPierre-Yves David <pierre-yves.david@octobus.net>
Sun, 19 Feb 2023 03:21:12 +0100
changeset 50117 3433723d1b9b
parent 50116 9b49809eb612
child 50118 65943224c184
dirstate: warn if dirty when starting an edition The dirstate should be clean before we start changing it. Otherwise we might write unrelated changes. Having a dirty dirstate laying around is also suspicious. This is similar to what we do when opening a new transaction, but this time this affect dirstate changes outside of a transaction.
mercurial/dirstate.py
--- a/mercurial/dirstate.py	Tue Feb 21 03:22:51 2023 +0100
+++ b/mercurial/dirstate.py	Sun Feb 19 03:21:12 2023 +0100
@@ -190,6 +190,9 @@
             raise error.ProgrammingError(msg)
 
         has_tr = repo.currenttransaction() is not None
+        if not has_tr and self._changing_level == 0 and self._dirty:
+            msg = "entering a changing context, but dirstate is already dirty"
+            raise error.ProgrammingError(msg)
 
         # different type of change are mutually exclusive
         if self._change_type is None: