Apply force exclude logic before symlink resolution (#4015)
This commit is contained in:
parent
66008fda5d
commit
2e4fac9d87
@ -34,7 +34,7 @@
|
|||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
- Add support for single-line format skip with other comments on the same line (#3959)
|
- 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)
|
- Fix a bug in the matching of absolute path names in `--include` (#3976)
|
||||||
|
|
||||||
### Packaging
|
### Packaging
|
||||||
|
@ -682,7 +682,19 @@ def get_sources(
|
|||||||
path = Path(s)
|
path = Path(s)
|
||||||
is_stdin = False
|
is_stdin = False
|
||||||
|
|
||||||
|
# Compare the logic here to the logic in `gen_python_files`.
|
||||||
if is_stdin or path.is_file():
|
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(
|
normalized_path: Optional[str] = normalize_path_maybe_ignore(
|
||||||
path, root, report
|
path, root, report
|
||||||
)
|
)
|
||||||
@ -690,16 +702,6 @@ def get_sources(
|
|||||||
if verbose:
|
if verbose:
|
||||||
out(f'Skipping invalid source: "{normalized_path}"', fg="red")
|
out(f'Skipping invalid source: "{normalized_path}"', fg="red")
|
||||||
continue
|
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:
|
if is_stdin:
|
||||||
path = Path(f"{STDIN_PLACEHOLDER}{str(path)}")
|
path = Path(f"{STDIN_PLACEHOLDER}{str(path)}")
|
||||||
@ -709,6 +711,8 @@ def get_sources(
|
|||||||
):
|
):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
out(f'Found input source: "{normalized_path}"', fg="blue")
|
||||||
sources.add(path)
|
sources.add(path)
|
||||||
elif path.is_dir():
|
elif path.is_dir():
|
||||||
path = root / (path.resolve().relative_to(root))
|
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,
|
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:
|
class TestDeFactoAPI:
|
||||||
"""Test that certain symbols that are commonly used externally keep working.
|
"""Test that certain symbols that are commonly used externally keep working.
|
||||||
|
Loading…
Reference in New Issue
Block a user