| 111 | |
| 112 | @classmethod |
| 113 | def from_config( |
| 114 | cls, |
| 115 | filenames: Iterable[str], |
| 116 | include: str, |
| 117 | exclude: str, |
| 118 | ) -> Classifier: |
| 119 | # on windows we normalize all filenames to use forward slashes |
| 120 | # this makes it easier to filter using the `files:` regex |
| 121 | # this also makes improperly quoted shell-based hooks work better |
| 122 | # see #1173 |
| 123 | if os.altsep == '/' and os.sep == '\\': |
| 124 | filenames = (f.replace(os.sep, os.altsep) for f in filenames) |
| 125 | filenames = filter_by_include_exclude(filenames, include, exclude) |
| 126 | return Classifier(filenames) |
| 127 | |
| 128 | |
| 129 | def _get_skips(environ: MutableMapping[str, str]) -> set[str]: |