mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.7.x] Fixed #22983: Alert when squashing RunPython operations with referred functions.
This commit is contained in:
		| @@ -112,3 +112,9 @@ class Command(BaseCommand): | |||||||
|             self.stdout.write("  the new migration will be used for new installs. Once you are sure") |             self.stdout.write("  the new migration will be used for new installs. Once you are sure") | ||||||
|             self.stdout.write("  all instances of the codebase have applied the migrations you squashed,") |             self.stdout.write("  all instances of the codebase have applied the migrations you squashed,") | ||||||
|             self.stdout.write("  you can delete them.") |             self.stdout.write("  you can delete them.") | ||||||
|  |             if writer.needs_manual_porting: | ||||||
|  |                 self.stdout.write(self.style.MIGRATE_HEADING("Manual porting required")) | ||||||
|  |                 self.stdout.write("  Your migrations contained functions that must be manually copied over,") | ||||||
|  |                 self.stdout.write("  as we could not safely copy their implementation.") | ||||||
|  |                 self.stdout.write("  See the comment at the top of the squashed migration for details.") | ||||||
|  |  | ||||||
|   | |||||||
| @@ -111,6 +111,7 @@ class MigrationWriter(object): | |||||||
|  |  | ||||||
|     def __init__(self, migration): |     def __init__(self, migration): | ||||||
|         self.migration = migration |         self.migration = migration | ||||||
|  |         self.needs_manual_porting = False | ||||||
|  |  | ||||||
|     def as_string(self): |     def as_string(self): | ||||||
|         """ |         """ | ||||||
| @@ -142,9 +143,20 @@ class MigrationWriter(object): | |||||||
|                 dependencies.append("        %s," % self.serialize(dependency)[0]) |                 dependencies.append("        %s," % self.serialize(dependency)[0]) | ||||||
|         items["dependencies"] = "\n".join(dependencies) + "\n" if dependencies else "" |         items["dependencies"] = "\n".join(dependencies) + "\n" if dependencies else "" | ||||||
|  |  | ||||||
|         # Format imports nicely |         # Format imports nicely, swapping imports of functions from migration files | ||||||
|  |         # for comments | ||||||
|  |         migration_imports = set() | ||||||
|  |         for line in list(imports): | ||||||
|  |             if re.match("^import (.*)\.\d+[^\s]*$", line): | ||||||
|  |                 migration_imports.add(line.split("import")[1].strip()) | ||||||
|  |                 imports.remove(line) | ||||||
|  |                 self.needs_manual_porting = True | ||||||
|         imports.discard("from django.db import models") |         imports.discard("from django.db import models") | ||||||
|         items["imports"] = "\n".join(imports) + "\n" if imports else "" |         items["imports"] = "\n".join(imports) + "\n" if imports else "" | ||||||
|  |         if migration_imports: | ||||||
|  |             items["imports"] += "\n\n# Functions from the following migrations need manual copying.\n# Move them and any dependencies into this file, then update the\n# RunPython operations to refer to the local versions:\n# %s" % ( | ||||||
|  |                 "\n# ".join(migration_imports) | ||||||
|  |             ) | ||||||
|  |  | ||||||
|         # If there's a replaces, make a string for it |         # If there's a replaces, make a string for it | ||||||
|         if self.migration.replaces: |         if self.migration.replaces: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user