1 |
|
---|
2 | replaces_statements = {}
|
---|
3 |
|
---|
4 | for app in APPS:
|
---|
5 | app_migrations_path = os.path.join(DJANGO_PATH, app, "migrations")
|
---|
6 | if not os.path.exists(app_migrations_path):
|
---|
7 | # No migration for this app
|
---|
8 | continue
|
---|
9 |
|
---|
10 | # Listing migration files, and removing them
|
---|
11 | migration_files = []
|
---|
12 | for f in os.listdir(app_migrations_path):
|
---|
13 | filepath = os.path.join(app_migrations_path, f)
|
---|
14 | if f.endswith('.py') and '__init__' not in f:
|
---|
15 | migration_files.append(f)
|
---|
16 | os.unlink(filepath)
|
---|
17 |
|
---|
18 | if len(migration_files) == 0:
|
---|
19 | continue
|
---|
20 |
|
---|
21 | # Generating "replaces" statement
|
---|
22 | replace_statement = " replaces = ["
|
---|
23 | for i, f in enumerate(sorted(migration_files)):
|
---|
24 |
|
---|
25 | migration_name = f[:-3] # Removing .py from name
|
---|
26 |
|
---|
27 | replace_statement += "('%s', '%s'), " % (app, migration_name)
|
---|
28 |
|
---|
29 | replaces_statements[app] = replace_statement + "]"
|
---|
30 |
|
---|
31 | # Calling makemigrations
|
---|
32 | os.chdir(DJANGO_PATH)
|
---|
33 | call(["python", "manage.py", "makemigrations"])
|
---|
34 |
|
---|
35 |
|
---|
36 | reset_migration_names = "0001_initial_reset_%s" % timezone.now().strftime("%Y%m%d%H%M%S")
|
---|
37 |
|
---|
38 | for app in APPS:
|
---|
39 | app_migrations_path = os.path.join(DJANGO_PATH, app, "migrations")
|
---|
40 | if not os.path.exists(app_migrations_path):
|
---|
41 | # No migration for this app
|
---|
42 | continue
|
---|
43 |
|
---|
44 | # Looking for freshly generated 0001_initial.py file
|
---|
45 | for f in os.listdir(app_migrations_path):
|
---|
46 | filepath = os.path.join(app_migrations_path, f)
|
---|
47 | if f == "0001_initial.py":
|
---|
48 |
|
---|
49 | # Reading file
|
---|
50 | with open(filepath) as migration_file:
|
---|
51 | content = migration_file.read()
|
---|
52 |
|
---|
53 | # Removing file
|
---|
54 | os.unlink(filepath)
|
---|
55 |
|
---|
56 | # Writing a new initial migrations (initial_reset)
|
---|
57 | content = content.split('\n')
|
---|
58 | new_content = []
|
---|
59 | for i, line in enumerate(content):
|
---|
60 | # Rename '0001_initial' to new migration name
|
---|
61 | line = line.replace("0001_initial", reset_migration_names)
|
---|
62 | new_content.append(line)
|
---|
63 | # Add 'replaces' statement
|
---|
64 | if line.startswith("class Migration"):
|
---|
65 | new_content.append(replaces_codes[app])
|
---|
66 |
|
---|
67 | with open(os.path.join(app_migrations_path, reset_migration_names + ".py"), "w") as migration_file:
|
---|
68 | migration_file.write('\n'.join(new_content))
|
---|