mercurial/pathutil.py
branchstable
changeset 33633 20bac46f7744
parent 30614 cfe66dcf45c0
equal deleted inserted replaced
33632:0134d839444b 33633:20bac46f7744
    31       some nested repositories, e.g., subrepositories)
    31       some nested repositories, e.g., subrepositories)
    32 
    32 
    33     The file system checks are only done when 'realfs' is set to True (the
    33     The file system checks are only done when 'realfs' is set to True (the
    34     default). They should be disable then we are auditing path for operation on
    34     default). They should be disable then we are auditing path for operation on
    35     stored history.
    35     stored history.
       
    36 
       
    37     If 'cached' is set to True, audited paths and sub-directories are cached.
       
    38     Be careful to not keep the cache of unmanaged directories for long because
       
    39     audited paths may be replaced with symlinks.
    36     '''
    40     '''
    37 
    41 
    38     def __init__(self, root, callback=None, realfs=True):
    42     def __init__(self, root, callback=None, realfs=True, cached=False):
    39         self.audited = set()
    43         self.audited = set()
    40         self.auditeddir = set()
    44         self.auditeddir = set()
    41         self.root = root
    45         self.root = root
    42         self._realfs = realfs
    46         self._realfs = realfs
       
    47         self._cached = cached
    43         self.callback = callback
    48         self.callback = callback
    44         if os.path.lexists(root) and not util.fscasesensitive(root):
    49         if os.path.lexists(root) and not util.fscasesensitive(root):
    45             self.normcase = util.normcase
    50             self.normcase = util.normcase
    46         else:
    51         else:
    47             self.normcase = lambda x: x
    52             self.normcase = lambda x: x
    94                 continue
    99                 continue
    95             if self._realfs:
   100             if self._realfs:
    96                 self._checkfs(prefix, path)
   101                 self._checkfs(prefix, path)
    97             prefixes.append(normprefix)
   102             prefixes.append(normprefix)
    98 
   103 
    99         self.audited.add(normpath)
   104         if self._cached:
   100         # only add prefixes to the cache after checking everything: we don't
   105             self.audited.add(normpath)
   101         # want to add "foo/bar/baz" before checking if there's a "foo/.hg"
   106             # only add prefixes to the cache after checking everything: we don't
   102         self.auditeddir.update(prefixes)
   107             # want to add "foo/bar/baz" before checking if there's a "foo/.hg"
       
   108             self.auditeddir.update(prefixes)
   103 
   109 
   104     def _checkfs(self, prefix, path):
   110     def _checkfs(self, prefix, path):
   105         """raise exception if a file system backed check fails"""
   111         """raise exception if a file system backed check fails"""
   106         curpath = os.path.join(self.root, prefix)
   112         curpath = os.path.join(self.root, prefix)
   107         try:
   113         try: