summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Sottile <asottile@umich.edu>2017-03-16 12:48:14 -0700
committerAnthony Sottile <asottile@umich.edu>2017-03-16 13:44:33 -0700
commit0559e0b43cae92073ffede727bb0963310a81d88 (patch)
tree46b753f404faf4ad9ed96989170159b15cf371fb
parent733a4f053b093d0d061ce780963e936861327c95 (diff)
downloadflake8-0559e0b43cae92073ffede727bb0963310a81d88.tar.gz
Don't apply excludes greedily to subdirs
-rw-r--r--src/flake8/utils.py2
-rw-r--r--tests/unit/test_utils.py15
2 files changed, 16 insertions, 1 deletions
diff --git a/src/flake8/utils.py b/src/flake8/utils.py
index b06b659..4eb6537 100644
--- a/src/flake8/utils.py
+++ b/src/flake8/utils.py
@@ -246,7 +246,7 @@ def filenames_from(arg, predicate=None):
# remove it from the list of sub-directories.
for directory in sub_directories:
joined = os.path.join(root, directory)
- if predicate(directory) or predicate(joined):
+ if predicate(joined):
sub_directories.remove(directory)
for filename in files:
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index d1816bc..79d83cf 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -94,6 +94,21 @@ def test_filenames_from_a_single_file():
assert ['flake8/__init__.py'] == filenames
+def test_filenames_from_exclude_doesnt_exclude_directory_names(tmpdir):
+ """Verify that we don't greedily exclude subdirs."""
+ tmpdir.join('1').ensure_dir().join('dont_return_me.py').ensure()
+ tmpdir.join('2').join('1').ensure_dir().join('return_me.py').ensure()
+ exclude = [tmpdir.join('1').strpath]
+
+ # This acts similar to src.flake8.checker.is_path_excluded
+ def predicate(pth):
+ return utils.fnmatch(os.path.abspath(pth), exclude)
+
+ with tmpdir.as_cwd():
+ filenames = list(utils.filenames_from('.', predicate))
+ assert filenames == [os.path.join('.', '2', '1', 'return_me.py')]
+
+
def test_parameters_for_class_plugin():
"""Verify that we can retrieve the parameters for a class plugin."""
class FakeCheck(object):