diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py
index 2c6e171..82eacdb 100755
a
|
b
|
def copy_plural_forms(msgs, locale, domain, verbosity):
|
115 | 115 | |
116 | 116 | def make_messages(locale=None, domain='django', verbosity='1', all=False, |
117 | 117 | extensions=None, symlinks=False, ignore_patterns=[], no_wrap=False, |
118 | | no_obsolete=False): |
| 118 | no_obsolete=False, keep_pot=False): |
119 | 119 | """ |
120 | 120 | Uses the locale directory from the Django SVN tree or an application/ |
121 | 121 | project to process all |
… |
… |
def make_messages(locale=None, domain='django', verbosity='1', all=False,
|
201 | 201 | msgs, errors = _popen(cmd) |
202 | 202 | if errors: |
203 | 203 | os.unlink(os.path.join(dirpath, thefile)) |
204 | | if os.path.exists(potfile): |
| 204 | if os.path.exists(potfile) and not keep_pot: |
205 | 205 | os.unlink(potfile) |
206 | 206 | raise CommandError( |
207 | 207 | "errors happened while running xgettext on %s\n%s" % |
… |
… |
def make_messages(locale=None, domain='django', verbosity='1', all=False,
|
248 | 248 | if errors: |
249 | 249 | if thefile != file: |
250 | 250 | os.unlink(os.path.join(dirpath, thefile)) |
251 | | if os.path.exists(potfile): |
| 251 | if os.path.exists(potfile) and not keep_pot: |
252 | 252 | os.unlink(potfile) |
253 | 253 | raise CommandError( |
254 | 254 | "errors happened while running xgettext on %s\n%s" % |
… |
… |
def make_messages(locale=None, domain='django', verbosity='1', all=False,
|
275 | 275 | msgs, errors = _popen('msguniq %s --to-code=utf-8 "%s"' % |
276 | 276 | (wrap, potfile)) |
277 | 277 | if errors: |
278 | | os.unlink(potfile) |
| 278 | if not keep_pot: |
| 279 | os.unlink(potfile) |
279 | 280 | raise CommandError( |
280 | 281 | "errors happened while running msguniq\n%s" % errors) |
281 | 282 | if os.path.exists(pofile): |
… |
… |
def make_messages(locale=None, domain='django', verbosity='1', all=False,
|
287 | 288 | msgs, errors = _popen('msgmerge %s -q "%s" "%s"' % |
288 | 289 | (wrap, pofile, potfile)) |
289 | 290 | if errors: |
290 | | os.unlink(potfile) |
| 291 | if not keep_pot: |
| 292 | os.unlink(potfile) |
291 | 293 | raise CommandError( |
292 | 294 | "errors happened while running msgmerge\n%s" % errors) |
293 | 295 | elif not invoked_for_django: |
… |
… |
def make_messages(locale=None, domain='django', verbosity='1', all=False,
|
299 | 301 | f.write(msgs) |
300 | 302 | finally: |
301 | 303 | f.close() |
302 | | os.unlink(potfile) |
| 304 | if not keep_pot: |
| 305 | os.unlink(potfile) |
303 | 306 | if no_obsolete: |
304 | 307 | msgs, errors = _popen('msgattrib %s -o "%s" --no-obsolete "%s"' % |
305 | 308 | (wrap, pofile, pofile)) |
… |
… |
class Command(NoArgsCommand):
|
329 | 332 | default=False, help="Don't break long message lines into several lines"), |
330 | 333 | make_option('--no-obsolete', action='store_true', dest='no_obsolete', |
331 | 334 | default=False, help="Remove obsolete message strings"), |
| 335 | make_option('--keep-pot', action='store_true', dest='keep_pot', |
| 336 | default=False, help="Keep .pot file after making messages. Useful when debugging."), |
| 337 | |
332 | 338 | ) |
333 | 339 | help = ( "Runs over the entire source tree of the current directory and " |
334 | 340 | "pulls out all strings marked for translation. It creates (or updates) a message " |
… |
… |
class Command(NoArgsCommand):
|
352 | 358 | ignore_patterns = list(set(ignore_patterns)) |
353 | 359 | no_wrap = options.get('no_wrap') |
354 | 360 | no_obsolete = options.get('no_obsolete') |
| 361 | keep_pot = options.get('keep_pot') |
355 | 362 | if domain == 'djangojs': |
356 | 363 | extensions = handle_extensions(extensions or ['js']) |
357 | 364 | else: |
… |
… |
class Command(NoArgsCommand):
|
361 | 368 | sys.stdout.write('examining files with the extensions: %s\n' |
362 | 369 | % get_text_list(list(extensions), 'and')) |
363 | 370 | |
364 | | make_messages(locale, domain, verbosity, process_all, extensions, symlinks, ignore_patterns, no_wrap, no_obsolete) |
| 371 | make_messages(locale, domain, verbosity, process_all, extensions, symlinks, ignore_patterns, no_wrap, no_obsolete, keep_pot) |
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index c07b61c..0dfd325 100755
a
|
b
|
Use the ``--no-default-ignore`` option to disable the default values of
|
475 | 475 | Use the ``--no-wrap`` option to disable breaking long message lines into |
476 | 476 | several lines in language files. |
477 | 477 | |
| 478 | .. django-admin-option:: --keep-pot |
| 479 | |
| 480 | .. versionadded:: 1.4 |
| 481 | |
| 482 | Use the ``--keep-pot`` option to prevent django from deleting the temporary .pot file |
| 483 | it generates before creating the .po file. This is useful for debugging errors which |
| 484 | may prevent the final language files from being created. |
| 485 | |
478 | 486 | reset <appname appname ...> |
479 | 487 | --------------------------- |
480 | 488 | |
diff --git a/tests/regressiontests/i18n/commands/extraction.py b/tests/regressiontests/i18n/commands/extraction.py
index 4f47634..e380bfc 100755
a
|
b
|
class NoWrapExtractorTests(ExtractorTests):
|
183 | 183 | self.assertTrue(os.path.exists(self.PO_FILE)) |
184 | 184 | po_contents = open(self.PO_FILE, 'r').read() |
185 | 185 | self.assertMsgId('""\n"This literal should also be included wrapped or not wrapped depending on the "\n"use of the --no-wrap option."', po_contents, use_quotes=False) |
| 186 | |
| 187 | class KeepPotFileExtractorTests(ExtractorTests): |
| 188 | |
| 189 | def tearDown(self): |
| 190 | POT_FILE = self.PO_FILE + 't' |
| 191 | super(KeepPotFileExtractorTests, self).tearDown() |
| 192 | os.chdir(self.test_dir) |
| 193 | try: |
| 194 | os.unlink(POT_FILE) |
| 195 | except OSError: |
| 196 | pass |
| 197 | os.chdir(self._cwd) |
| 198 | |
| 199 | def test_keep_pot_disabled_by_default(self): |
| 200 | POT_FILE = self.PO_FILE + 't' |
| 201 | os.chdir(self.test_dir) |
| 202 | management.call_command('makemessages', locale=LOCALE, verbosity=0) |
| 203 | self.assertFalse(os.path.exists(POT_FILE)) |
| 204 | |
| 205 | def test_keep_pot_enabled(self): |
| 206 | POT_FILE = self.PO_FILE + 't' |
| 207 | os.chdir(self.test_dir) |
| 208 | management.call_command('makemessages', locale=LOCALE, verbosity=0, keep_pot=True) |
| 209 | self.assertTrue(os.path.exists(POT_FILE)) |
| 210 | |