diff options
author | Felipe Artur <felipefac@gmail.com> | 2017-09-13 16:46:56 -0300 |
---|---|---|
committer | Felipe Artur <felipefac@gmail.com> | 2017-09-14 11:54:19 -0300 |
commit | 7733e8c3784a926e98ca54a4e29339a843af05f2 (patch) | |
tree | ca2433bd4985b4f65d6ef3ebc56b92db987b2db1 | |
parent | 05cb181682acbf64da0013ec4031903344af7352 (diff) | |
download | gitlab-ce-7733e8c3784a926e98ca54a4e29339a843af05f2.tar.gz |
Add migration to fix corrupted projects
4 files changed, 47 insertions, 3 deletions
diff --git a/db/post_migrate/20170913150359_change_project_id_to_not_null_in_project_features.rb b/db/post_migrate/20170913150359_change_project_id_to_not_null_in_project_features.rb new file mode 100644 index 00000000000..20531c3fe29 --- /dev/null +++ b/db/post_migrate/20170913150359_change_project_id_to_not_null_in_project_features.rb @@ -0,0 +1,15 @@ +class ChangeProjectIdToNotNullInProjectFeatures < ActiveRecord::Migration + DOWNTIME = false + + def up + # Deletes corrupted project features + delete_project_features_sql = "DELETE FROM project_features WHERE project_id IS NULL" + execute(delete_project_features_sql) + + change_column_null :project_features, :project_id, false + end + + def down + change_column_null :project_features, :project_id, true + end +end diff --git a/db/post_migrate/20170913180600_fix_projects_without_project_feature.rb b/db/post_migrate/20170913180600_fix_projects_without_project_feature.rb new file mode 100644 index 00000000000..76e75837304 --- /dev/null +++ b/db/post_migrate/20170913180600_fix_projects_without_project_feature.rb @@ -0,0 +1,29 @@ +class FixProjectsWithoutProjectFeature < ActiveRecord::Migration + DOWNTIME = false + + def up + # Creates missing project features with private visibility + sql = + %Q{ + INSERT INTO project_features(project_id, repository_access_level, issues_access_level, merge_requests_access_level, wiki_access_level, + builds_access_level, snippets_access_level, created_at, updated_at) + SELECT projects.id as project_id, + 10 as repository_access_level, + 10 as issues_access_level, + 10 as merge_requests_access_level, + 10 as wiki_access_level, + 10 as builds_access_level , + 10 as snippets_access_level, + projects.created_at, + projects.updated_at + FROM "projects" + LEFT OUTER JOIN project_features ON project_features.project_id = projects.id + WHERE (project_features.id IS NULL) + } + + execute(sql) + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index 3e2c407ddfc..04680f5ddf6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170824162758) do +ActiveRecord::Schema.define(version: 20170913180600) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1113,7 +1113,7 @@ ActiveRecord::Schema.define(version: 20170824162758) do add_index "project_authorizations", ["user_id", "project_id", "access_level"], name: "index_project_authorizations_on_user_id_project_id_access_level", unique: true, using: :btree create_table "project_features", force: :cascade do |t| - t.integer "project_id" + t.integer "project_id", null: false t.integer "merge_requests_access_level" t.integer "issues_access_level" t.integer "wiki_access_level" diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb index d6955d78ab3..faf24cc9ca4 100644 --- a/spec/services/projects/update_service_spec.rb +++ b/spec/services/projects/update_service_spec.rb @@ -58,7 +58,7 @@ describe Projects::UpdateService, '#execute' do end end - context 'When project visibility is higher than parent group' do + context 'when project visibility is higher than parent group' do let(:group) { create(:group, visibility_level: Gitlab::VisibilityLevel::INTERNAL) } before do |