Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-12-19 14:01:45 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-12-19 14:01:45 +0300
commit9297025d0b7ddf095eb618dfaaab2ff8f2018d8b (patch)
tree865198c01d1824a9b098127baa3ab980c9cd2c06 /db/post_migrate/20231201171229_detect_and_fix_duplicate_organizations_path.rb
parent6372471f43ee03c05a7c1f8b0c6ac6b8a7431dbe (diff)
Add latest changes from gitlab-org/gitlab@16-7-stable-eev16.7.0-rc42
Diffstat (limited to 'db/post_migrate/20231201171229_detect_and_fix_duplicate_organizations_path.rb')
-rw-r--r--db/post_migrate/20231201171229_detect_and_fix_duplicate_organizations_path.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/db/post_migrate/20231201171229_detect_and_fix_duplicate_organizations_path.rb b/db/post_migrate/20231201171229_detect_and_fix_duplicate_organizations_path.rb
new file mode 100644
index 00000000000..3b63cfef5ea
--- /dev/null
+++ b/db/post_migrate/20231201171229_detect_and_fix_duplicate_organizations_path.rb
@@ -0,0 +1,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