diff options
Diffstat (limited to 'db/migrate/20161207231626_add_environment_slug.rb')
-rw-r--r-- | db/migrate/20161207231626_add_environment_slug.rb | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/db/migrate/20161207231626_add_environment_slug.rb b/db/migrate/20161207231626_add_environment_slug.rb deleted file mode 100644 index 993b9bd3330..00000000000 --- a/db/migrate/20161207231626_add_environment_slug.rb +++ /dev/null @@ -1,68 +0,0 @@ -# See http://doc.gitlab.com/ce/development/migration_style_guide.html -# for more information on how to write migrations for GitLab. - -class AddEnvironmentSlug < ActiveRecord::Migration[4.2] - include Gitlab::Database::MigrationHelpers - - DOWNTIME = true - DOWNTIME_REASON = 'Adding NOT NULL column environments.slug with dependent data' - - # Used to generate random suffixes for the slug - LETTERS = 'a'..'z' - NUMBERS = '0'..'9' - SUFFIX_CHARS = LETTERS.to_a + NUMBERS.to_a - - def up - environments = Arel::Table.new(:environments) - - add_column :environments, :slug, :string - finder = environments.project(:id, :name) - - connection.exec_query(finder.to_sql).rows.each do |id, name| - updater = Arel::UpdateManager.new - .table(environments) - .set(environments[:slug] => generate_slug(name)) - .where(environments[:id].eq(id)) - - connection.exec_update(updater.to_sql, self.class.name, []) - end - - change_column_null :environments, :slug, false - end - - def down - remove_column :environments, :slug - end - - # Copy of the Environment#generate_slug implementation - def generate_slug(name) - # Lowercase letters and numbers only - slugified = name.to_s.downcase.gsub(/[^a-z0-9]/, '-') - - # Must start with a letter - slugified = 'env-' + slugified unless LETTERS.cover?(slugified[0]) - - # Repeated dashes are invalid (OpenShift limitation) - slugified.gsub!(/\-+/, '-') - - # Maximum length: 24 characters (OpenShift limitation) - slugified = slugified[0..23] - - # Cannot end with a dash (Kubernetes label limitation) - slugified.chop! if slugified.end_with?('-') - - # Add a random suffix, shortening the current string if necessary, if it - # has been slugified. This ensures uniqueness. - if slugified != name - slugified = slugified[0..16] - slugified << '-' unless slugified.end_with?('-') - slugified << random_suffix - end - - slugified - end - - def random_suffix - (0..5).map { SUFFIX_CHARS.sample }.join - end -end |