Apply force exclude logic before symlink resolution (#4015)
This commit is contained in:
parent
66008fda5d
commit
2e4fac9d87
@ -34,7 +34,7 @@
|
||||
### Configuration
|
||||
|
||||
- Add support for single-line format skip with other comments on the same line (#3959)
|
||||
|
||||
- Consistently apply force exclusion logic before resolving symlinks (#4015)
|
||||
- Fix a bug in the matching of absolute path names in `--include` (#3976)
|
||||
|
||||
### Packaging
|
||||
|
@ -682,7 +682,19 @@ def get_sources(
|
||||
path = Path(s)
|
||||
is_stdin = False
|
||||
|
||||
# Compare the logic here to the logic in `gen_python_files`.
|
||||
if is_stdin or path.is_file():
|
||||
root_relative_path = path.absolute().relative_to(root).as_posix()
|
||||
|
||||
root_relative_path = "/" + root_relative_path
|
||||
|
||||
# Hard-exclude any files that matches the `--force-exclude` regex.
|
||||
if path_is_excluded(root_relative_path, force_exclude):
|
||||
report.path_ignored(
|
||||
path, "matches the --force-exclude regular expression"
|
||||
)
|
||||
continue
|
||||
|
||||
normalized_path: Optional[str] = normalize_path_maybe_ignore(
|
||||
path, root, report
|
||||
)
|
||||
@ -690,16 +702,6 @@ def get_sources(
|
||||
if verbose:
|
||||
out(f'Skipping invalid source: "{normalized_path}"', fg="red")
|
||||
continue
|
||||
if verbose:
|
||||
out(f'Found input source: "{normalized_path}"', fg="blue")
|
||||
|
||||
normalized_path = "/" + normalized_path
|
||||
# Hard-exclude any files that matches the `--force-exclude` regex.
|
||||
if path_is_excluded(normalized_path, force_exclude):
|
||||
report.path_ignored(
|
||||
path, "matches the --force-exclude regular expression"
|
||||
)
|
||||
continue
|
||||
|
||||
if is_stdin:
|
||||
path = Path(f"{STDIN_PLACEHOLDER}{str(path)}")
|
||||
@ -709,6 +711,8 @@ def get_sources(
|
||||
):
|
||||
continue
|
||||
|
||||
if verbose:
|
||||
out(f'Found input source: "{normalized_path}"', fg="blue")
|
||||
sources.add(path)
|
||||
elif path.is_dir():
|
||||
path = root / (path.resolve().relative_to(root))
|
||||
|
@ -2637,6 +2637,23 @@ def test_get_sources_with_stdin_filename_and_force_exclude(self) -> None:
|
||||
stdin_filename=stdin_filename,
|
||||
)
|
||||
|
||||
@patch("black.find_project_root", lambda *args: (THIS_DIR.resolve(), None))
|
||||
def test_get_sources_with_stdin_filename_and_force_exclude_and_symlink(
|
||||
self,
|
||||
) -> None:
|
||||
# Force exclude should exclude a symlink based on the symlink, not its target
|
||||
path = THIS_DIR / "data" / "include_exclude_tests"
|
||||
stdin_filename = str(path / "symlink.py")
|
||||
expected = [f"__BLACK_STDIN_FILENAME__{stdin_filename}"]
|
||||
target = path / "b/exclude/a.py"
|
||||
with patch("pathlib.Path.resolve", return_value=target):
|
||||
assert_collected_sources(
|
||||
src=["-"],
|
||||
expected=expected,
|
||||
force_exclude=r"exclude/a\.py",
|
||||
stdin_filename=stdin_filename,
|
||||
)
|
||||
|
||||
|
||||
class TestDeFactoAPI:
|
||||
"""Test that certain symbols that are commonly used externally keep working.
|
||||
|
Loading…
Reference in New Issue
Block a user