mbolin created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers.
REVISION SUMMARY `_droppath()` already checks `"dirs" in self._map.__dict__` before accessing `self._map.dirs`. This updates `_addpath()` to be equally cautious. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D1313 AFFECTED FILES mercurial/dirstate.py CHANGE DETAILS diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -388,7 +388,7 @@ return self._map.copymap def _droppath(self, f): - if self[f] not in "?r" and "dirs" in self._map.__dict__: + if "dirs" in self._map.__dict__ and self[f] not in "?r": self._map.dirs.delpath(f) if "filefoldmap" in self._map.__dict__: @@ -402,16 +402,17 @@ oldstate = self[f] if state == 'a' or oldstate == 'r': scmutil.checkfilename(f) - if f in self._map.dirs: - raise error.Abort(_('directory %r already in dirstate') % f) - # shadows - for d in util.finddirs(f): - if d in self._map.dirs: - break - entry = self._map.get(d) - if entry is not None and entry[0] != 'r': - raise error.Abort( - _('file %r in dirstate clashes with %r') % (d, f)) + if "dirs" in self._map.__dict__: + if f in self._map.dirs: + raise error.Abort(_('directory %r already in dirstate') % f) + # shadows + for d in util.finddirs(f): + if d in self._map.dirs: + break + entry = self._map.get(d) + if entry is not None and entry[0] != 'r': + raise error.Abort( + _('file %r in dirstate clashes with %r') % (d, f)) if oldstate in "?r" and "dirs" in self._map.__dict__: self._map.dirs.addpath(f) self._dirty = True To: mbolin, #hg-reviewers Cc: mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel