[Python-checkins] r71280 - in python/trunk: Lib/distutils/filelist.py Lib/distutils/tests/test_filelist.py Misc/NEWS

tarek.ziade python-checkins at python.org
Sun Apr 5 23:44:09 CEST 2009


Author: tarek.ziade
Date: Sun Apr 5 23:44:08 2009
New Revision: 71280
Log:
Fixed #1491431: distutils.filelist.glob_to_re was broken for some edge cases (detailed in the test
Added:
 python/trunk/Lib/distutils/tests/test_filelist.py (contents, props changed)
Modified:
 python/trunk/Lib/distutils/filelist.py
 python/trunk/Misc/NEWS
Modified: python/trunk/Lib/distutils/filelist.py
==============================================================================
--- python/trunk/Lib/distutils/filelist.py	(original)
+++ python/trunk/Lib/distutils/filelist.py	Sun Apr 5 23:44:08 2009
@@ -302,7 +302,7 @@
 return list
 
 
-def glob_to_re (pattern):
+def glob_to_re(pattern):
 """Translate a shell-like glob pattern to a regular expression; return
 a string containing the regex. Differs from 'fnmatch.translate()' in
 that '*' does not match "special characters" (which are
@@ -317,7 +317,8 @@
 # character except the special characters.
 # XXX currently the "special characters" are just slash -- i.e. this is
 # Unix-only.
- pattern_re = re.sub(r'(^|[^\\])\.', r'1円[^/]', pattern_re)
+ pattern_re = re.sub(r'((?<!\\)(\\\\)*)\.', r'1円[^/]', pattern_re)
+
 return pattern_re
 
 # glob_to_re ()
Added: python/trunk/Lib/distutils/tests/test_filelist.py
==============================================================================
--- (empty file)
+++ python/trunk/Lib/distutils/tests/test_filelist.py	Sun Apr 5 23:44:08 2009
@@ -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")
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sun Apr 5 23:44:08 2009
@@ -213,6 +213,9 @@
 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 #5694: removed spurious test output in Distutils (test_clean).


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /