From c94de7df84542f4cfb49a6a2e7144b79b4999929 Mon Sep 17 00:00:00 2001 From: Michal Duda Date: Tue, 11 Dec 2018 10:37:39 +0100 Subject: [PATCH] SONAR-11523 migrate module lvl properties --- .../version/v76/MigrateModuleProperties.java | 13 +++-- .../v76/MigrateModulePropertiesTest.java | 48 ++++++++++++------- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v76/MigrateModuleProperties.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v76/MigrateModuleProperties.java index 0194084578c..438b3f1b2c7 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v76/MigrateModuleProperties.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v76/MigrateModuleProperties.java @@ -20,8 +20,8 @@ package org.sonar.server.platform.db.migration.version.v76; import java.sql.SQLException; -import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; +import org.apache.commons.lang.StringUtils; import org.sonar.api.utils.System2; import org.sonar.db.Database; import org.sonar.server.platform.db.migration.SupportsBlueGreen; @@ -57,7 +57,7 @@ public class MigrateModuleProperties extends DataChange { "from properties prop " + "left join projects mod on mod.id = prop.resource_id " + "left join projects root on root.uuid = mod.project_uuid " + - "where mod.qualifier = 'BRC'" + + "where mod.qualifier = 'BRC' and prop.user_id is null " + "order by root.uuid, mod.uuid, prop.prop_key") .scroll(row -> { String propertyKey = row.getString(1); @@ -85,8 +85,13 @@ public class MigrateModuleProperties extends DataChange { currentModuleUuid.set(moduleUuid); } - Optional.ofNullable(Optional.ofNullable(propertyTextValue).orElse(propertyClobValue)) - .ifPresent(value -> builder.append(propertyKey).append("=").append(value).append("\n")); + builder.append(propertyKey).append("="); + if (StringUtils.isNotBlank(propertyTextValue)) { + builder.append(propertyTextValue); + } else if (StringUtils.isNotBlank(propertyClobValue)) { + builder.append(propertyClobValue); + } + builder.append("\n"); }); if (builder.length() > 0) { diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v76/MigrateModulePropertiesTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v76/MigrateModulePropertiesTest.java index 5dd8652de55..48457d95013 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v76/MigrateModulePropertiesTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v76/MigrateModulePropertiesTest.java @@ -71,8 +71,8 @@ public class MigrateModulePropertiesTest { public void single_module_project_migration() throws SQLException { String project2Uuid = uuidFactory.create(); insertComponent(5, project2Uuid, null, project2Uuid, Qualifiers.PROJECT, "Single module project"); - insertProperty(9, 5, "sonar.coverage.exclusions", "SingleModuleA.java"); - insertProperty(10, 5, "sonar.cp.exclusions", "SingleModuleB.java"); + insertProperty(9, 5, "sonar.coverage.exclusions", "SingleModuleA.java", null); + insertProperty(10, 5, "sonar.cp.exclusions", "SingleModuleB.java", null); underTest.execute(); @@ -112,14 +112,15 @@ public class MigrateModulePropertiesTest { "NAME", name); } - private void insertProperty(long id, long componentId, String key, String value) { + private void insertProperty(long id, long componentId, String key, String value, Long userId) { db.executeInsert( "properties", "ID", valueOf(id), "RESOURCE_ID", componentId, "PROP_KEY", key, "TEXT_VALUE", value, - "IS_EMPTY", false); + "IS_EMPTY", false, + "USER_ID", userId); } private void setupMultiModuleProject() { @@ -127,18 +128,26 @@ public class MigrateModulePropertiesTest { String moduleUuid = uuidFactory.create(); String subModule1Uuid = uuidFactory.create(); String subModule2Uuid = uuidFactory.create(); + String subModule3Uuid = uuidFactory.create(); + String subModule4Uuid = uuidFactory.create(); + String subModule5Uuid = uuidFactory.create(); insertComponent(1, projectUuid, null, projectUuid, Qualifiers.PROJECT, "Multi-module project"); insertComponent(2, moduleUuid, projectUuid, projectUuid, Qualifiers.MODULE, "Module"); insertComponent(3, subModule1Uuid, moduleUuid, projectUuid, Qualifiers.MODULE, "Submodule 1"); insertComponent(4, subModule2Uuid, moduleUuid, projectUuid, Qualifiers.MODULE, "Submodule 2"); - insertProperty(1, 1, "sonar.coverage.exclusions", "Proj1.java"); - insertProperty(2, 1, "sonar.cpd.exclusions", "Proj2.java"); - insertProperty(3, 2, "sonar.coverage.exclusions", "ModuleA.java"); - insertProperty(4, 2, "sonar.cpd.exclusions", "ModuleB.java"); - insertProperty(5, 3, "sonar.coverage.exclusions", "Module1A.java"); - insertProperty(6, 3, "sonar.cpd.exclusions", "Moddule1B.java"); - insertProperty(7, 4, "sonar.coverage.exclusions", "Module2A.java"); - insertProperty(8, 4, "sonar.cpd.exclusions", "Module2B.java"); + insertComponent(5, subModule3Uuid, moduleUuid, projectUuid, Qualifiers.MODULE, "Submodule with reset property"); + insertComponent(6, subModule4Uuid, moduleUuid, projectUuid, Qualifiers.MODULE, "Submodule without properties"); + insertComponent(7, subModule5Uuid, moduleUuid, projectUuid, Qualifiers.MODULE, "Submodule with user property"); + insertProperty(1, 1, "sonar.coverage.exclusions", "Proj1.java", null); + insertProperty(2, 1, "sonar.cpd.exclusions", "Proj2.java", null); + insertProperty(3, 2, "sonar.coverage.exclusions", "ModuleA.java", null); + insertProperty(4, 2, "sonar.cpd.exclusions", "ModuleB.java", null); + insertProperty(5, 3, "sonar.coverage.exclusions", "Module1A.java", null); + insertProperty(6, 3, "sonar.cpd.exclusions", "Moddule1B.java", null); + insertProperty(7, 4, "sonar.coverage.exclusions", "Module2A.java", null); + insertProperty(8, 4, "sonar.cpd.exclusions", "Module2B.java", null); + insertProperty(9, 5, "sonar.coverage.exclusions", null, null); + insertProperty(10, 7, "favourite", null, 5L); } private void verifyMultiModuleProjectMigration() { @@ -152,7 +161,10 @@ public class MigrateModulePropertiesTest { "\n" + "# Settings from 'Multi-module project::Submodule 2'\n" + "sonar.coverage.exclusions=Module2A.java\n" + - "sonar.cpd.exclusions=Module2B.java\n"; + "sonar.cpd.exclusions=Module2B.java\n" + + "\n" + + "# Settings from 'Multi-module project::Submodule with reset property'\n" + + "sonar.coverage.exclusions=\n"; List> properties = db .select(String.format("select ID, TEXT_VALUE, CLOB_VALUE from properties where PROP_KEY='%s' and RESOURCE_ID = 1", @@ -167,10 +179,10 @@ public class MigrateModulePropertiesTest { private void setupSecondMultiModuleProject() { String project3Uuid = uuidFactory.create(); String singleModuleUuid = uuidFactory.create(); - insertComponent(6, project3Uuid, null, project3Uuid, Qualifiers.PROJECT, "Another multi-module project"); - insertComponent(7, singleModuleUuid, project3Uuid, project3Uuid, Qualifiers.MODULE, "Module X"); - insertProperty(11, 6, "sonar.coverage.exclusions", "InRoot.java"); - insertProperty(12, 7, "sonar.coverage.exclusions", "InModule.java"); + insertComponent(8, project3Uuid, null, project3Uuid, Qualifiers.PROJECT, "Another multi-module project"); + insertComponent(9, singleModuleUuid, project3Uuid, project3Uuid, Qualifiers.MODULE, "Module X"); + insertProperty(11, 8, "sonar.coverage.exclusions", "InRoot.java", null); + insertProperty(12, 9, "sonar.coverage.exclusions", "InModule.java", null); } private void verifySecondMultiModuleProjectMigration() { @@ -179,7 +191,7 @@ public class MigrateModulePropertiesTest { List> properties = db.select(String.format("select ID, TEXT_VALUE, CLOB_VALUE " + "from properties " + - "where PROP_KEY='%s' and RESOURCE_ID = 6", NEW_PROPERTY_NAME)); + "where PROP_KEY='%s' and RESOURCE_ID = 8", NEW_PROPERTY_NAME)); assertThat(properties).hasSize(1); Map project2Property = properties.get(0); -- 2.39.5