diff --git a/mercurial/manifest.py b/mercurial/manifest.py --- a/mercurial/manifest.py +++ b/mercurial/manifest.py @@ -726,9 +726,13 @@ def _isempty(self): self._load() # for consistency; already loaded by all callers + # See if we can skip loading everything. + if self._files or (self._dirs and + any(not m._isempty() for m in self._dirs.values())): + return False self._loadalllazy() - return (not self._files and (not self._dirs or - all(m._isempty() for m in self._dirs.values()))) + return (not self._dirs or + all(m._isempty() for m in self._dirs.values())) def __repr__(self): return ('' %