]> granicus.if.org Git - python/commitdiff
bpo-31920: Fixed handling directories as arguments in the ``pygettext`` script. ...
authorSerhiy Storchaka <storchaka@gmail.com>
Mon, 9 Apr 2018 17:09:17 +0000 (20:09 +0300)
committerGitHub <noreply@github.com>
Mon, 9 Apr 2018 17:09:17 +0000 (20:09 +0300)
Based on patch by Oleg Krasnikov.

Lib/test/test_tools/test_i18n.py
Misc/ACKS
Misc/NEWS.d/next/Tools-Demos/2018-03-26-18-54-24.bpo-31920.u_WKsT.rst [new file with mode: 0644]
Tools/i18n/pygettext.py

index 3c8be27a57b4cf7ee0ee43d6f4d507e7b148afcf..56a273429898abb4acf22c78357548865e53cf17 100644 (file)
@@ -7,7 +7,7 @@ import textwrap
 
 from test.support.script_helper import assert_python_ok
 from test.test_tools import skip_if_missing, toolsdir
-from test.support import temp_cwd
+from test.support import temp_cwd, temp_dir
 
 
 skip_if_missing()
@@ -160,3 +160,27 @@ class Test_pygettext(unittest.TestCase):
             """doc"""
         '''))
         self.assertIn('doc', msgids)
+
+    def test_files_list(self):
+        """Make sure the directories are inspected for source files
+           bpo-31920
+        """
+        text1 = 'Text to translate1'
+        text2 = 'Text to translate2'
+        text3 = 'Text to ignore'
+        with temp_cwd(None), temp_dir(None) as sdir:
+            os.mkdir(os.path.join(sdir, 'pypkg'))
+            with open(os.path.join(sdir, 'pypkg', 'pymod.py'), 'w') as sfile:
+                sfile.write(f'_({text1!r})')
+            os.mkdir(os.path.join(sdir, 'pkg.py'))
+            with open(os.path.join(sdir, 'pkg.py', 'pymod2.py'), 'w') as sfile:
+                sfile.write(f'_({text2!r})')
+            os.mkdir(os.path.join(sdir, 'CVS'))
+            with open(os.path.join(sdir, 'CVS', 'pymod3.py'), 'w') as sfile:
+                sfile.write(f'_({text3!r})')
+            assert_python_ok(self.script, sdir)
+            with open('messages.pot') as fp:
+                data = fp.read()
+            self.assertIn(f'msgid "{text1}"', data)
+            self.assertIn(f'msgid "{text2}"', data)
+            self.assertNotIn(text3, data)
index 8b2931f0bd35ef439fad39f6a6493d9ac6941881..13b88b5a78106a7f1b39155c4695f60f44d446a6 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -853,6 +853,7 @@ Maksim Kozyarchuk
 Stefan Krah
 Rolf Krahl
 Bob Kras
+Oleg Krasnikov
 Sebastian Kreft
 Holger Krekel
 Michael Kremer
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-03-26-18-54-24.bpo-31920.u_WKsT.rst b/Misc/NEWS.d/next/Tools-Demos/2018-03-26-18-54-24.bpo-31920.u_WKsT.rst
new file mode 100644 (file)
index 0000000..39c694b
--- /dev/null
@@ -0,0 +1,2 @@
+Fixed handling directories as arguments in the ``pygettext`` script. Based
+on patch by Oleg Krasnikov.
index 0f0395a4fcab6c71a23dc7093f0d731bc101004f..13d7a649aec42e5d2dc61ce8db6a75f255a49eda 100755 (executable)
@@ -259,24 +259,6 @@ def containsAny(str, set):
     return 1 in [c in str for c in set]
 
 
-def _visit_pyfiles(list, dirname, names):
-    """Helper for getFilesForName()."""
-    # get extension for python source files
-    if '_py_ext' not in globals():
-        global _py_ext
-        _py_ext = importlib.machinery.SOURCE_SUFFIXES[0]
-
-    # don't recurse into CVS directories
-    if 'CVS' in names:
-        names.remove('CVS')
-
-    # add all *.py files to list
-    list.extend(
-        [os.path.join(dirname, file) for file in names
-         if os.path.splitext(file)[1] == _py_ext]
-        )
-
-
 def getFilesForName(name):
     """Get a list of module files for a filename, a module or package name,
     or a directory.
@@ -302,7 +284,17 @@ def getFilesForName(name):
     if os.path.isdir(name):
         # find all python files in directory
         list = []
-        os.walk(name, _visit_pyfiles, list)
+        # get extension for python source files
+        _py_ext = importlib.machinery.SOURCE_SUFFIXES[0]
+        for root, dirs, files in os.walk(name):
+            # don't recurse into CVS directories
+            if 'CVS' in dirs:
+                dirs.remove('CVS')
+            # add all *.py files to list
+            list.extend(
+                [os.path.join(root, file) for file in files
+                 if os.path.splitext(file)[1] == _py_ext]
+                )
         return list
     elif os.path.exists(name):
         # a single file