mercurial/scmutil.py
branchstable
changeset 15665 081e795c60e0
parent 15664 ec8730886f36
child 15666 37a6e9765015
equal deleted inserted replaced
15664:ec8730886f36 15665:081e795c60e0
    85         if normpath in self.audited:
    85         if normpath in self.audited:
    86             return
    86             return
    87         # AIX ignores "/" at end of path, others raise EISDIR.
    87         # AIX ignores "/" at end of path, others raise EISDIR.
    88         if util.endswithsep(path):
    88         if util.endswithsep(path):
    89             raise util.Abort(_("path ends in directory separator: %s") % path)
    89             raise util.Abort(_("path ends in directory separator: %s") % path)
    90         parts = util.splitpath(normpath)
    90         parts = util.splitpath(path)
    91         if (os.path.splitdrive(path)[0]
    91         if (os.path.splitdrive(path)[0]
    92             or parts[0].lower() in ('.hg', '.hg.', '')
    92             or parts[0].lower() in ('.hg', '.hg.', '')
    93             or os.pardir in parts):
    93             or os.pardir in parts):
    94             raise util.Abort(_("path contains illegal component: %s") % path)
    94             raise util.Abort(_("path contains illegal component: %s") % path)
    95         if '.hg' in path.lower():
    95         if '.hg' in path.lower():
    99                     pos = lparts.index(p)
    99                     pos = lparts.index(p)
   100                     base = os.path.join(*parts[:pos])
   100                     base = os.path.join(*parts[:pos])
   101                     raise util.Abort(_('path %r is inside nested repo %r')
   101                     raise util.Abort(_('path %r is inside nested repo %r')
   102                                      % (path, base))
   102                                      % (path, base))
   103 
   103 
       
   104         normparts = util.splitpath(normpath)
       
   105         assert len(parts) == len(normparts)
       
   106 
   104         parts.pop()
   107         parts.pop()
       
   108         normparts.pop()
   105         prefixes = []
   109         prefixes = []
   106         while parts:
   110         while parts:
   107             prefix = os.sep.join(parts)
   111             prefix = os.sep.join(parts)
   108             if prefix in self.auditeddir:
   112             normprefix = os.sep.join(normparts)
       
   113             if normprefix in self.auditeddir:
   109                 break
   114                 break
   110             curpath = os.path.join(self.root, prefix)
   115             curpath = os.path.join(self.root, prefix)
   111             try:
   116             try:
   112                 st = os.lstat(curpath)
   117                 st = os.lstat(curpath)
   113             except OSError, err:
   118             except OSError, err:
   123                 elif (stat.S_ISDIR(st.st_mode) and
   128                 elif (stat.S_ISDIR(st.st_mode) and
   124                       os.path.isdir(os.path.join(curpath, '.hg'))):
   129                       os.path.isdir(os.path.join(curpath, '.hg'))):
   125                     if not self.callback or not self.callback(curpath):
   130                     if not self.callback or not self.callback(curpath):
   126                         raise util.Abort(_('path %r is inside nested repo %r') %
   131                         raise util.Abort(_('path %r is inside nested repo %r') %
   127                                          (path, prefix))
   132                                          (path, prefix))
   128             prefixes.append(prefix)
   133             prefixes.append(normprefix)
   129             parts.pop()
   134             parts.pop()
       
   135             normparts.pop()
   130 
   136 
   131         self.audited.add(normpath)
   137         self.audited.add(normpath)
   132         # only add prefixes to the cache after checking everything: we don't
   138         # only add prefixes to the cache after checking everything: we don't
   133         # want to add "foo/bar/baz" before checking if there's a "foo/.hg"
   139         # want to add "foo/bar/baz" before checking if there's a "foo/.hg"
   134         self.auditeddir.update(prefixes)
   140         self.auditeddir.update(prefixes)