-
Notifications
You must be signed in to change notification settings - Fork 49
Description
I am currently investigating a problem in the black formatter which uses pathspec to figure out ignored files by parsing .gitignore files. black uses this library and tries to check if directories are ignored before checking their contents.
It boils down to this minimum example:
from pathlib import Path
import pathspec
spec = pathspec.PathSpec.from_lines('gitwildmatch', """
/important/
""".splitlines())
assert spec.match_file("important/bar.log")
assert spec.match_file("/important/")
assert spec.match_file("important/")
assert spec.match_file("important") # does not match
assert spec.match_file(Path("important/")) # does not match as pathlib removes trailing slashIt matches the file important/bar.log as expected, however, it does not match the folder when it has no trailing slash.
This becomes especially problematic when using Path objects, as the trailing slash is removed by pathlib.
I don't know where this needs to be fixed. What do you think? Is black using it wrong? Should the match_file() method check if the given Path object is a directory and add the trailing slash on its own before checking?
It would certainly be possible to implement a workaround in black and check with Path.is_dir(), convert to str and append the slash...
FYI, the place where the check happens in black is here. relative_path is a pathlib.Path and can be a directory.