From b58c3695569fc1fd7606e6528a6f0a55db80cf1e Mon Sep 17 00:00:00 2001
From: Samuel Gaist <samuel.gaist@idiap.ch>
Date: Thu, 20 Sep 2018 13:55:55 +0200
Subject: [PATCH] [databases][migration] Split 0004 migration

This migration fails to apply properly when using PostgreSQL.

Separating the data migration and the last field alteration
fixes it.
---
 .../0004_beat_backend_python_1_5_x.py         | 27 --------------
 .../0005_databaseset_data_migration.py        | 36 +++++++++++++++++++
 .../0006_databaseset_hash_unique.py           | 21 +++++++++++
 3 files changed, 57 insertions(+), 27 deletions(-)
 create mode 100644 beat/web/databases/migrations/0005_databaseset_data_migration.py
 create mode 100644 beat/web/databases/migrations/0006_databaseset_hash_unique.py

diff --git a/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py b/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py
index 0701c6b86..35960a975 100644
--- a/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py
+++ b/beat/web/databases/migrations/0004_beat_backend_python_1_5_x.py
@@ -4,26 +4,6 @@ from __future__ import unicode_literals
 
 from django.db import migrations, models
 
-from beat.backend.python.hash import hashDataset
-
-
-def compute_hashes(apps, schema_editor):
-    '''Refreshes each database so datasets/outputs are recreated'''
-
-    DatabaseSet = apps.get_model("databases", "DatabaseSet")
-
-    if DatabaseSet.objects.count():
-        print('')
-
-    for db_set in DatabaseSet.objects.order_by('id'):
-        print("Computing hashes for database set '%s/%d/%s/%s'..." % \
-                (db_set.protocol.database.name, db_set.protocol.database.version,
-                 db_set.protocol.name, db_set.name))
-
-        db_set.hash = hashDataset('%s/%d' % (db_set.protocol.database.name, db_set.protocol.database.version),
-                                  db_set.protocol.name, db_set.name)
-        db_set.save()
-
 
 class Migration(migrations.Migration):
 
@@ -42,11 +22,4 @@ class Migration(migrations.Migration):
             field=models.CharField(default='', max_length=64),
             preserve_default=False,
         ),
-        migrations.RunPython(compute_hashes),
-        migrations.AlterField(
-            model_name='databaseset',
-            name='hash',
-            field=models.CharField(max_length=64, unique=True),
-            preserve_default=False,
-        ),
     ]
diff --git a/beat/web/databases/migrations/0005_databaseset_data_migration.py b/beat/web/databases/migrations/0005_databaseset_data_migration.py
new file mode 100644
index 000000000..44a24f1c8
--- /dev/null
+++ b/beat/web/databases/migrations/0005_databaseset_data_migration.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2018-01-25 09:06
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+from beat.backend.python.hash import hashDataset
+
+
+def compute_hashes(apps, schema_editor):
+    '''Refreshes each database so datasets/outputs are recreated'''
+
+    DatabaseSet = apps.get_model("databases", "DatabaseSet")
+
+    if DatabaseSet.objects.count():
+        print('')
+
+    for db_set in DatabaseSet.objects.order_by('id'):
+        print("Computing hashes for database set '%s/%d/%s/%s'..." % \
+                (db_set.protocol.database.name, db_set.protocol.database.version,
+                 db_set.protocol.name, db_set.name))
+
+        db_set.hash = hashDataset('%s/%d' % (db_set.protocol.database.name, db_set.protocol.database.version),
+                                  db_set.protocol.name, db_set.name)
+        db_set.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('databases', '0004_beat_backend_python_1_5_x'),
+    ]
+
+    operations = [
+        migrations.RunPython(compute_hashes),
+    ]
diff --git a/beat/web/databases/migrations/0006_databaseset_hash_unique.py b/beat/web/databases/migrations/0006_databaseset_hash_unique.py
new file mode 100644
index 000000000..8ce33bade
--- /dev/null
+++ b/beat/web/databases/migrations/0006_databaseset_hash_unique.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.13 on 2018-01-25 09:06
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('databases', '0005_databaseset_data_migration'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='databaseset',
+            name='hash',
+            field=models.CharField(max_length=64, unique=True),
+            preserve_default=False,
+        ),
+    ]
-- 
GitLab