changeset 50117:3433723d1b9b

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.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 19 Feb 2023 03:21:12 +0100
parents 9b49809eb612
children 65943224c184
files mercurial/dirstate.py
diffstat 1 files changed, 3 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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: