changeset 307:b503430e963a

Import bugs_field_usage and remove duplicates
author Sylvain Beucler <beuc@beuc.net>
date Sun, 15 Aug 2010 14:36:26 +0200
parents 7ad40470b2cb
children 006f6c019bc8
files migrate_old_savane.sql savane/tracker/models.py
diffstat 2 files changed, 58 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/migrate_old_savane.sql
+++ b/migrate_old_savane.sql
@@ -532,13 +532,64 @@
     FROM_UNIXTIME(IF(custom_df5<0,0,custom_df5))
     FROM savane_old.bugs;
 
-TRUNCATE tracker_field;
--- id <- bug_field_id
+-- We're merging all the *_field tables, so we need to assign new ids
+CREATE TEMPORARY TABLE conv_field_ids (
+  new INT auto_increment PRIMARY KEY,
+  tracker_id VARCHAR(7), old INT,
+  INDEX(tracker_id), INDEX(old));
+INSERT INTO conv_field_ids (tracker_id, old)
+        SELECT 'bugs',    bug_field_id FROM savane_old.bugs_field
+  UNION SELECT 'patch',   bug_field_id FROM savane_old.patch_field
+  UNION SELECT 'support', bug_field_id FROM savane_old.patch_field
+  UNION SELECT 'task',    bug_field_id FROM savane_old.patch_field;
+
+-- id <- conv_field_ids.new  (duplicates in savane_old.*_field tables)
 -- name <- field_name
 -- tracker_id <- 'bugs'
+TRUNCATE tracker_field;
+INSERT INTO tracker_field
+    (id, tracker_id, name, display_type, display_size, label,
+     description, scope, required, empty_ok, keep_history, special, custom)
+  SELECT
+      conv_field_ids.new, 'bugs', field_name, display_type, display_size, label,
+      description, scope, required, empty_ok, keep_history, special, custom
+    FROM savane_old.bugs_field JOIN conv_field_ids
+      ON (bug_field_id = old AND tracker_id = 'bugs');
 INSERT INTO tracker_field
     (id, tracker_id, name, display_type, display_size, label,
-    description, scope, required, empty_ok, keep_history, special, custom)
-  SELECT bug_field_id, 'bugs', field_name, display_type, display_size, label,
+     description, scope, required, empty_ok, keep_history, special, custom)
+  SELECT
+      conv_field_ids.new, 'patch', field_name, display_type, display_size, label,
       description, scope, required, empty_ok, keep_history, special, custom
-    FROM savane_old.bugs_field;
+    FROM savane_old.patch_field JOIN conv_field_ids
+      ON (bug_field_id = old AND tracker_id = 'patch');
+
+-- Get rid of duplicates (old mysql/php/savane bug?)
+-- It only affected group_id=100, maybe the installation was done
+-- twice or something.
+-- Give priority to the last one.
+-- Need to create a real table - a temporary one has issues with being "reopened" in joins
+CREATE TABLE temp_bugs_field_usage AS SELECT * FROM savane_old.bugs_field_usage;
+ALTER TABLE temp_bugs_field_usage ADD (id INT auto_increment PRIMARY KEY);
+DELETE FROM temp_bugs_field_usage
+  WHERE id IN (
+    SELECT id FROM (
+      SELECT B.id FROM temp_bugs_field_usage A, temp_bugs_field_usage B
+        WHERE A.id > B.id
+          AND A.bug_field_id = B.bug_field_id AND A.group_id = B.group_id
+      ) AS temp
+    );
+-- id <- <auto>
+-- field_id <- bug_field_id
+TRUNCATE tracker_fieldusage;
+INSERT INTO tracker_fieldusage
+    (field_id, group_id, use_it, show_on_add, show_on_add_members, place,
+     custom_label, custom_description, custom_display_size, custom_empty_ok,
+     custom_keep_history, transition_default_auth)
+  SELECT
+      conv_field_ids.new, group_id, use_it, show_on_add, show_on_add_members, place,
+      custom_label, custom_description, custom_display_size, custom_empty_ok,
+      IFNULL(custom_keep_history, 0), transition_default_auth
+   FROM temp_bugs_field_usage JOIN conv_field_ids
+      ON (bug_field_id = old AND tracker_id = 'bugs');
+DROP TABLE temp_bugs_field_usage;
--- a/savane/tracker/models.py
+++ b/savane/tracker/models.py
@@ -183,7 +183,7 @@
     Field configuration for each group
     """
     class Meta:
-        unique_together = (('bug_field', 'group'),)
+        unique_together = (('field', 'group'),)
 
     TRANSITION_DEFAULT_AUTH_CHOICES = (('', _('undefined')),
                                        ('A', _('allowed')),
@@ -195,7 +195,7 @@
     CUSTOM_EMPTY_OK_CHOICES = (('0', _('mandatory only if it was presented to the original submitter')),
                                ('1', _('optional (empty values are accepted)')),
                                ('3', _('mandatory')),)
-    bug_field = models.ForeignKey('Field')
+    field = models.ForeignKey('Field')
     group = models.ForeignKey(auth_models.Group)
     use_it = models.BooleanField(_("used"))
     show_on_add = models.CharField(max_length=1, choices=SHOW_ON_ADD_CHOICES,