blob: 3b63cfef5ea8ebcdfdfd7398419fea4ce63e081c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# frozen_string_literal: true
class DetectAndFixDuplicateOrganizationsPath < Gitlab::Database::Migration[2.2]
restrict_gitlab_migration gitlab_schema: :gitlab_main
milestone '16.7'
module Organizations
class Organization < Gitlab::Database::Migration[2.2]::MigrationRecord
end
end
def up
duplicate_paths = Organizations::Organization.group("lower(path)").having("count(path) > 1").count.keys
duplicate_paths.each do |dup_path|
# the first one found is the 'winner' here and so we'll drop it an only focus on others
Organizations::Organization.where('lower(path) = ?', dup_path).order(id: :asc).drop(1).each do |dup_path_record|
dup_path_record.update!(path: clean_path(dup_path_record.path))
end
end
end
def down
# no-op no reversal required here.
end
private
def clean_path(path)
slug = Gitlab::Slug::Path.new(path).generate
path = Namespaces::RandomizedSuffixPath.new(slug)
Gitlab::Utils::Uniquify.new.string(path) do |s|
Organizations::Organization.find_by('lower(path) = :value', value: s.downcase)
end
end
end
|