# HG changeset patch # User Matt Mackall # Date 2011-11-01 20:19:37 # Node ID 41453d55b481ddfcc1dacb445179649e24ca861d # Parent 474279be5addafdef5ea196f90c6c5434ff01cba dirstate: don't fail when dropping a not-tracked file (issue3080) Complex merges with divergent renames can cause a file to be 'moved' twice, causing dirstate.drop() to be called twice. Rather than try to ensure there are no unexpected corner cases where this can happen, we simply ignore drops of files that aren't tracked. diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -370,9 +370,10 @@ class dirstate(object): def drop(self, f): '''Drop a file from the dirstate''' - self._dirty = True - self._droppath(f) - del self._map[f] + if f in self._map: + self._dirty = True + self._droppath(f) + del self._map[f] def _normalize(self, path, isknown): normed = os.path.normcase(path)