Merge branch '44990-remove-old-i' into 'master'
Remove old migration specs that violate FactoriesInMigrationSpecs See merge request gitlab-org/gitlab-ce!30280
This commit is contained in:
commit
e555db6f28
|
@ -1,19 +0,0 @@
|
|||
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||
# for more information on how to write migrations for GitLab.
|
||||
|
||||
class RemoveProjectLabelsGroupId < ActiveRecord::Migration[4.2]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
update_column_in_batches(:labels, :group_id, nil) do |table, query|
|
||||
query.where(table[:type].eq('ProjectLabel').and(table[:group_id].not_eq(nil)))
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
end
|
||||
end
|
|
@ -1,29 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
# rubocop:disable Style/Documentation
|
||||
|
||||
module Gitlab
|
||||
module BackgroundMigration
|
||||
class MigrateSystemUploadsToNewFolder
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
attr_reader :old_folder, :new_folder
|
||||
|
||||
class Upload < ActiveRecord::Base
|
||||
self.table_name = 'uploads'
|
||||
include EachBatch
|
||||
end
|
||||
|
||||
def perform(old_folder, new_folder)
|
||||
replace_sql = replace_sql(uploads[:path], old_folder, new_folder)
|
||||
affected_uploads = Upload.where(uploads[:path].matches("#{old_folder}%"))
|
||||
|
||||
affected_uploads.each_batch do |batch|
|
||||
batch.update_all("path = #{replace_sql}")
|
||||
end
|
||||
end
|
||||
|
||||
def uploads
|
||||
Arel::Table.new('uploads')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,82 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
# rubocop:disable Style/Documentation
|
||||
|
||||
module Gitlab
|
||||
module BackgroundMigration
|
||||
class MovePersonalSnippetFiles
|
||||
delegate :select_all, :execute, :quote_string, to: :connection
|
||||
|
||||
def perform(relative_source, relative_destination)
|
||||
@source_relative_location = relative_source
|
||||
@destination_relative_location = relative_destination
|
||||
|
||||
move_personal_snippet_files
|
||||
end
|
||||
|
||||
def move_personal_snippet_files
|
||||
query = "SELECT uploads.path, uploads.model_id FROM uploads "\
|
||||
"INNER JOIN snippets ON snippets.id = uploads.model_id WHERE uploader = 'PersonalFileUploader'"
|
||||
select_all(query).each do |upload|
|
||||
secret = upload['path'].split('/')[0]
|
||||
file_name = upload['path'].split('/')[1]
|
||||
|
||||
move_file(upload['model_id'], secret, file_name)
|
||||
update_markdown(upload['model_id'], secret, file_name)
|
||||
end
|
||||
end
|
||||
|
||||
def move_file(snippet_id, secret, file_name)
|
||||
source_dir = File.join(base_directory, @source_relative_location, snippet_id.to_s, secret)
|
||||
destination_dir = File.join(base_directory, @destination_relative_location, snippet_id.to_s, secret)
|
||||
|
||||
source_file_path = File.join(source_dir, file_name)
|
||||
destination_file_path = File.join(destination_dir, file_name)
|
||||
|
||||
unless File.exist?(source_file_path)
|
||||
say "Source file `#{source_file_path}` doesn't exist. Skipping."
|
||||
return
|
||||
end
|
||||
|
||||
say "Moving file #{source_file_path} -> #{destination_file_path}"
|
||||
|
||||
FileUtils.mkdir_p(destination_dir)
|
||||
FileUtils.move(source_file_path, destination_file_path)
|
||||
end
|
||||
|
||||
def update_markdown(snippet_id, secret, file_name)
|
||||
source_markdown_path = File.join(@source_relative_location, snippet_id.to_s, secret, file_name)
|
||||
destination_markdown_path = File.join(@destination_relative_location, snippet_id.to_s, secret, file_name)
|
||||
|
||||
source_markdown = "](#{source_markdown_path})"
|
||||
destination_markdown = "](#{destination_markdown_path})"
|
||||
quoted_source = quote_string(source_markdown)
|
||||
quoted_destination = quote_string(destination_markdown)
|
||||
|
||||
execute("UPDATE snippets "\
|
||||
"SET description = replace(snippets.description, '#{quoted_source}', '#{quoted_destination}'), description_html = NULL "\
|
||||
"WHERE id = #{snippet_id}")
|
||||
|
||||
query = "SELECT id, note FROM notes WHERE noteable_id = #{snippet_id} "\
|
||||
"AND noteable_type = 'Snippet' AND note IS NOT NULL"
|
||||
select_all(query).each do |note|
|
||||
text = note['note'].gsub(source_markdown, destination_markdown)
|
||||
quoted_text = quote_string(text)
|
||||
|
||||
execute("UPDATE notes SET note = '#{quoted_text}', note_html = NULL WHERE id = #{note['id']}")
|
||||
end
|
||||
end
|
||||
|
||||
def base_directory
|
||||
File.join(Rails.root, 'public')
|
||||
end
|
||||
|
||||
def connection
|
||||
ActiveRecord::Base.connection
|
||||
end
|
||||
|
||||
def say(message)
|
||||
Rails.logger.debug(message)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,21 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
# rubocop:disable RSpec/FactoriesInMigrationSpecs
|
||||
describe Gitlab::BackgroundMigration::MigrateSystemUploadsToNewFolder, :delete do
|
||||
let(:migration) { described_class.new }
|
||||
|
||||
before do
|
||||
allow(migration).to receive(:logger).and_return(Logger.new(nil))
|
||||
end
|
||||
|
||||
describe '#perform' do
|
||||
it 'renames the path of system-uploads' do
|
||||
upload = create(:upload, model: create(:project), path: 'uploads/system/project/avatar.jpg')
|
||||
|
||||
migration.perform('uploads/system/', 'uploads/-/system/')
|
||||
|
||||
expect(upload.reload.path).to eq('uploads/-/system/project/avatar.jpg')
|
||||
end
|
||||
end
|
||||
end
|
||||
# rubocop:enable RSpec/FactoriesInMigrationSpecs
|
|
@ -1,74 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
# rubocop:disable RSpec/FactoriesInMigrationSpecs
|
||||
describe Gitlab::BackgroundMigration::MovePersonalSnippetFiles do
|
||||
let(:test_dir) { File.join(Rails.root, 'tmp', 'tests', 'move_snippet_files_test') }
|
||||
let(:old_uploads_dir) { File.join('uploads', 'system', 'personal_snippet') }
|
||||
let(:new_uploads_dir) { File.join('uploads', '-', 'system', 'personal_snippet') }
|
||||
let(:snippet) do
|
||||
snippet = create(:personal_snippet)
|
||||
create_upload_for_snippet(snippet)
|
||||
snippet.update!(description: markdown_linking_file(snippet))
|
||||
snippet
|
||||
end
|
||||
|
||||
let(:migration) { described_class.new }
|
||||
|
||||
before do
|
||||
allow(migration).to receive(:base_directory) { test_dir }
|
||||
end
|
||||
|
||||
describe '#perform' do
|
||||
it 'moves the file on the disk' do
|
||||
expected_path = File.join(test_dir, new_uploads_dir, snippet.id.to_s, "secret#{snippet.id}", 'upload.txt')
|
||||
|
||||
migration.perform(old_uploads_dir, new_uploads_dir)
|
||||
|
||||
expect(File.exist?(expected_path)).to be_truthy
|
||||
end
|
||||
|
||||
it 'updates the markdown of the snippet' do
|
||||
expected_path = File.join(new_uploads_dir, snippet.id.to_s, "secret#{snippet.id}", 'upload.txt')
|
||||
expected_markdown = "[an upload](#{expected_path})"
|
||||
|
||||
migration.perform(old_uploads_dir, new_uploads_dir)
|
||||
|
||||
expect(snippet.reload.description).to eq(expected_markdown)
|
||||
end
|
||||
|
||||
it 'updates the markdown of notes' do
|
||||
expected_path = File.join(new_uploads_dir, snippet.id.to_s, "secret#{snippet.id}", 'upload.txt')
|
||||
expected_markdown = "with [an upload](#{expected_path})"
|
||||
|
||||
note = create(:note_on_personal_snippet, noteable: snippet, note: "with #{markdown_linking_file(snippet)}")
|
||||
|
||||
migration.perform(old_uploads_dir, new_uploads_dir)
|
||||
|
||||
expect(note.reload.note).to eq(expected_markdown)
|
||||
end
|
||||
end
|
||||
|
||||
def create_upload_for_snippet(snippet)
|
||||
snippet_path = path_for_file_in_snippet(snippet)
|
||||
path = File.join(old_uploads_dir, snippet.id.to_s, snippet_path)
|
||||
absolute_path = File.join(test_dir, path)
|
||||
|
||||
FileUtils.mkdir_p(File.dirname(absolute_path))
|
||||
FileUtils.touch(absolute_path)
|
||||
|
||||
create(:upload, model: snippet, path: snippet_path, uploader: PersonalFileUploader)
|
||||
end
|
||||
|
||||
def path_for_file_in_snippet(snippet)
|
||||
secret = "secret#{snippet.id}"
|
||||
filename = 'upload.txt'
|
||||
|
||||
File.join(secret, filename)
|
||||
end
|
||||
|
||||
def markdown_linking_file(snippet)
|
||||
path = File.join(old_uploads_dir, snippet.id.to_s, path_for_file_in_snippet(snippet))
|
||||
"[an upload](#{path})"
|
||||
end
|
||||
end
|
||||
# rubocop:enable RSpec/FactoriesInMigrationSpecs
|
|
@ -1,21 +0,0 @@
|
|||
# encoding: utf-8
|
||||
|
||||
require 'spec_helper'
|
||||
require Rails.root.join('db', 'post_migrate', '20180202111106_remove_project_labels_group_id.rb')
|
||||
|
||||
describe RemoveProjectLabelsGroupId, :delete do
|
||||
let(:migration) { described_class.new }
|
||||
let(:group) { create(:group) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
|
||||
let!(:project_label) { create(:label, group_id: group.id) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
|
||||
let!(:group_label) { create(:group_label) } # rubocop:disable RSpec/FactoriesInMigrationSpecs
|
||||
|
||||
describe '#up' do
|
||||
it 'updates the project labels group ID' do
|
||||
expect { migration.up }.to change { project_label.reload.group_id }.to(nil)
|
||||
end
|
||||
|
||||
it 'keeps the group labels group ID' do
|
||||
expect { migration.up }.not_to change { group_label.reload.group_id }
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue