diff options
| author | Jacob Walls <jacobtylerwalls@gmail.com> | 2021-08-06 09:59:53 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-01-10 18:49:57 +0100 |
| commit | 6f78cb6b13fca2512f80dcd2bce7838bf33b70f0 (patch) | |
| tree | cb7599bf8851b490f3423a862867d93b0a7684fc /django | |
| parent | 274771df9133542df048cc104c19e7756f9d3715 (diff) | |
Fixed #29026 -- Added --scriptable option to makemigrations.
Diffstat (limited to 'django')
| -rw-r--r-- | django/core/management/commands/makemigrations.py | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/django/core/management/commands/makemigrations.py b/django/core/management/commands/makemigrations.py index 4d26bfe278..4349f33a61 100644 --- a/django/core/management/commands/makemigrations.py +++ b/django/core/management/commands/makemigrations.py @@ -57,9 +57,20 @@ class Command(BaseCommand): '--check', action='store_true', dest='check_changes', help='Exit with a non-zero status if model changes are missing migrations.', ) + parser.add_argument( + '--scriptable', action='store_true', dest='scriptable', + help=( + 'Divert log output and input prompts to stderr, writing only ' + 'paths of generated migration files to stdout.' + ), + ) + + @property + def log_output(self): + return self.stderr if self.scriptable else self.stdout def log(self, msg): - self.stdout.write(msg) + self.log_output.write(msg) @no_translations def handle(self, *app_labels, **options): @@ -73,6 +84,10 @@ class Command(BaseCommand): raise CommandError('The migration name must be a valid Python identifier.') self.include_header = options['include_header'] check_changes = options['check_changes'] + self.scriptable = options['scriptable'] + # If logs and prompts are diverted to stderr, remove the ERROR style. + if self.scriptable: + self.stderr.style_func = None # Make sure the app they asked for exists app_labels = set(app_labels) @@ -147,7 +162,7 @@ class Command(BaseCommand): questioner = InteractiveMigrationQuestioner( specified_apps=app_labels, dry_run=self.dry_run, - prompt_output=self.stdout, + prompt_output=self.log_output, ) else: questioner = NonInteractiveMigrationQuestioner( @@ -226,6 +241,8 @@ class Command(BaseCommand): self.log(' %s\n' % self.style.MIGRATE_LABEL(migration_string)) for operation in migration.operations: self.log(' - %s' % operation.describe()) + if self.scriptable: + self.stdout.write(migration_string) if not self.dry_run: # Write the migrations file to the disk. migrations_directory = os.path.dirname(writer.path) @@ -254,7 +271,7 @@ class Command(BaseCommand): if it's safe; otherwise, advises on how to fix it. """ if self.interactive: - questioner = InteractiveMigrationQuestioner(prompt_output=self.stdout) + questioner = InteractiveMigrationQuestioner(prompt_output=self.log_output) else: questioner = MigrationQuestioner(defaults={'ask_merge': True}) @@ -327,6 +344,8 @@ class Command(BaseCommand): fh.write(writer.as_string()) if self.verbosity > 0: self.log('\nCreated new merge migration %s' % writer.path) + if self.scriptable: + self.stdout.write(writer.path) elif self.verbosity == 3: # Alternatively, makemigrations --merge --dry-run --verbosity 3 # will log the merge migrations rather than saving the file |
