Opened 11 years ago
Closed 7 years ago
#24384 closed Bug (fixed)
compilemessages shouldn't return with exit code 0 when it fails
| Reported by: | Aymeric Augustin | Owned by: | Claude Paroz |
|---|---|---|---|
| Component: | Internationalization | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
When compilemessages is run on a read-only location, it displays a messages to standard error and terminates with exit code 0. It should have exit code 1.
Patch:
diff --git a/django/core/management/commands/compilemessages.py b/django/core/management/commands/compilemessages.py
index dbadac0..75f3c57 100644
--- a/django/core/management/commands/compilemessages.py
+++ b/django/core/management/commands/compilemessages.py
@@ -108,9 +108,9 @@ class Command(BaseCommand):
# Check writability on first location
if i == 0 and not is_writable(npath(base_path + '.mo')):
- self.stderr.write("The po files under %s are in a seemingly not writable location. "
- "mo files will not be updated/created." % dirpath)
- return
+ raise CommandError("The po files under %s are in a seemingly "
+ "not writable location. mo files will not "
+ "be updated/created." % dirpath)
args = [self.program] + self.program_options + ['-o',
npath(base_path + '.mo'), npath(base_path + '.po')]
With this change, the output is exactly the same, but the exit code reflects the failure and the --traceback option works.
I don't quite have the motivation to write tests for this change :-/
Change History (8)
comment:1 by , 11 years ago
comment:2 by , 11 years ago
We have a problem akin to test discovery here. I think the right solution is to ignore anything outside the current working directory and error if a non-writable location is encountered.
comment:3 by , 11 years ago
See #21732 for the initial use case about non-writable paths.
Ignoring paths outside current directory could be a solution, but might be backwards incompatible.
comment:4 by , 11 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:5 by , 7 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:7 by , 7 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
The reason of the current behaviour is that
compilemessagesruncompile_messagesfor all paths ofsettings.LOCALE_PATHS. The idea was to not stop running the command if only one path is read-only but not the others. When #24159 will be fixed, it's probable thatcompile_messageswill be launched for all apps inINSTALLED_APPS. Then we don't want to fail when some app is read-only (maybe a third-party app in a non-readable location).