Improve handling of root to get_sources (#3847)
This is a little more type safe and a little cleaner
This commit is contained in:
parent
066aa9210a
commit
6310a405f6
@ -560,9 +560,10 @@ def main( # noqa: C901
|
|||||||
content=code, fast=fast, write_back=write_back, mode=mode, report=report
|
content=code, fast=fast, write_back=write_back, mode=mode, report=report
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
assert root is not None # root is only None if code is not None
|
||||||
try:
|
try:
|
||||||
sources = get_sources(
|
sources = get_sources(
|
||||||
ctx=ctx,
|
root=root,
|
||||||
src=src,
|
src=src,
|
||||||
quiet=quiet,
|
quiet=quiet,
|
||||||
verbose=verbose,
|
verbose=verbose,
|
||||||
@ -615,7 +616,7 @@ def main( # noqa: C901
|
|||||||
|
|
||||||
def get_sources(
|
def get_sources(
|
||||||
*,
|
*,
|
||||||
ctx: click.Context,
|
root: Path,
|
||||||
src: Tuple[str, ...],
|
src: Tuple[str, ...],
|
||||||
quiet: bool,
|
quiet: bool,
|
||||||
verbose: bool,
|
verbose: bool,
|
||||||
@ -628,7 +629,6 @@ def get_sources(
|
|||||||
) -> Set[Path]:
|
) -> Set[Path]:
|
||||||
"""Compute the set of files to be formatted."""
|
"""Compute the set of files to be formatted."""
|
||||||
sources: Set[Path] = set()
|
sources: Set[Path] = set()
|
||||||
root = ctx.obj["root"]
|
|
||||||
|
|
||||||
using_default_exclude = exclude is None
|
using_default_exclude = exclude is None
|
||||||
exclude = re_compile_maybe_verbose(DEFAULT_EXCLUDES) if exclude is None else exclude
|
exclude = re_compile_maybe_verbose(DEFAULT_EXCLUDES) if exclude is None else exclude
|
||||||
@ -645,7 +645,7 @@ def get_sources(
|
|||||||
|
|
||||||
if is_stdin or p.is_file():
|
if is_stdin or p.is_file():
|
||||||
normalized_path: Optional[str] = normalize_path_maybe_ignore(
|
normalized_path: Optional[str] = normalize_path_maybe_ignore(
|
||||||
p, ctx.obj["root"], report
|
p, root, report
|
||||||
)
|
)
|
||||||
if normalized_path is None:
|
if normalized_path is None:
|
||||||
if verbose:
|
if verbose:
|
||||||
@ -674,7 +674,9 @@ def get_sources(
|
|||||||
|
|
||||||
sources.add(p)
|
sources.add(p)
|
||||||
elif p.is_dir():
|
elif p.is_dir():
|
||||||
p = root / normalize_path_maybe_ignore(p, ctx.obj["root"], report)
|
p_relative = normalize_path_maybe_ignore(p, root, report)
|
||||||
|
assert p_relative is not None
|
||||||
|
p = root / p_relative
|
||||||
if verbose:
|
if verbose:
|
||||||
out(f'Found input source directory: "{p}"', fg="blue")
|
out(f'Found input source directory: "{p}"', fg="blue")
|
||||||
|
|
||||||
@ -686,7 +688,7 @@ def get_sources(
|
|||||||
sources.update(
|
sources.update(
|
||||||
gen_python_files(
|
gen_python_files(
|
||||||
p.iterdir(),
|
p.iterdir(),
|
||||||
ctx.obj["root"],
|
root,
|
||||||
include,
|
include,
|
||||||
exclude,
|
exclude,
|
||||||
extend_exclude,
|
extend_exclude,
|
||||||
|
@ -507,13 +507,11 @@ def _mocked_calls() -> bool:
|
|||||||
with patch("pathlib.Path.iterdir", return_value=target_contents), patch(
|
with patch("pathlib.Path.iterdir", return_value=target_contents), patch(
|
||||||
"pathlib.Path.cwd", return_value=working_directory
|
"pathlib.Path.cwd", return_value=working_directory
|
||||||
), patch("pathlib.Path.is_dir", side_effect=mock_n_calls([True])):
|
), patch("pathlib.Path.is_dir", side_effect=mock_n_calls([True])):
|
||||||
ctx = FakeContext()
|
|
||||||
# Note that the root folder (project_root) isn't the folder
|
# Note that the root folder (project_root) isn't the folder
|
||||||
# named "root" (aka working_directory)
|
# named "root" (aka working_directory)
|
||||||
ctx.obj["root"] = project_root
|
|
||||||
report = MagicMock(verbose=True)
|
report = MagicMock(verbose=True)
|
||||||
black.get_sources(
|
black.get_sources(
|
||||||
ctx=ctx,
|
root=project_root,
|
||||||
src=("./child",),
|
src=("./child",),
|
||||||
quiet=False,
|
quiet=False,
|
||||||
verbose=True,
|
verbose=True,
|
||||||
@ -2163,7 +2161,7 @@ def assert_collected_sources(
|
|||||||
src: Sequence[Union[str, Path]],
|
src: Sequence[Union[str, Path]],
|
||||||
expected: Sequence[Union[str, Path]],
|
expected: Sequence[Union[str, Path]],
|
||||||
*,
|
*,
|
||||||
ctx: Optional[FakeContext] = None,
|
root: Optional[Path] = None,
|
||||||
exclude: Optional[str] = None,
|
exclude: Optional[str] = None,
|
||||||
include: Optional[str] = None,
|
include: Optional[str] = None,
|
||||||
extend_exclude: Optional[str] = None,
|
extend_exclude: Optional[str] = None,
|
||||||
@ -2179,7 +2177,7 @@ def assert_collected_sources(
|
|||||||
)
|
)
|
||||||
gs_force_exclude = None if force_exclude is None else compile_pattern(force_exclude)
|
gs_force_exclude = None if force_exclude is None else compile_pattern(force_exclude)
|
||||||
collected = black.get_sources(
|
collected = black.get_sources(
|
||||||
ctx=ctx or FakeContext(),
|
root=root or THIS_DIR,
|
||||||
src=gs_src,
|
src=gs_src,
|
||||||
quiet=False,
|
quiet=False,
|
||||||
verbose=False,
|
verbose=False,
|
||||||
@ -2215,9 +2213,7 @@ def test_gitignore_used_as_default(self) -> None:
|
|||||||
base / "b/.definitely_exclude/a.pyi",
|
base / "b/.definitely_exclude/a.pyi",
|
||||||
]
|
]
|
||||||
src = [base / "b/"]
|
src = [base / "b/"]
|
||||||
ctx = FakeContext()
|
assert_collected_sources(src, expected, root=base, extend_exclude=r"/exclude/")
|
||||||
ctx.obj["root"] = base
|
|
||||||
assert_collected_sources(src, expected, ctx=ctx, extend_exclude=r"/exclude/")
|
|
||||||
|
|
||||||
def test_gitignore_used_on_multiple_sources(self) -> None:
|
def test_gitignore_used_on_multiple_sources(self) -> None:
|
||||||
root = Path(DATA_DIR / "gitignore_used_on_multiple_sources")
|
root = Path(DATA_DIR / "gitignore_used_on_multiple_sources")
|
||||||
@ -2225,10 +2221,8 @@ def test_gitignore_used_on_multiple_sources(self) -> None:
|
|||||||
root / "dir1" / "b.py",
|
root / "dir1" / "b.py",
|
||||||
root / "dir2" / "b.py",
|
root / "dir2" / "b.py",
|
||||||
]
|
]
|
||||||
ctx = FakeContext()
|
|
||||||
ctx.obj["root"] = root
|
|
||||||
src = [root / "dir1", root / "dir2"]
|
src = [root / "dir1", root / "dir2"]
|
||||||
assert_collected_sources(src, expected, ctx=ctx)
|
assert_collected_sources(src, expected, root=root)
|
||||||
|
|
||||||
@patch("black.find_project_root", lambda *args: (THIS_DIR.resolve(), None))
|
@patch("black.find_project_root", lambda *args: (THIS_DIR.resolve(), None))
|
||||||
def test_exclude_for_issue_1572(self) -> None:
|
def test_exclude_for_issue_1572(self) -> None:
|
||||||
@ -2334,9 +2328,7 @@ def test_gitignore_that_ignores_subfolders(self) -> None:
|
|||||||
# If gitignore with */* is in root
|
# If gitignore with */* is in root
|
||||||
root = Path(DATA_DIR / "ignore_subfolders_gitignore_tests" / "subdir")
|
root = Path(DATA_DIR / "ignore_subfolders_gitignore_tests" / "subdir")
|
||||||
expected = [root / "b.py"]
|
expected = [root / "b.py"]
|
||||||
ctx = FakeContext()
|
assert_collected_sources([root], expected, root=root)
|
||||||
ctx.obj["root"] = root
|
|
||||||
assert_collected_sources([root], expected, ctx=ctx)
|
|
||||||
|
|
||||||
# If .gitignore with */* is nested
|
# If .gitignore with */* is nested
|
||||||
root = Path(DATA_DIR / "ignore_subfolders_gitignore_tests")
|
root = Path(DATA_DIR / "ignore_subfolders_gitignore_tests")
|
||||||
@ -2344,17 +2336,13 @@ def test_gitignore_that_ignores_subfolders(self) -> None:
|
|||||||
root / "a.py",
|
root / "a.py",
|
||||||
root / "subdir" / "b.py",
|
root / "subdir" / "b.py",
|
||||||
]
|
]
|
||||||
ctx = FakeContext()
|
assert_collected_sources([root], expected, root=root)
|
||||||
ctx.obj["root"] = root
|
|
||||||
assert_collected_sources([root], expected, ctx=ctx)
|
|
||||||
|
|
||||||
# If command is executed from outer dir
|
# If command is executed from outer dir
|
||||||
root = Path(DATA_DIR / "ignore_subfolders_gitignore_tests")
|
root = Path(DATA_DIR / "ignore_subfolders_gitignore_tests")
|
||||||
target = root / "subdir"
|
target = root / "subdir"
|
||||||
expected = [target / "b.py"]
|
expected = [target / "b.py"]
|
||||||
ctx = FakeContext()
|
assert_collected_sources([target], expected, root=root)
|
||||||
ctx.obj["root"] = root
|
|
||||||
assert_collected_sources([target], expected, ctx=ctx)
|
|
||||||
|
|
||||||
def test_empty_include(self) -> None:
|
def test_empty_include(self) -> None:
|
||||||
path = DATA_DIR / "include_exclude_tests"
|
path = DATA_DIR / "include_exclude_tests"
|
||||||
|
Loading…
Reference in New Issue
Block a user