mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-31 07:04:12 +00:00 
			
		
		
		
	Add rule for django south inconsistent migrations
This commit is contained in:
		| @@ -153,6 +153,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: | ||||
| * `cpp11` – add missing `-std=c++11` to `g++` or `clang++`; | ||||
| * `dry` – fix repetitions like "git git push"; | ||||
| * `django_south_ghost` – adds `--delete-ghost-migrations` to failed because ghosts django south migration; | ||||
| * `django_south_merge` – adds `--merge` to inconsistent django south migration; | ||||
| * `fix_alt_space` – replaces Alt+Space with Space character; | ||||
| * `git_add` – fix *"Did you forget to 'git add'?"*; | ||||
| * `git_checkout` – creates the branch before checking-out; | ||||
|   | ||||
| @@ -27,13 +27,13 @@ def stderr(): | ||||
| south.exceptions.GhostMigrations:  | ||||
|  | ||||
|  ! These migrations are in the database but not on disk: | ||||
|     <tracker: 0033_auto__...> | ||||
|     <tracker: 0034_fill_...> | ||||
|     <tracker: 0035_rename_...> | ||||
|     <qm_auth: 0003_add_...> | ||||
|     <qm_auth: 0004_denormalize_...> | ||||
|     <tracker: 0033_auto....> | ||||
|     <tracker: 0034_fill...> | ||||
|     <app1: 0033_auto__...> | ||||
|     <app1: 0034_fill_...> | ||||
|     <app1: 0035_rename_...> | ||||
|     <app2: 0003_add_...> | ||||
|     <app2: 0004_denormalize_...> | ||||
|     <app1: 0033_auto....> | ||||
|     <app1: 0034_fill...> | ||||
|  ! I'm not trusting myself; either fix this yourself by fiddling | ||||
|  ! with the south_migrationhistory table, or pass --delete-ghost-migrations | ||||
|  ! to South to have it delete ALL of these records (this may not be good). | ||||
|   | ||||
							
								
								
									
										43
									
								
								tests/rules/test_django_south_merge.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								tests/rules/test_django_south_merge.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| import pytest | ||||
| from thefuck.rules.django_south_merge import match, get_new_command | ||||
| from tests.utils import Command | ||||
|  | ||||
|  | ||||
| @pytest.fixture | ||||
| def stderr(): | ||||
|     return '''Running migrations for app: | ||||
|  ! Migration app:0003_auto... should not have been applied before app:0002_auto__add_field_query_due_date_ but was. | ||||
| Traceback (most recent call last): | ||||
|   File "/home/nvbn/work/.../bin/python", line 42, in <module> | ||||
|     exec(compile(__file__f.read(), __file__, "exec")) | ||||
|   File "/home/nvbn/work/.../app/manage.py", line 34, in <module> | ||||
|     execute_from_command_line(sys.argv) | ||||
|   File "/home/nvbn/work/.../lib/django/core/management/__init__.py", line 443, in execute_from_command_line | ||||
|     utility.execute() | ||||
|   File "/home/nvbn/work/.../lib/django/core/management/__init__.py", line 382, in execute | ||||
|     self.fetch_command(subcommand).run_from_argv(self.argv) | ||||
|   File "/home/nvbn/work/.../lib/django/core/management/base.py", line 196, in run_from_argv | ||||
|     self.execute(*args, **options.__dict__) | ||||
|   File "/home/nvbn/work/.../lib/django/core/management/base.py", line 232, in execute | ||||
|     output = self.handle(*args, **options) | ||||
|   File "/home/nvbn/work/.../app/lib/south/management/commands/migrate.py", line 108, in handle | ||||
|     ignore_ghosts = ignore_ghosts, | ||||
|   File "/home/nvbn/work/.../app/lib/south/migration/__init__.py", line 207, in migrate_app | ||||
|     raise exceptions.InconsistentMigrationHistory(problems) | ||||
| south.exceptions.InconsistentMigrationHistory: Inconsistent migration history | ||||
| The following options are available: | ||||
|     --merge: will just attempt the migration ignoring any potential dependency conflicts. | ||||
| ''' | ||||
|  | ||||
|  | ||||
| def test_match(stderr): | ||||
|     assert match(Command('./manage.py migrate', stderr=stderr), None) | ||||
|     assert match(Command('python manage.py migrate', stderr=stderr), None) | ||||
|     assert not match(Command('./manage.py migrate'), None) | ||||
|     assert not match(Command('app migrate', stderr=stderr), None) | ||||
|     assert not match(Command('./manage.py test', stderr=stderr), None) | ||||
|  | ||||
|  | ||||
| def test_get_new_command(): | ||||
|     assert get_new_command(Command('./manage.py migrate auth'), None) \ | ||||
|            == './manage.py migrate auth --merge' | ||||
							
								
								
									
										8
									
								
								thefuck/rules/django_south_merge.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								thefuck/rules/django_south_merge.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| def match(command, settings): | ||||
|     return 'manage.py' in command.script and \ | ||||
|            'migrate' in command.script \ | ||||
|            and '--merge: will just attempt the migration' in command.stderr | ||||
|  | ||||
|  | ||||
| def get_new_command(command, settings): | ||||
|     return u'{} --merge'.format(command.script) | ||||
		Reference in New Issue
	
	Block a user