Merge pull request #1179 from pre-commit/normalize_paths_to_forward_slashes

Normalize paths on windows to forward slashes
This commit is contained in:
Anthony Sottile 2019-10-19 15:08:56 -07:00 committed by GitHub
commit 1509dc497e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View file

@ -34,6 +34,12 @@ def filter_by_include_exclude(names, include, exclude):
class Classifier(object):
def __init__(self, filenames):
# on windows we normalize all filenames to use forward slashes
# this makes it easier to filter using the `files:` regex
# this also makes improperly quoted shell-based hooks work better
# see #1173
if os.altsep == '/' and os.sep == '\\':
filenames = (f.replace(os.sep, os.altsep) for f in filenames)
self.filenames = [f for f in filenames if os.path.lexists(f)]
self._types_cache = {}

View file

@ -7,6 +7,7 @@ import pipes
import subprocess
import sys
import mock
import pytest
import pre_commit.constants as C
@ -782,7 +783,7 @@ def test_files_running_subdir(repo_with_passing_hook, tempdir_factory):
'--files', 'foo.py',
tempdir_factory=tempdir_factory,
)
assert 'subdir/foo.py'.replace('/', os.sep) in stdout
assert 'subdir/foo.py' in stdout
@pytest.mark.parametrize(
@ -826,6 +827,23 @@ def test_classifier_removes_dne():
assert classifier.filenames == []
def test_classifier_normalizes_filenames_on_windows_to_forward_slashes(tmpdir):
with tmpdir.as_cwd():
tmpdir.join('a/b/c').ensure()
with mock.patch.object(os, 'altsep', '/'):
with mock.patch.object(os, 'sep', '\\'):
classifier = Classifier((r'a\b\c',))
assert classifier.filenames == ['a/b/c']
def test_classifier_does_not_normalize_backslashes_non_windows(tmpdir):
with mock.patch.object(os.path, 'lexists', return_value=True):
with mock.patch.object(os, 'altsep', None):
with mock.patch.object(os, 'sep', '/'):
classifier = Classifier((r'a/b\c',))
assert classifier.filenames == [r'a/b\c']
@pytest.fixture
def some_filenames():
return (