]> granicus.if.org Git - python/commitdiff
Close #15442: Expand the list of default directories ignored by filecmp.dircmp and...
authorEli Bendersky <eliben@gmail.com>
Sat, 12 Jan 2013 14:13:32 +0000 (06:13 -0800)
committerEli Bendersky <eliben@gmail.com>
Sat, 12 Jan 2013 14:13:32 +0000 (06:13 -0800)
Doc/library/filecmp.rst
Lib/filecmp.py
Lib/test/test_filecmp.py
Misc/NEWS

index 8a88f8ce9ab318bd21b83248bf0be9ddb114248c..8577c1733ab16e3830f9f51f8123ba42c98b2a7f 100644 (file)
@@ -55,10 +55,10 @@ The :class:`dircmp` class
 
 .. class:: dircmp(a, b, ignore=None, hide=None)
 
-   Construct a new directory comparison object, to compare the directories *a* and
-   *b*. *ignore* is a list of names to ignore, and defaults to ``['RCS', 'CVS',
-   'tags']``. *hide* is a list of names to hide, and defaults to ``[os.curdir,
-   os.pardir]``.
+   Construct a new directory comparison object, to compare the directories *a*
+   and *b*. *ignore* is a list of names to ignore, and defaults to
+   :attr:`filecmp.DEFAULT_IGNORES`. *hide* is a list of names to hide, and
+   defaults to ``[os.curdir, os.pardir]``.
 
    The :class:`dircmp` class compares files by doing *shallow* comparisons
    as described for :func:`filecmp.cmp`.
@@ -164,6 +164,12 @@ The :class:`dircmp` class
       A dictionary mapping names in :attr:`common_dirs` to :class:`dircmp`
       objects.
 
+.. attribute:: DEFAULT_IGNORES
+
+   .. versionadded:: 3.3
+
+   List of directories ignored by :class:`dircmp` by default.
+
 
 Here is a simplified example of using the ``subdirs`` attribute to search
 recursively through two directories to show common different files::
index 5bbd0e811f4bb48eae4c170f3f5c3285c30b5324..014c0d097a418daa6d2e859a574873d721217a2d 100644 (file)
@@ -13,11 +13,15 @@ import os
 import stat
 from itertools import filterfalse
 
-__all__ = ["cmp", "dircmp", "cmpfiles"]
+__all__ = ['cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES']
 
 _cache = {}
 BUFSIZE = 8*1024
 
+DEFAULT_IGNORES = [
+    'RCS', 'CVS', 'tags', '.git', '.hg', '.bzr', '_darcs', '__pycache__']
+
+
 def cmp(f1, f2, shallow=True):
     """Compare two files.
 
@@ -80,7 +84,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 +120,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
 
index 09599794ad9d178f33ad44f8fd87f514cba4aefe..f760147016334ed7374dbf5c58bc0343d36392e6 100644 (file)
@@ -1,4 +1,3 @@
-
 import os, filecmp, shutil, tempfile
 import unittest
 from test import support
@@ -46,9 +45,14 @@ class DirCompareTestCase(unittest.TestCase):
         self.dir = os.path.join(tmpdir, 'dir')
         self.dir_same = os.path.join(tmpdir, 'dir-same')
         self.dir_diff = os.path.join(tmpdir, 'dir-diff')
+
+        # Another dir is created under dir_same, but it has a name from the
+        # ignored list so it should not affect testing results.
+        self.dir_ignored = os.path.join(self.dir_same, '.hg')
+
         self.caseinsensitive = os.path.normcase('A') == os.path.normcase('a')
         data = 'Contents of file go here.\n'
-        for dir in [self.dir, self.dir_same, self.dir_diff]:
+        for dir in (self.dir, self.dir_same, self.dir_diff, self.dir_ignored):
             shutil.rmtree(dir, True)
             os.mkdir(dir)
             if self.caseinsensitive and dir is self.dir_same:
@@ -64,9 +68,11 @@ class DirCompareTestCase(unittest.TestCase):
         output.close()
 
     def tearDown(self):
-        shutil.rmtree(self.dir)
-        shutil.rmtree(self.dir_same)
-        shutil.rmtree(self.dir_diff)
+        for dir in (self.dir, self.dir_same, self.dir_diff):
+            shutil.rmtree(dir)
+
+    def test_default_ignores(self):
+        self.assertIn('.hg', filecmp.DEFAULT_IGNORES)
 
     def test_cmpfiles(self):
         self.assertTrue(filecmp.cmpfiles(self.dir, self.dir, ['file']) ==
index 603eef0d7e767c36b32c5c8fb12c9b639390d839..1d085517df8b22256331273464ef26cf91b57f91 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -1387,6 +1387,10 @@ Documentation
 - Issue #15250: Document that `filecmp.dircmp()` compares files shallowly. Patch
   contributed by Chris Jerdonek.
 
+- Issue #15442: Expose the default list of directories ignored by
+  `filecmp.dircmp()` as a module attribute, and expand the list to more modern
+  values.
+
 Tests
 -----