diff --git a/.gems b/.gems new file mode 100644 index 00000000..fce239be --- /dev/null +++ b/.gems @@ -0,0 +1,3 @@ +will_paginate --version '>= 2.3.8' +acts-as-taggable-on --version '>= 1.0.3' +RedCloth --version '>= 4.1.9' diff --git a/db/migrate/001_create_base_tables.rb b/db/migrate/001_create_base_tables.rb new file mode 100644 index 00000000..ce072a54 --- /dev/null +++ b/db/migrate/001_create_base_tables.rb @@ -0,0 +1,165 @@ +class CreateBaseTables < ActiveRecord::Migration + def self.up + create_table "attachments" do |t| + t.string "original_filename" + t.string "content_type" + t.string "attachable_type", :limit => 30 + t.integer "attachable_id" + end + + create_table "changes" do |t| + t.integer "changeset_id" + t.string "revision", :limit => 40, :default => "0", :null => false + t.string "name", :limit => 2, :default => "", :null => false + t.string "path" + t.string "from_path" + t.string "from_revision", :limit => 40 + t.integer "repository_id" + end + + create_table "changesets" do |t| + t.string "revision", :limit => 40 + t.string "author", :limit => 50 + t.text "log" + t.datetime "created_at" + t.datetime "revised_at" + t.integer "repository_id", :default => 0, :null => false + end + + create_table "factory_hashcashes" do |t| + end + + create_table "groups" do |t| + t.string "name", :limit => 40 + t.text "permissions" + t.boolean "access_to_all_projects", :default => false, :null => false + end + + create_table "groups_projects", :id => false do |t| + t.integer "group_id" + t.integer "project_id" + end + + create_table "groups_users", :id => false do |t| + t.integer "group_id" + t.integer "user_id" + end + + create_table "milestones" do |t| + t.string "name", :limit => 75 + t.text "info" + t.date "due" + t.datetime "created_at" + t.integer "project_id" + t.date "finished_on" + end + + create_table "priorities" do |t| + t.string "name", :limit => 50 + t.integer "position", :default => 9999 + end + + create_table "projects" do |t| + t.string "name" + t.text "info" + t.string "short_name" + t.boolean "closed", :default => false, :null => false + t.integer "repository_id" + t.string "root_path", :default => "" + t.text "disabled_modules" + end + + create_table "repositories" do |t| + t.string "name" + t.string "path" + end + + create_table "sessions", :id => false do |t| + t.string "session_id" + end + + create_table "status" do |t| + t.string "name", :limit => 25 + end + + create_table "tans", :force => true do |t| + t.string "value" + t.datetime "expires_at" + end + + create_table "taggings" do |t| + t.integer "tag_id" + t.integer "taggable_id" + t.string "taggable_type", :limit => 30 + end + + create_table "tags" do |t| + t.string "name" + end + + create_table "ticket_changes" do |t| + t.integer "ticket_id" + t.string "author", :limit => 75 + t.text "comment" + t.datetime "created_at" + t.text "changes" + t.string "email", :limit => 75 + t.integer "user_id" + t.boolean "approved" + t.boolean "spam" + end + + create_table "ticket_reports" do |t| + t.string "name", :limit => 100 + t.integer "position", :default => 9999, :null => false + t.text "filter_options" + t.integer "time_interval" + t.integer "project_id" + end + + create_table "tickets" do |t| + t.integer "milestone_id" + t.integer "priority_id" + t.integer "status_id" + t.string "author", :limit => 75 + t.string "summary" + t.text "content" + t.string "author_host", :limit => 100 + t.datetime "created_at" + t.integer "project_id" + t.integer "assigned_user_id" + t.string "email", :limit => 75 + t.datetime "updated_at" + t.integer "user_id" + t.integer "release_id" + t.integer "component_id" + t.boolean "approved" + t.boolean "spam" + end + + create_table "users" do |t| + t.string "login", :limit => 80 + t.string "password", :limit => 40 + t.datetime "created_at" + t.boolean "admin", :default => false, :null => false + t.string "name", :limit => 80 + t.string "email", :limit => 80 + t.string "salt", :limit => 8 + t.boolean "active", :default => true, :null => false + t.string "activation_code" + end + + create_table "components" do |t| + t.column "name", :string, :limit => 50 + t.column "project_id", :integer + end + + create_table "releases" do |t| + t.column "name", :string, :limit => 25 + t.column "project_id", :integer + end + end + + def self.down + end +end diff --git a/db/migrate/059_structural_database_changes01.rb b/db/migrate/059_structural_database_changes01.rb index 3c4d9250..dfe41480 100644 --- a/db/migrate/059_structural_database_changes01.rb +++ b/db/migrate/059_structural_database_changes01.rb @@ -1,9 +1,9 @@ class StructuralDatabaseChanges01 < ActiveRecord::Migration def self.up - change_column :milestones, :rank, :integer, :limit => 4, :default => 9999 - change_column :priorities, :rank, :integer, :limit => 4, :default => 9999 - change_column :status, :rank, :integer, :limit => 4, :default => 9999 - change_column :ticket_reports, :rank, :integer, :limit => 4, :default => 9999 + change_column :milestones, :rank, :integer, :default => 9999 + change_column :priorities, :rank, :integer, :default => 9999 + change_column :status, :rank, :integer, :default => 9999 + change_column :ticket_reports, :rank, :integer, :default => 9999 change_column :changes, :repository_id, :integer, :default => nil add_index :changes, :repository_id diff --git a/db/migrate/060_structural_database_changes02.rb b/db/migrate/060_structural_database_changes02.rb index 69ba60a0..ffbbb42f 100644 --- a/db/migrate/060_structural_database_changes02.rb +++ b/db/migrate/060_structural_database_changes02.rb @@ -1,36 +1,40 @@ class StructuralDatabaseChanges02 < ActiveRecord::Migration + def self.try_removing_index(*args) + remove_index(*args) rescue nil + end + def self.up - remove_index "attachments", :name => "attachments_attachable_type_index" - remove_index "changes", :name => "changes_changeset_id_index" - remove_index "changes", :name => "index_changes_on_repository_id" - remove_index "changesets", :name => "changesets_repository_id_index" - remove_index "groups_projects", :name => "groups_projects_group_id_index" - remove_index "groups_users", :name => "groups_users_group_id_index" - remove_index "milestones", :name => "milestones_project_id_index" - remove_index "milestones", :name => "index_milestones_on_rank" - remove_index "priorities", :name => "index_priorities_on_rank" - remove_index "projects", :name => "projects_short_name_index" - remove_index "projects", :name => "projects_repository_id_index" - remove_index "sessions", :name => "sessions_session_id_index" - remove_index "status", :name => "index_status_on_rank" - remove_index "taggings", :name => "taggings_tag_id_index" - remove_index "tags", :name => "tags_name_index" - remove_index "ticket_changes", :name => "ticket_changes_ticket_id_index" - remove_index "ticket_properties", :name => "index_ticket_properties_on_rank" - remove_index "ticket_properties", :name => "index_ticket_properties_on_ticket_property_type_id" - remove_index "ticket_properties_tickets", :name => "uidx_ticket_properties_tickets", :unique => true - remove_index "ticket_property_types", :name => "index_ticket_property_types_on_project_id" - remove_index "ticket_reports", :name => "ticket_reports_project_id_index" - remove_index "ticket_subscribers", :name => "index_ticket_subscribers_on_ticket_id" - remove_index "ticket_subscribers", :name => "index_ticket_subscribers_on_user_id" - remove_index "tickets", :name => "tickets_milestone_id_index" - remove_index "tickets", :name => "tickets_priority_id_index" - remove_index "tickets", :name => "tickets_status_id_index" - remove_index "tickets", :name => "tickets_project_id_index" - remove_index "tickets", :name => "tickets_assigned_user_id_index" - remove_index "users", :name => "index_users_on_private_key" - remove_index "users", :name => "index_users_on_login" - + try_removing_index "attachments", :name => "attachments_attachable_type_index" + try_removing_index "changes", :name => "changes_changeset_id_index" + try_removing_index "changes", :name => "index_changes_on_repository_id" + try_removing_index "changesets", :name => "changesets_repository_id_index" + try_removing_index "groups_projects", :name => "groups_projects_group_id_index" + try_removing_index "groups_users", :name => "groups_users_group_id_index" + try_removing_index "milestones", :name => "milestones_project_id_index" + try_removing_index "milestones", :name => "index_milestones_on_rank" + try_removing_index "priorities", :name => "index_priorities_on_rank" + try_removing_index "projects", :name => "projects_short_name_index" + try_removing_index "projects", :name => "projects_repository_id_index" + try_removing_index "sessions", :name => "sessions_session_id_index" + try_removing_index "status", :name => "index_status_on_rank" + try_removing_index "taggings", :name => "taggings_tag_id_index" + try_removing_index "tags", :name => "tags_name_index" + try_removing_index "ticket_changes", :name => "ticket_changes_ticket_id_index" + try_removing_index "ticket_properties", :name => "index_ticket_properties_on_rank" + try_removing_index "ticket_properties", :name => "index_ticket_properties_on_ticket_property_type_id" + try_removing_index "ticket_properties_tickets", :name => "uidx_ticket_properties_tickets", :unique => true + try_removing_index "ticket_property_types", :name => "index_ticket_property_types_on_project_id" + try_removing_index "ticket_reports", :name => "ticket_reports_project_id_index" + try_removing_index "ticket_subscribers", :name => "index_ticket_subscribers_on_ticket_id" + try_removing_index "ticket_subscribers", :name => "index_ticket_subscribers_on_user_id" + try_removing_index "tickets", :name => "tickets_milestone_id_index" + try_removing_index "tickets", :name => "tickets_priority_id_index" + try_removing_index "tickets", :name => "tickets_status_id_index" + try_removing_index "tickets", :name => "tickets_project_id_index" + try_removing_index "tickets", :name => "tickets_assigned_user_id_index" + try_removing_index "users", :name => "index_users_on_private_key" + try_removing_index "users", :name => "index_users_on_login" + add_index "attachments", ["attachable_type", "attachable_id"], :name => "i_att_on_type_and_id" add_index "changes", ["changeset_id"], :name => "i_changes_on_changeset" add_index "changes", ["repository_id"], :name => "i_changes_on_repository_id" diff --git a/db/migrate/062_update_changed_attributes_in_all_ticket_changes.rb b/db/migrate/062_update_changed_attributes_in_all_ticket_changes.rb index 0625401d..17bce845 100644 --- a/db/migrate/062_update_changed_attributes_in_all_ticket_changes.rb +++ b/db/migrate/062_update_changed_attributes_in_all_ticket_changes.rb @@ -1,30 +1,32 @@ class UpdateChangedAttributesInAllTicketChanges < ActiveRecord::Migration def self.up - TicketChange.find(:all).each do |change| - unless change.changes.blank? - change.changes.keys.each do |key| - if ['Author', 'Email'].include?(key.humanize) - change.changes.delete(key) - elsif key.humanize != key - change.changes[key.humanize] = change.changes.delete(key) - end + select_all("SELECT * FROM ticket_changes").each do |change| + changes = YAML.load(change['changes']) + next if changes.blank? + + changes.keys.each do |key| + if ['Author', 'Email'].include?(key.humanize) + changes.delete(key) + elsif key.humanize != key + changes[key.humanize] = changes.delete(key) end - change.save end + update_sql "UPDATE ticket_changes SET changes = #{quote(changes.to_yaml)} WHERE id = #{change['id']}" end rescue true end def self.down - TicketChange.find(:all).each do |change| - unless change.changes.blank? - change.changes.keys.each do |key| - fkey = key.dup.gsub(%r{ }, '_').downcase + '_id' - if fkey != key - change.changes[fkey] = change.changes.delete(key) - end + select_all("SELECT * FROM ticket_changes").each do |change| + changes = YAML.load(change['changes']) + next if changes.blank? + + changes.keys.each do |key| + fkey = key.dup.gsub(%r{ }, '_').downcase + '_id' + if fkey != key + changes[fkey] = changes.delete(key) end - change.save end + update_sql "UPDATE ticket_changes SET changes = #{quote(changes.to_yaml)} WHERE id = #{change['id']}" end rescue true end diff --git a/db/migrate/20081215174447_clean_up_and_remove_redundant_columns.rb b/db/migrate/20081215174447_clean_up_and_remove_redundant_columns.rb index 8c64d1a3..092c468b 100644 --- a/db/migrate/20081215174447_clean_up_and_remove_redundant_columns.rb +++ b/db/migrate/20081215174447_clean_up_and_remove_redundant_columns.rb @@ -28,10 +28,10 @@ def self.up def self.down change_column :projects, :closed, :boolean, :null => true - add_column 'ticket_changes', "approved", :default => false, :null => false - add_column 'ticket_changes', "spam", :default => false, :null => false - add_column 'tickets', "approved", :default => false, :null => false - add_column 'tickets', "spam", :default => false, :null => false + add_column 'ticket_changes', "approved", :boolean, :default => false, :null => false + add_column 'ticket_changes', "spam", :boolean, :default => false, :null => false + add_column 'tickets', "approved", :boolean, :default => false, :null => false + add_column 'tickets', "spam", :boolean, :default => false, :null => false remove_index :changes, :name => "i_changes_on_from_path" remove_index :changes, :name => "i_changes_on_path" diff --git a/db/schema.core.rb b/db/schema.core.rb index 010d4a2a..d0255dd4 100644 --- a/db/schema.core.rb +++ b/db/schema.core.rb @@ -9,7 +9,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20090419112736) do +ActiveRecord::Schema.define(:version => 20090504172000) do create_table "attachments", :force => true do |t| t.string "file_name"