From 5741b05e2d0888ba70c2772adad597aabf553cd2 Mon Sep 17 00:00:00 2001 From: Sean Carroll Date: Tue, 10 Sep 2019 21:04:00 +0200 Subject: Default for private projects --- ...0190829131947_backfill_release_name_with_tag.rb | 7 ++++- .../backfill_release_name_with_tag_spec.rb | 32 ++++++++++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/db/post_migrate/20190829131947_backfill_release_name_with_tag.rb b/db/post_migrate/20190829131947_backfill_release_name_with_tag.rb index 0f4996cc695..a2a4f80b38f 100644 --- a/db/post_migrate/20190829131947_backfill_release_name_with_tag.rb +++ b/db/post_migrate/20190829131947_backfill_release_name_with_tag.rb @@ -8,11 +8,16 @@ class BackfillReleaseNameWithTag < ActiveRecord::Migration[5.2] disable_ddl_transaction! def up - subquery = Arel.sql("select id from projects where visibility_level = #{Gitlab::VisibilityLevel::PUBLIC}") + table = Project.arel_table + subquery = table.project(table[:id]).where(table[:visibility_level].eq(Gitlab::VisibilityLevel::PUBLIC)) update_column_in_batches(:releases, :name, Release.arel_table[:tag]) do |table, query| query.where(table[:name].eq(nil)).where(table[:project_id].in(subquery)) end + + update_column_in_batches(:releases, :name, Arel.sql("'release-' || id")) do |table, query| + query.where(table[:name].eq(nil)).where(table[:project_id].not_in(subquery)) + end end def down diff --git a/spec/migrations/backfill_release_name_with_tag_spec.rb b/spec/migrations/backfill_release_name_with_tag_spec.rb index 3c61ac11270..996f326836f 100644 --- a/spec/migrations/backfill_release_name_with_tag_spec.rb +++ b/spec/migrations/backfill_release_name_with_tag_spec.rb @@ -7,17 +7,33 @@ describe BackfillReleaseNameWithTag, :migration do let(:releases) { table(:releases) } let(:namespaces) { table(:namespaces) } let(:projects) { table(:projects) } - let(:namespace) { namespaces.create(name: 'foo', path: 'foo') } - let(:project) { projects.create!(namespace_id: namespace.id, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } - let!(:release) { releases.create!(project_id: project.id, name: nil, tag: 'v1.0.0', released_at: 2.days.ago) } - it 'defaults name to tag value' do - expect(release.tag).to be_present + context 'public project' do + let(:project) { projects.create!(namespace_id: namespace.id, visibility_level: Gitlab::VisibilityLevel::PUBLIC) } + let!(:release) { releases.create!(project_id: project.id, name: nil, tag: 'v1.0.0', released_at: 2.days.ago) } + + it 'defaults name to tag value' do + expect(release.tag).to be_present + + migrate! + release.reload + + expect(release.name).to eq(release.tag) + end + end + + context 'private project' do + let(:project) { projects.create!(namespace_id: namespace.id, visibility_level: Gitlab::VisibilityLevel::PRIVATE) } + let!(:release) { releases.create!(project_id: project.id, name: nil, tag: 'v1.0.0', released_at: 2.days.ago) } + + it 'defaults name to tag value' do + expect(release.tag).to be_present - migrate! + migrate! + release.reload - release.reload - expect(release.name).to eq(release.tag) + expect(release.name).to eq("release-#{release.id}") + end end end -- cgit v1.2.1