diff options
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.rb | 79 |
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 |