Migrated serialized yaml in core tables from syck to psych

pull/641/head
Sebastian Schuster 11 years ago
parent 869e41e026
commit 3d148bcd54
  1. 45
      db/migrate/20130612120042_migrate_serialized_yaml_from_syck_to_psych.rb
  2. 8
      db/migrate/migration_utils/yaml_migrator.rb
  3. 4
      doc/CHANGELOG.md

@ -0,0 +1,45 @@
#-- copyright
# OpenProject is a project management system.
# Copyright (C) 2011-2013 the OpenProject Foundation (OPF)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See doc/COPYRIGHT.md for more details.
#++
require_relative 'migration_utils/yaml_migrator'
class MigrateSerializedYamlFromSyckToPsych < ActiveRecord::Migration
include Migration::YamlMigrator
def up
migrate_yaml_columns('syck', 'psych')
end
def down
migrate_yaml_columns('psych', 'syck')
end
def migrate_yaml_columns(source_yamler, target_yamler)
['filters', 'column_names', 'sort_criteria'].each do |column|
migrate_yaml('queries', column, source_yamler, target_yamler)
end
migrate_yaml('custom_field_translations', 'possible_values', source_yamler, target_yamler)
migrate_yaml('roles', 'permissions', source_yamler, target_yamler)
migrate_yaml('settings', 'value', source_yamler, target_yamler)
migrate_yaml('timelines', 'options', source_yamler, target_yamler)
migrate_yaml('user_preferences', 'others', source_yamler, target_yamler)
migrate_yaml('wiki_menu_items', 'options', source_yamler, target_yamler)
end
end

@ -13,9 +13,9 @@ require 'syck'
module Migration
module YamlMigrator
extend DbWorker
include DbWorker
def self.migrate(table, column, source_yamler, target_yamler)
def migrate_yaml(table, column, source_yamler, target_yamler)
current_yamler = YAML::ENGINE.yamler
fetch_data(table,column).each do | data |
db_execute <<-SQL
@ -30,7 +30,7 @@ module Migration
YAML::ENGINE.yamler = current_yamler.present? ? current_yamler : 'psych'
end
def self.fetch_data(table, column)
def fetch_data(table, column)
ActiveRecord::Base.connection.select_all <<-SQL
SELECT #{db_column('id')}, #{db_column(column)}
FROM #{quoted_table_name(table)}
@ -38,7 +38,7 @@ module Migration
SQL
end
def self.yaml_to_yaml(data, source_yamler, target_yamler)
def yaml_to_yaml(data, source_yamler, target_yamler)
YAML::ENGINE.yamler = source_yamler
original = YAML.load(data)
YAML::ENGINE.yamler = target_yamler

@ -29,9 +29,11 @@ See doc/COPYRIGHT.rdoc for more details.
# Changelog
* `#2731` Migrated serialized yaml from syck to psych
## 3.0.0pre29
* `#2473` [Timelines] Tooltip in timeline report shows star * instead of hash # in front of ID
* `#2473` [Timelines] Tooltip in timeline report shows star * instead of hash # in front of ID
* `#2721` Fix: Fix: Fix: Missing journal entries for customizable_journals
* `#2718` Newlines in workpackage descriptions aren't normalized for change tracking

Loading…
Cancel
Save