mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-14 21:10:27 -06:00
Normalize paths on windows to forward slashes
This commit is contained in:
@@ -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 = {}
|
||||
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user