]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 71284 via svnmerge from
authorTarek Ziadé <ziade.tarek@gmail.com>
Sun, 5 Apr 2009 21:52:04 +0000 (21:52 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Sun, 5 Apr 2009 21:52:04 +0000 (21:52 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r71284 | tarek.ziade | 2009-04-05 23:49:36 +0200 (Sun, 05 Apr 2009) | 9 lines

  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
  ........
................

Lib/distutils/filelist.py
Lib/distutils/tests/test_filelist.py [new file with mode: 0644]
Misc/NEWS

index a80c71e8c770bfcf528a272d753328af8ff95ad6..58a2bfb108f1c376079d763b1aa9bfe695afaa6d 100644 (file)
@@ -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 (file)
index 0000000..86db557
--- /dev/null
@@ -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")
index 59f9837b5bd72fd43a287e6b76efca51ab7c6385..41f5b780f3f1d2a916e439f3eb80c3f25597c72b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -187,6 +187,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.
+  Initial fix by Wayne Davison.
+
 - Issue #4792: Prevent a segfault in _tkinter by using the
   guaranteed to be safe interp argument given to the PythonCmd in place of
   the Tcl interpreter taken from a PythonCmd_ClientData.