summaryrefslogtreecommitdiff
path: root/db/post_migrate/20170313133418_rename_more_reserved_project_names.rb
diff options
context:
space:
mode:
Diffstat (limited to 'db/post_migrate/20170313133418_rename_more_reserved_project_names.rb')
-rw-r--r--db/post_migrate/20170313133418_rename_more_reserved_project_names.rb79
1 files changed, 0 insertions, 79 deletions
diff --git a/db/post_migrate/20170313133418_rename_more_reserved_project_names.rb b/db/post_migrate/20170313133418_rename_more_reserved_project_names.rb
deleted file mode 100644
index 85c97e3687e..00000000000
--- a/db/post_migrate/20170313133418_rename_more_reserved_project_names.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-class RenameMoreReservedProjectNames < ActiveRecord::Migration[4.2]
- include Gitlab::Database::MigrationHelpers
-
- DOWNTIME = false
-
- KNOWN_PATHS = %w(artifacts graphs refs badges).freeze
-
- def up
- reserved_projects.each_slice(100) do |slice|
- rename_projects(slice)
- end
- end
-
- def down
- # nothing to do here
- end
-
- private
-
- def reserved_projects
- Project.unscoped
- .includes(:namespace)
- .where('EXISTS (SELECT 1 FROM namespaces WHERE projects.namespace_id = namespaces.id)')
- .where('projects.path' => KNOWN_PATHS)
- end
-
- def route_exists?(full_path)
- quoted_path = ActiveRecord::Base.connection.quote_string(full_path)
-
- ActiveRecord::Base.connection
- .select_all("SELECT id, path FROM routes WHERE path = '#{quoted_path}'").present?
- end
-
- # Adds number to the end of the path that is not taken by other route
- def rename_path(namespace_path, path_was)
- counter = 0
- path = "#{path_was}#{counter}"
-
- while route_exists?("#{namespace_path}/#{path}")
- counter += 1
- path = "#{path_was}#{counter}"
- end
-
- path
- end
-
- def rename_projects(projects)
- projects.each do |project|
- id = project.id
- path_was = project.path
- namespace_path = project.namespace.path
- path = rename_path(namespace_path, path_was)
-
- begin
- # Because project path update is quite complex operation we can't safely
- # copy-paste all code from GitLab. As exception we use Rails code here
- if rename_project_row(project, path)
- after_rename_service(project, path_was, namespace_path).execute
- end
- rescue Exception => e # rubocop: disable Lint/RescueException
- Rails.logger.error "Exception when renaming project #{id}: #{e.message}"
- end
- end
- end
-
- def rename_project_row(project, path)
- project.respond_to?(:update_attributes) &&
- project.update(path: path) &&
- defined?(Projects::AfterRenameService)
- end
-
- def after_rename_service(project, path_was, namespace_path)
- AfterRenameService.new(
- project,
- path_before: path_was,
- full_path_before: "#{namespace_path}/#{path_was}"
- ).execute
- end
-end