Opened 10 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 , 10 years ago
comment:2 by , 10 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 , 10 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 , 10 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
compilemessages
runcompile_messages
for 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_messages
will 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).