mirror of https://github.com/python/cpython.git
Fixed #1491431: distutils.filelist.glob_to_re was broken for some edge cases (detailed in the test
This commit is contained in:
parent
91a3b9e4f0
commit
faa6b121fb
|
@ -302,7 +302,7 @@ def findall (dir = os.curdir):
|
||||||
return list
|
return list
|
||||||
|
|
||||||
|
|
||||||
def glob_to_re (pattern):
|
def glob_to_re(pattern):
|
||||||
"""Translate a shell-like glob pattern to a regular expression; return
|
"""Translate a shell-like glob pattern to a regular expression; return
|
||||||
a string containing the regex. Differs from 'fnmatch.translate()' in
|
a string containing the regex. Differs from 'fnmatch.translate()' in
|
||||||
that '*' does not match "special characters" (which are
|
that '*' does not match "special characters" (which are
|
||||||
|
@ -317,7 +317,8 @@ def glob_to_re (pattern):
|
||||||
# character except the special characters.
|
# character except the special characters.
|
||||||
# XXX currently the "special characters" are just slash -- i.e. this is
|
# XXX currently the "special characters" are just slash -- i.e. this is
|
||||||
# Unix-only.
|
# Unix-only.
|
||||||
pattern_re = re.sub(r'(^|[^\\])\.', r'\1[^/]', pattern_re)
|
pattern_re = re.sub(r'((?<!\\)(\\\\)*)\.', r'\1[^/]', pattern_re)
|
||||||
|
|
||||||
return pattern_re
|
return pattern_re
|
||||||
|
|
||||||
# glob_to_re ()
|
# glob_to_re ()
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
"""Tests for distutils.filelist."""
|
||||||
|
import unittest
|
||||||
|
from distutils.filelist import glob_to_re
|
||||||
|
|
||||||
|
class FileListTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_glob_to_re(self):
|
||||||
|
# simple cases
|
||||||
|
self.assertEquals(glob_to_re('foo*'), 'foo[^/]*$')
|
||||||
|
self.assertEquals(glob_to_re('foo?'), 'foo[^/]$')
|
||||||
|
self.assertEquals(glob_to_re('foo??'), 'foo[^/][^/]$')
|
||||||
|
|
||||||
|
# special cases
|
||||||
|
self.assertEquals(glob_to_re(r'foo\\*'), r'foo\\\\[^/]*$')
|
||||||
|
self.assertEquals(glob_to_re(r'foo\\\*'), r'foo\\\\\\[^/]*$')
|
||||||
|
self.assertEquals(glob_to_re('foo????'), r'foo[^/][^/][^/][^/]$')
|
||||||
|
self.assertEquals(glob_to_re(r'foo\\??'), r'foo\\\\[^/][^/]$')
|
||||||
|
|
||||||
|
def test_suite():
|
||||||
|
return unittest.makeSuite(FileListTestCase)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main(defaultTest="test_suite")
|
|
@ -213,6 +213,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.
|
||||||
|
Initial fix by Wayne Davison.
|
||||||
|
|
||||||
- Issue #5693: TestSuite.__iter__ can now be consistently overridden in subclasses.
|
- Issue #5693: TestSuite.__iter__ can now be consistently overridden in subclasses.
|
||||||
|
|
||||||
- Issue #5694: removed spurious test output in Distutils (test_clean).
|
- Issue #5694: removed spurious test output in Distutils (test_clean).
|
||||||
|
|
Loading…
Reference in New Issue