diff -r e00123f63410 -r 27946fca8a05 mercurial/dirstate.py --- a/mercurial/dirstate.py Fri Aug 24 10:13:27 2018 -0700 +++ b/mercurial/dirstate.py Thu Aug 23 18:04:15 2018 -0700 @@ -912,11 +912,14 @@ continue raise for f, kind, st in entries: - # If we needed to inspect any files, visitentries would have - # been 'this' or 'all', and we would have set it to None - # above. If we have visitentries populated here, we don't - # care about any files in this directory, so no need to - # check the type of `f`. + # Some matchers may return files in the visitentries set, + # instead of 'this', if the matcher explicitly mentions them + # and is not an exactmatcher. This is acceptable; we do not + # make any hard assumptions about file-or-directory below + # based on the presence of `f` in visitentries. If + # visitchildrenset returned a set, we can always skip the + # entries *not* in the set it provided regardless of whether + # they're actually a file or a directory. if visitentries and f not in visitentries: continue if normalizefile: