summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2009-04-05 21:49:36 (GMT)
committerTarek Ziadé <ziade.tarek@gmail.com>2009-04-05 21:49:36 (GMT)
commit889b0aa4506d5ea43985865a44562ebd39b3bf00 (patch)
tree301ad6342823c02e8ddbff55a0c3b0dbf9159067
parent965ce8799190b7017a41cd00eede083b342a15fb (diff)
downloadcpython-889b0aa4506d5ea43985865a44562ebd39b3bf00.zip
cpython-889b0aa4506d5ea43985865a44562ebd39b3bf00.tar.gz
cpython-889b0aa4506d5ea43985865a44562ebd39b3bf00.tar.bz2
Merged revisions 71280 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r71280 | tarek.ziade | 2009-04-05 23:44:08 +0200 (Sun, 05 Apr 2009) | 1 line Fixed #1491431: distutils.filelist.glob_to_re was broken for some edge cases (detailed in the test ........
-rw-r--r--Lib/distutils/filelist.py3
-rw-r--r--Lib/distutils/tests/test_filelist.py23
-rw-r--r--Misc/NEWS3
3 files changed, 28 insertions, 1 deletions
diff --git a/Lib/distutils/filelist.py b/Lib/distutils/filelist.py
index a80c71e..58a2bfb 100644
--- a/Lib/distutils/filelist.py
+++ b/Lib/distutils/filelist.py
@@ -289,7 +289,8 @@ def glob_to_re(pattern):
# 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
diff --git a/Lib/distutils/tests/test_filelist.py b/Lib/distutils/tests/test_filelist.py
new file mode 100644
index 0000000..86db557
--- /dev/null
+++ b/Lib/distutils/tests/test_filelist.py
@@ -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")
diff --git a/Misc/NEWS b/Misc/NEWS
index cac482b1..815081b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -327,6 +327,9 @@ Core and Builtins
Library
-------
+- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.
+ Initial fix by Wayne Davison.
+
- Issue #5694: removed spurious test output in Distutils (test_clean).
- Issue #1326077: fix the formatting of SyntaxErrors by the traceback module.