Fixed #31692 -- Prevented unneeded .po file compilation.

Thanks Nick Pope and Simon Charette for the reviews.
This commit is contained in:
Claude Paroz 2020-06-19 10:26:26 +02:00 committed by Mariusz Felisiak
parent ed0a040773
commit e62d55a4fe
2 changed files with 22 additions and 2 deletions

View File

@ -122,10 +122,20 @@ class Command(BaseCommand):
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = []
for i, (dirpath, f) in enumerate(locations):
if self.verbosity > 0:
self.stdout.write('processing file %s in %s' % (f, dirpath))
po_path = Path(dirpath) / f
mo_path = po_path.with_suffix('.mo')
try:
if mo_path.stat().st_mtime >= po_path.stat().st_mtime:
if self.verbosity > 0:
self.stdout.write(
'File “%s” is already compiled and up to date.'
% po_path
)
continue
except FileNotFoundError:
pass
if self.verbosity > 0:
self.stdout.write('processing file %s in %s' % (f, dirpath))
if has_bom(po_path):
self.stderr.write(

View File

@ -49,6 +49,8 @@ class PoFileTests(MessageCompilationTests):
# Put file in read-only mode.
old_mode = mo_file_en.stat().st_mode
mo_file_en.chmod(stat.S_IREAD)
# Ensure .po file is more recent than .mo file.
mo_file_en.with_suffix('.po').touch()
try:
with self.assertRaisesMessage(CommandError, 'compilemessages generated one or more errors.'):
call_command('compilemessages', locale=['en'], stderr=err_buffer, verbosity=0)
@ -56,6 +58,14 @@ class PoFileTests(MessageCompilationTests):
finally:
mo_file_en.chmod(old_mode)
def test_no_compile_when_unneeded(self):
mo_file_en = Path(self.MO_FILE_EN)
mo_file_en.touch()
stdout = StringIO()
call_command('compilemessages', locale=['en'], stdout=stdout, verbosity=1)
msg = '%s” is already compiled and up to date.' % mo_file_en.with_suffix('.po')
self.assertIn(msg, stdout.getvalue())
class PoFileContentsTests(MessageCompilationTests):
# Ticket #11240