From: Julien HENRY Date: Thu, 5 Dec 2013 15:05:04 +0000 (+0100) Subject: SONAR-4535 Do not provision project when unable to apply permission template X-Git-Tag: 4.1-RC1~50 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=40e737e1cb8a0e890e22327a8721f5b41a01cc61;p=sonarqube.git SONAR-4535 Do not provision project when unable to apply permission template --- diff --git a/sonar-server/src/main/java/org/sonar/server/component/DefaultRubyComponentService.java b/sonar-server/src/main/java/org/sonar/server/component/DefaultRubyComponentService.java index 2ff89f43939..1aecb99a500 100644 --- a/sonar-server/src/main/java/org/sonar/server/component/DefaultRubyComponentService.java +++ b/sonar-server/src/main/java/org/sonar/server/component/DefaultRubyComponentService.java @@ -57,8 +57,8 @@ public class DefaultRubyComponentService implements RubyComponentService { return resourceDao.findByKey(key); } - public void createComponent(String kee, String name, String qualifier) { - ComponentDto component = (ComponentDto)resourceDao.findByKey(kee); + public Long createComponent(String kee, String name, String qualifier) { + ComponentDto component = (ComponentDto) resourceDao.findByKey(kee); if (component != null) { throw new BadRequestException(formatMessage("Could not create %s, key already exists: %s", qualifier, kee)); } @@ -72,11 +72,12 @@ public class DefaultRubyComponentService implements RubyComponentService { .setScope(Scopes.PROJECT) .setQualifier(qualifier) .setCreatedAt(new Date())); - component = (ComponentDto)resourceDao.findByKey(kee); + component = (ComponentDto) resourceDao.findByKey(kee); if (component == null) { throw new BadRequestException(String.format("%s not created: %s", null, kee)); } resourceIndexerDao.indexResource(component.getId()); + return component.getId(); } public void updateComponent(Long id, String key, String name) { @@ -134,6 +135,6 @@ public class DefaultRubyComponentService implements RubyComponentService { } private String formatMessage(String message, String qualifier, String key) { - return String.format(message, i18n.message(Locale.getDefault(), "qualifier."+qualifier, "Project"), key); + return String.format(message, i18n.message(Locale.getDefault(), "qualifier." + qualifier, "Project"), key); } } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/provisioning_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/provisioning_controller.rb index f2d6b35e371..9622f81f855 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/provisioning_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/provisioning_controller.rb @@ -45,8 +45,14 @@ class ProvisioningController < ApplicationController bad_request('provisioning.missing.name') if @name.blank? if @id.nil? or @id.empty? - Internal.component_api.createComponent(@key, @name, 'TRK') - Internal.permissions.applyDefaultPermissionTemplate(@key) + new_id = Internal.component_api.createComponent(@key, @name, 'TRK') + begin + Internal.permissions.applyDefaultPermissionTemplate(@key) + rescue + # Programmatic transaction rollback + Java::OrgSonarServerUi::JRubyFacade.getInstance().deleteResourceTree(new_id) + raise + end else Internal.component_api.updateComponent(@id.to_i, @key, @name) end