Commit c93938b5 authored by Serhiy Storchaka's avatar Serhiy Storchaka Committed by GitHub

bpo-31920: Fixed handling directories as arguments in the ``pygettext`` script. (GH-6259)

Based on patch by Oleg Krasnikov.
parent 827d49f3
...@@ -7,7 +7,7 @@ import textwrap ...@@ -7,7 +7,7 @@ import textwrap
from test.support.script_helper import assert_python_ok from test.support.script_helper import assert_python_ok
from test.test_tools import skip_if_missing, toolsdir 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() skip_if_missing()
...@@ -160,3 +160,27 @@ class Test_pygettext(unittest.TestCase): ...@@ -160,3 +160,27 @@ class Test_pygettext(unittest.TestCase):
"""doc""" """doc"""
''')) '''))
self.assertIn('doc', msgids) 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)
...@@ -853,6 +853,7 @@ Maksim Kozyarchuk ...@@ -853,6 +853,7 @@ Maksim Kozyarchuk
Stefan Krah Stefan Krah
Rolf Krahl Rolf Krahl
Bob Kras Bob Kras
Oleg Krasnikov
Sebastian Kreft Sebastian Kreft
Holger Krekel Holger Krekel
Michael Kremer Michael Kremer
......
Fixed handling directories as arguments in the ``pygettext`` script. Based
on patch by Oleg Krasnikov.
...@@ -259,24 +259,6 @@ def containsAny(str, set): ...@@ -259,24 +259,6 @@ def containsAny(str, set):
return 1 in [c in str for c in 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): def getFilesForName(name):
"""Get a list of module files for a filename, a module or package name, """Get a list of module files for a filename, a module or package name,
or a directory. or a directory.
...@@ -302,7 +284,17 @@ def getFilesForName(name): ...@@ -302,7 +284,17 @@ def getFilesForName(name):
if os.path.isdir(name): if os.path.isdir(name):
# find all python files in directory # find all python files in directory
list = [] 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 return list
elif os.path.exists(name): elif os.path.exists(name):
# a single file # a single file
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment