summaryrefslogtreecommitdiff
path: root/db/migrate/20151209145909_migrate_ci_emails.rb
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2015-12-11 13:24:38 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2015-12-11 13:25:50 +0100
commite365750199802a7c0b45dc88c99e4bf7eb6f111c (patch)
treedc0f8ca28d6c67b409083db9b19907b69cb72c87 /db/migrate/20151209145909_migrate_ci_emails.rb
parentdc4e2744ba13cd7d75147787550a1272b9d34a95 (diff)
downloadgitlab-ce-e365750199802a7c0b45dc88c99e4bf7eb6f111c.tar.gz
Enhance migrate CI emails
Diffstat (limited to 'db/migrate/20151209145909_migrate_ci_emails.rb')
-rw-r--r--db/migrate/20151209145909_migrate_ci_emails.rb27
1 files changed, 23 insertions, 4 deletions
diff --git a/db/migrate/20151209145909_migrate_ci_emails.rb b/db/migrate/20151209145909_migrate_ci_emails.rb
index 964dde841ad..5ee11893582 100644
--- a/db/migrate/20151209145909_migrate_ci_emails.rb
+++ b/db/migrate/20151209145909_migrate_ci_emails.rb
@@ -3,13 +3,16 @@ class MigrateCiEmails < ActiveRecord::Migration
def up
# This inserts a new service: BuildsEmailService
- # It also "manually" constructs the properties (JSON-encoded)
+ # It "manually" constructs the properties (JSON-encoded)
# Migrating all ci_projects e-mail related columns
execute(
'INSERT INTO services (project_id, type, created_at, updated_at, active, push_events, issues_events, merge_requests_events, tag_push_events, note_events, build_events, properties) ' \
- "SELECT projects.id, 'BuildsEmailService', ci_services.created_at, ci_services.updated_at, #{true_value}, #{false_value}, #{false_value}, #{false_value}, #{false_value}, #{false_value}, #{true_value}, " \
- "CONCAT('{\"notify_only_broken_builds\":\"', ci_projects.email_only_broken_builds, " \
- "'\",\"add_pusher\":\"', ci_projects.email_add_pusher, '\",\"recipients\":\"', ci_projects.email_recipients, '\"}') " \
+ "SELECT projects.id, 'BuildsEmailService', ci_services.created_at, ci_services.updated_at, " \
+ "#{true_value}, #{false_value}, #{false_value}, #{false_value}, #{false_value}, #{false_value}, #{true_value}, " \
+ "CONCAT('{\"notify_only_broken_builds\":\"', #{convert_bool('ci_projects.email_only_broken_builds')}, " \
+ "'\",\"add_pusher\":\"', #{convert_bool('ci_projects.email_add_pusher')}, " \
+ "'\",\"recipients\":\"', #{escape_text('ci_projects.email_recipients')}, " \
+ "'\"}') " \
'FROM ci_services ' \
'JOIN ci_projects ON ci_services.project_id = ci_projects.id ' \
'JOIN projects ON ci_projects.gitlab_id = projects.id ' \
@@ -19,4 +22,20 @@ class MigrateCiEmails < ActiveRecord::Migration
def down
end
+
+ # This function escapes double-quotes and slash
+ def escape_text(name)
+ "REPLACE(REPLACE(#{name}, '\\', '\\\\'), '\"', '\\\"')"
+ end
+
+ # This function returns 0 or 1 for column
+ def convert_bool(name)
+ if self.postgresql?
+ # PostgreSQL uses BOOLEAN type
+ "CASE WHEN #{name} IS TRUE THEN '1' ELSE '0' END;"
+ else
+ # MySQL uses TINYINT
+ "#{name}"
+ end
+ end
end