diff options
Diffstat (limited to 'Lib/filecmp.py')
| -rw-r--r-- | Lib/filecmp.py | 25 | 
1 files changed, 17 insertions, 8 deletions
diff --git a/Lib/filecmp.py b/Lib/filecmp.py index f5cea1de6f..328528871a 100644 --- a/Lib/filecmp.py +++ b/Lib/filecmp.py @@ -6,6 +6,7 @@ Classes:  Functions:      cmp(f1, f2, shallow=True) -> int      cmpfiles(a, b, common) -> ([], [], []) +    clear_cache()  """ @@ -13,11 +14,18 @@ import os  import stat  from itertools import filterfalse -__all__ = ["cmp", "dircmp", "cmpfiles"] +__all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES']  _cache = {}  BUFSIZE = 8*1024 +DEFAULT_IGNORES = [ +    'RCS', 'CVS', 'tags', '.git', '.hg', '.bzr', '_darcs', '__pycache__'] + +def clear_cache(): +    """Clear the filecmp cache.""" +    _cache.clear() +  def cmp(f1, f2, shallow=True):      """Compare two files. @@ -35,7 +43,8 @@ def cmp(f1, f2, shallow=True):      True if the files are the same, False otherwise.      This function uses a cache for past comparisons and the results, -    with a cache invalidation mechanism relying on stale signatures. +    with a cache invalidation mechanism relying on stale signatures +    or by explicitly calling clear_cache().      """ @@ -52,7 +61,7 @@ def cmp(f1, f2, shallow=True):      if outcome is None:          outcome = _do_cmp(f1, f2)          if len(_cache) > 100:      # limit the maximum size of the cache -            _cache.clear() +            clear_cache()          _cache[f1, f2, s1, s2] = outcome      return outcome @@ -80,7 +89,7 @@ class dircmp:      dircmp(a, b, ignore=None, hide=None)        A and B are directories.        IGNORE is a list of names to ignore, -        defaults to ['RCS', 'CVS', 'tags']. +        defaults to DEFAULT_IGNORES.        HIDE is a list of names to hide,          defaults to [os.curdir, os.pardir]. @@ -116,7 +125,7 @@ class dircmp:          else:              self.hide = hide          if ignore is None: -            self.ignore = ['RCS', 'CVS', 'tags'] # Names ignored in comparison +            self.ignore = DEFAULT_IGNORES          else:              self.ignore = ignore @@ -147,12 +156,12 @@ class dircmp:              ok = 1              try:                  a_stat = os.stat(a_path) -            except os.error as why: +            except OSError as why:                  # print('Can\'t stat', a_path, ':', why.args[1])                  ok = 0              try:                  b_stat = os.stat(b_path) -            except os.error as why: +            except OSError as why:                  # print('Can\'t stat', b_path, ':', why.args[1])                  ok = 0 @@ -268,7 +277,7 @@ def cmpfiles(a, b, common, shallow=True):  def _cmp(a, b, sh, abs=abs, cmp=cmp):      try:          return not abs(cmp(a, b, sh)) -    except os.error: +    except OSError:          return 2  | 
