mercurial/dirstate.py
changeset 6832 643ff33812f8
parent 6831 2b663f542bd3
child 6833 6be5edab824c
equal deleted inserted replaced
6831:2b663f542bd3 6832:643ff33812f8
   432             elif stat.S_ISSOCK(mode): kind = _('socket')
   432             elif stat.S_ISSOCK(mode): kind = _('socket')
   433             elif stat.S_ISDIR(mode): kind = _('directory')
   433             elif stat.S_ISDIR(mode): kind = _('directory')
   434             self._ui.warn(_('%s: unsupported file type (type is %s)\n')
   434             self._ui.warn(_('%s: unsupported file type (type is %s)\n')
   435                           % (self.pathto(f), kind))
   435                           % (self.pathto(f), kind))
   436 
   436 
   437         def imatch(f):
       
   438             return (f in dmap or not ignore(f)) and match(f)
       
   439 
       
   440         # TODO: don't walk unknown directories if unknown and ignored are False
   437         # TODO: don't walk unknown directories if unknown and ignored are False
   441         ignore = self._ignore
   438         ignore = self._ignore
   442         dirignore = self._dirignore
   439         dirignore = self._dirignore
   443         if ignored:
   440         if ignored:
   444             imatch = match
       
   445             ignore = util.never
   441             ignore = util.never
   446             dirignore = util.never
   442             dirignore = util.never
   447 
   443 
   448         dmap = self._map
   444         dmap = self._map
   449         normpath = util.normpath
   445         normpath = util.normpath
   491                         keep = True
   487                         keep = True
   492                         break
   488                         break
   493                 if not keep:
   489                 if not keep:
   494                     if inst.errno != errno.ENOENT:
   490                     if inst.errno != errno.ENOENT:
   495                         fwarn(ff, inst.strerror)
   491                         fwarn(ff, inst.strerror)
   496                     elif badfn(ff, inst.strerror) and imatch(nf):
   492                     elif badfn(ff, inst.strerror):
   497                         results[nf] = None
   493                         if (nf in dmap or not ignore(nf)) and match(nf):
       
   494                             results[nf] = None
   498 
   495 
   499         # step 2: visit subdirectories
   496         # step 2: visit subdirectories
   500         while work:
   497         while work:
   501             nd = work.pop()
   498             nd = work.pop()
   502             if hasattr(match, 'dir'):
   499             if hasattr(match, 'dir'):
   518                     if kind == dirkind:
   515                     if kind == dirkind:
   519                         if not ignore(nf):
   516                         if not ignore(nf):
   520                             wadd(nf)
   517                             wadd(nf)
   521                         if nf in dmap and match(nf):
   518                         if nf in dmap and match(nf):
   522                             results[nf] = None
   519                             results[nf] = None
   523                     elif imatch(nf):
   520                     elif kind == regkind or kind == lnkkind:
   524                         if kind == regkind or kind == lnkkind:
   521                         if nf in dmap:
       
   522                             if match(nf):
       
   523                                 results[nf] = st
       
   524                         elif match(nf) and not ignore(nf):
   525                             results[nf] = st
   525                             results[nf] = st
   526                         elif nf in dmap:
   526                     elif nf in dmap and match(nf):
   527                             results[nf] = None
   527                         results[nf] = None
   528 
   528 
   529         # step 3: report unseen items in the dmap hash
   529         # step 3: report unseen items in the dmap hash
   530         for nf in util.sort(dmap):
   530         for nf in util.sort(dmap):
   531             if nf not in results and match(nf):
   531             if nf not in results and match(nf):
   532                 results[nf] = None
   532                 results[nf] = None