]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4535 Do not provision project when unable to apply permission template
authorJulien HENRY <julien.henry@sonarsource.com>
Thu, 5 Dec 2013 15:05:04 +0000 (16:05 +0100)
committerJulien HENRY <julien.henry@sonarsource.com>
Thu, 5 Dec 2013 15:05:04 +0000 (16:05 +0100)
sonar-server/src/main/java/org/sonar/server/component/DefaultRubyComponentService.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/provisioning_controller.rb

index 2ff89f4393959d39b45a1e0f9d8155cd74323369..1aecb99a500159e8b1a3556624512826a7471b15 100644 (file)
@@ -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);
   }
 }
index f2d6b35e371e2f6dc14e16c3cd4ededfaf3ee363..9622f81f855cf61d14b7ff9df565b0490039c53c 100644 (file)
@@ -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