Fixes for the rename reserved paths helpers
This commit is contained in:
parent
36ede00876
commit
f62f0c258d
5 changed files with 51 additions and 2 deletions
|
@ -48,6 +48,14 @@ module Gitlab
|
|||
def self.name
|
||||
'Namespace'
|
||||
end
|
||||
|
||||
def kind
|
||||
type == 'Group' ? 'group' : 'user'
|
||||
end
|
||||
end
|
||||
|
||||
class User < ActiveRecord::Base
|
||||
self.table_name = 'users'
|
||||
end
|
||||
|
||||
class Route < ActiveRecord::Base
|
||||
|
|
|
@ -41,7 +41,8 @@ module Gitlab
|
|||
new_full_path)
|
||||
|
||||
update_column_in_batches(:routes, :path, replace_statement) do |table, query|
|
||||
query.where(MigrationClasses::Route.arel_table[:path].matches("#{old_full_path}%"))
|
||||
path_or_children = table[:path].matches_any([old_full_path, "#{old_full_path}/%"])
|
||||
query.where(path_or_children)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -29,9 +29,15 @@ module Gitlab
|
|||
move_repositories(namespace, old_full_path, new_full_path)
|
||||
move_uploads(old_full_path, new_full_path)
|
||||
move_pages(old_full_path, new_full_path)
|
||||
rename_user(old_full_path, new_full_path) if namespace.kind == 'user'
|
||||
remove_cached_html_for_projects(projects_for_namespace(namespace).map(&:id))
|
||||
end
|
||||
|
||||
def rename_user(old_username, new_username)
|
||||
MigrationClasses::User.where(username: old_username)
|
||||
.update_all(username: new_username)
|
||||
end
|
||||
|
||||
def move_repositories(namespace, old_full_path, new_full_path)
|
||||
repo_paths_for_namespace(namespace).each do |repository_storage_path|
|
||||
# Ensure old directory exists before moving it
|
||||
|
|
|
@ -107,6 +107,15 @@ describe Gitlab::Database::RenameReservedPathsMigration::V1::RenameBase do
|
|||
expect(new_path).to eq('the-path0')
|
||||
end
|
||||
|
||||
it "doesn't rename routes that start with a similar name" do
|
||||
other_namespace = create(:namespace, path: 'the-path-but-not-really')
|
||||
project = create(:empty_project, path: 'the-project', namespace: other_namespace)
|
||||
|
||||
subject.rename_path_for_routable(migration_namespace(namespace))
|
||||
|
||||
expect(project.route.reload.path).to eq('the-path-but-not-really/the-project')
|
||||
end
|
||||
|
||||
context "the-path namespace -> subgroup -> the-path0 project" do
|
||||
it "updates the route of the project correctly" do
|
||||
subgroup = create(:group, path: "subgroup", parent: namespace)
|
||||
|
|
|
@ -137,7 +137,7 @@ describe Gitlab::Database::RenameReservedPathsMigration::V1::RenameNamespaces do
|
|||
end
|
||||
|
||||
describe "#rename_namespace" do
|
||||
let(:namespace) { create(:namespace, path: 'the-path') }
|
||||
let(:namespace) { create(:group, name: 'the-path') }
|
||||
|
||||
it 'renames paths & routes for the namespace' do
|
||||
expect(subject).to receive(:rename_path_for_routable).
|
||||
|
@ -177,6 +177,31 @@ describe Gitlab::Database::RenameReservedPathsMigration::V1::RenameNamespaces do
|
|||
|
||||
subject.rename_namespace(namespace)
|
||||
end
|
||||
|
||||
it "doesn't rename users for other namespaces" do
|
||||
expect(subject).not_to receive(:rename_user)
|
||||
|
||||
subject.rename_namespace(namespace)
|
||||
end
|
||||
|
||||
it 'renames the username of a namespace for a user' do
|
||||
user = create(:user, username: 'the-path')
|
||||
|
||||
expect(subject).to receive(:rename_user).with('the-path', 'the-path0')
|
||||
|
||||
subject.rename_namespace(user.namespace)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#rename_user' do
|
||||
it 'renames a username' do
|
||||
subject = described_class.new([], migration)
|
||||
user = create(:user, username: 'broken')
|
||||
|
||||
subject.rename_user('broken', 'broken0')
|
||||
|
||||
expect(user.reload.username).to eq('broken0')
|
||||
end
|
||||
end
|
||||
|
||||
describe '#rename_namespaces' do
|
||||
|
|
Loading…
Reference in a new issue