mirror of https://github.com/ansible/ansible.git
fix get_data on case_insensitive fs (#69955)
* fix get_data on case_insensitive fs * implement case-sensitive-forcing versions of various os.path methods that just pass through on case-sensitive systems. * catch broader IOError for py2/py3 compat * optimization: factor out case-insensitive comparison * implement case-sensitive openpull/69962/head
parent
55eb2766ae
commit
05aed52d8e
@ -0,0 +1,2 @@
|
|||||||
|
bugfixes:
|
||||||
|
- collection loader - fix file/module/class confusion issues on case-insensitive filesystems
|
@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# (c) 2020 Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
from ansible.utils.path import cs_exists, cs_isdir, cs_isfile, cs_open
|
||||||
|
|
||||||
|
|
||||||
|
def iter_parent_paths(path):
|
||||||
|
parent = path
|
||||||
|
while True:
|
||||||
|
parent, leaf = os.path.split(parent)
|
||||||
|
if not parent or not leaf:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
yield parent
|
||||||
|
|
||||||
|
|
||||||
|
def test_cs_open():
|
||||||
|
with open(__file__) as fd:
|
||||||
|
with cs_open(__file__) as csfd:
|
||||||
|
assert fd.read() == csfd.read()
|
||||||
|
|
||||||
|
with pytest.raises(IOError):
|
||||||
|
cs_open(__file__.upper())
|
||||||
|
|
||||||
|
|
||||||
|
def test_cs_isfile():
|
||||||
|
assert cs_isfile(__file__)
|
||||||
|
for p in iter_parent_paths(__file__):
|
||||||
|
assert not cs_isfile(p)
|
||||||
|
assert not cs_isfile(__file__.upper())
|
||||||
|
|
||||||
|
|
||||||
|
def test_cs_isdir():
|
||||||
|
assert not cs_isdir(__file__)
|
||||||
|
for p in iter_parent_paths(__file__):
|
||||||
|
assert cs_isdir(p)
|
||||||
|
if p != p.upper():
|
||||||
|
assert not cs_isdir(p.upper())
|
||||||
|
|
||||||
|
|
||||||
|
def test_cs_exists():
|
||||||
|
assert cs_exists(__file__)
|
||||||
|
assert not cs_exists(__file__.upper())
|
||||||
|
for p in iter_parent_paths(__file__):
|
||||||
|
assert cs_exists(p)
|
||||||
|
if p != p.upper():
|
||||||
|
assert not cs_exists(p.upper())
|
Loading…
Reference in New Issue