Fix project config file discovery

Flake8 3.0 was stopping once it found the current directory but the
historical behaviour (that we didn't intend to break) searched past
that (towards root) until it found one of the project/local config
file names that could be read.

Closes #181
This commit is contained in:
Ian Cordasco 2016-07-26 09:32:39 -05:00
parent f82b5d62d0
commit df2fa18a08
No known key found for this signature in database
GPG key ID: 656D3395E4A9791A
5 changed files with 22 additions and 27 deletions

View file

@ -1,5 +1,5 @@
3.0.1 -- 2016-07-25
-------------------
3.0.1 -- 2016-07-25 (unreleased)
--------------------------------
- Fix regression in handling of ``# noqa`` for multiline strings.
(See also `GitLab#177`_)

View file

@ -0,0 +1,9 @@
3.0.2 -- 2016-07-26
-------------------
- Fix local config file discovery. (See also `GitLab#181`_)
.. links
.. _GitLab#181:
https://gitlab.com/pycqa/flake8/issues/181

View file

@ -6,6 +6,7 @@ All of the release notes that have been recorded for Flake8 are organized here
with the newest releases first.
.. toctree::
3.0.2
3.0.1
3.0.0
2.6.2

View file

@ -43,8 +43,6 @@ class ConfigFileFinder(object):
# List of filenames to find in the local/project directory
self.project_filenames = ('setup.cfg', 'tox.ini', self.program_config)
self.local_directory = os.path.abspath(os.curdir)
if not args:
args = ['.']
self.parent = self.tail = os.path.abspath(os.path.commonprefix(args))
@ -72,14 +70,14 @@ class ConfigFileFinder(object):
"""Find and generate all local config files."""
tail = self.tail
parent = self.parent
local_dir = self.local_directory
while tail:
found_config_files = False
while tail and not found_config_files:
for project_filename in self.project_filenames:
filename = os.path.abspath(os.path.join(parent,
project_filename))
yield filename
if parent == local_dir:
break
if os.path.exists(filename):
yield filename
found_config_files = True
(parent, tail) = os.path.split(parent)
def local_config_files(self):
@ -99,7 +97,6 @@ class ConfigFileFinder(object):
return [
filename
for filename in self.generate_possible_local_files()
if os.path.exists(filename)
] + [f for f in self.extra_config_files if exists(f)]
def local_configs(self):

View file

@ -43,27 +43,15 @@ def test_cli_config():
# No arguments, common prefix of abspath('.')
([],
[os.path.abspath('setup.cfg'),
os.path.abspath('tox.ini'),
os.path.abspath('.flake8')]),
os.path.abspath('tox.ini')]),
# Common prefix of "flake8/"
(['flake8/options', 'flake8/'],
[os.path.abspath('flake8/setup.cfg'),
os.path.abspath('flake8/tox.ini'),
os.path.abspath('flake8/.flake8'),
os.path.abspath('setup.cfg'),
os.path.abspath('tox.ini'),
os.path.abspath('.flake8')]),
[os.path.abspath('setup.cfg'),
os.path.abspath('tox.ini')]),
# Common prefix of "flake8/options"
(['flake8/options', 'flake8/options/sub'],
[os.path.abspath('flake8/options/setup.cfg'),
os.path.abspath('flake8/options/tox.ini'),
os.path.abspath('flake8/options/.flake8'),
os.path.abspath('flake8/setup.cfg'),
os.path.abspath('flake8/tox.ini'),
os.path.abspath('flake8/.flake8'),
os.path.abspath('setup.cfg'),
os.path.abspath('tox.ini'),
os.path.abspath('.flake8')]),
[os.path.abspath('setup.cfg'),
os.path.abspath('tox.ini')]),
])
def test_generate_possible_local_files(args, expected):
"""Verify generation of all possible config paths."""