mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #24427 -- Stopped writing migration files in dry run mode when merging.
Also added display of migration to stdout when verbosity=3.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							818182b514
						
					
				
				
					commit
					8758a63ddb
				
			| @@ -239,7 +239,18 @@ class Command(BaseCommand): | ||||
|                 }) | ||||
|                 new_migration = subclass("%04i_merge" % (biggest_number + 1), app_label) | ||||
|                 writer = MigrationWriter(new_migration) | ||||
|                 with open(writer.path, "wb") as fh: | ||||
|                     fh.write(writer.as_string()) | ||||
|                 if self.verbosity > 0: | ||||
|                     self.stdout.write("\nCreated new merge migration %s" % writer.path) | ||||
|  | ||||
|                 if not self.dry_run: | ||||
|                     # Write the merge migrations file to the disk | ||||
|                     with open(writer.path, "wb") as fh: | ||||
|                         fh.write(writer.as_string()) | ||||
|                     if self.verbosity > 0: | ||||
|                         self.stdout.write("\nCreated new merge migration %s" % writer.path) | ||||
|                 elif self.verbosity == 3: | ||||
|                     # Alternatively, makemigrations --merge --dry-run --verbosity 3 | ||||
|                     # will output the merge migrations to stdout rather than saving | ||||
|                     # the file to the disk. | ||||
|                     self.stdout.write(self.style.MIGRATE_HEADING( | ||||
|                         "Full merge migrations file '%s':" % writer.filename) + "\n" | ||||
|                     ) | ||||
|                     self.stdout.write("%s\n" % writer.as_string()) | ||||
|   | ||||
| @@ -12,3 +12,7 @@ Bugfixes | ||||
| * Fixed renaming of classes in migrations where renaming a subclass would | ||||
|   cause incorrect state to be recorded for objects that referenced the | ||||
|   superclass (:ticket:`24354`). | ||||
|  | ||||
| * Stopped writing migration files in dry run mode when merging migration | ||||
|   conflicts. When ``makemigrations --merge`` is called with ``verbosity=3`` the | ||||
|   migration file is written to ``stdout`` (:ticket: `24427`). | ||||
|   | ||||
| @@ -620,6 +620,49 @@ class MakeMigrationsTests(MigrationTestBase): | ||||
|         self.assertIn("Branch 0002_conflicting_second", output) | ||||
|         self.assertIn("Created new merge migration", output) | ||||
|  | ||||
|     def test_makemigration_merge_dry_run(self): | ||||
|         """ | ||||
|         Makes sure that makemigrations respects --dry-run option when fixing | ||||
|         migration conflicts (#24427). | ||||
|         """ | ||||
|         out = six.StringIO() | ||||
|         with self.temporary_migration_module(module="migrations.test_migrations_conflict") as migration_dir: | ||||
|             call_command("makemigrations", "migrations", dry_run=True, merge=True, interactive=False, stdout=out) | ||||
|             merge_file = os.path.join(migration_dir, '0003_merge.py') | ||||
|             self.assertFalse(os.path.exists(merge_file)) | ||||
|         output = force_text(out.getvalue()) | ||||
|         self.assertIn("Merging migrations", output) | ||||
|         self.assertIn("Branch 0002_second", output) | ||||
|         self.assertIn("Branch 0002_conflicting_second", output) | ||||
|         self.assertNotIn("Created new merge migration", output) | ||||
|  | ||||
|     def test_makemigration_merge_dry_run_verbosity_3(self): | ||||
|         """ | ||||
|         Makes sure that `makemigrations --merge --dry-run` writes the merge | ||||
|         migration file to stdout with `verbosity == 3` (#24427). | ||||
|         """ | ||||
|         out = six.StringIO() | ||||
|         with self.temporary_migration_module(module="migrations.test_migrations_conflict") as migration_dir: | ||||
|             call_command("makemigrations", "migrations", dry_run=True, merge=True, interactive=False, | ||||
|                          stdout=out, verbosity=3) | ||||
|             merge_file = os.path.join(migration_dir, '0003_merge.py') | ||||
|             self.assertFalse(os.path.exists(merge_file)) | ||||
|         output = force_text(out.getvalue()) | ||||
|         self.assertIn("Merging migrations", output) | ||||
|         self.assertIn("Branch 0002_second", output) | ||||
|         self.assertIn("Branch 0002_conflicting_second", output) | ||||
|         self.assertNotIn("Created new merge migration", output) | ||||
|  | ||||
|         # Additional output caused by verbosity 3 | ||||
|         # The complete merge migration file that would be written | ||||
|         self.assertIn("# -*- coding: utf-8 -*-", output) | ||||
|         self.assertIn("class Migration(migrations.Migration):", output) | ||||
|         self.assertIn("dependencies = [", output) | ||||
|         self.assertIn("('migrations', '0002_second')", output) | ||||
|         self.assertIn("('migrations', '0002_conflicting_second')", output) | ||||
|         self.assertIn("operations = [", output) | ||||
|         self.assertIn("]", output) | ||||
|  | ||||
|     def test_makemigrations_dry_run(self): | ||||
|         """ | ||||
|         Ticket #22676 -- `makemigrations --dry-run` should not ask for defaults. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user