]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2986 Incorrect list of versions in changelog for profile
authorJulien Lancelot <julien.lancelot@gmail.com>
Tue, 20 Aug 2013 09:05:13 +0000 (11:05 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Tue, 20 Aug 2013 09:05:13 +0000 (11:05 +0200)
plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
sonar-server/src/main/java/org/sonar/server/configuration/ProfilesManager.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/profiles_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/models/profile.rb
sonar-server/src/main/webapp/WEB-INF/app/views/profiles/changelog.html.erb

index eb291c817c1ae0c406441a9c04be65960017473d..aadb9ace5bd4fbc003b47244ae53e6bb35c0fb62 100644 (file)
@@ -1414,10 +1414,12 @@ quality_profiles.projects_warning=List of projects explicitly associated to this
 quality_profiles.including_x_overriding.suffix=, incl. {0} overriding
 quality_profiles.set_parent=Set parent
 quality_profiles.inherit_rules_from_profile=Inherit rules configuration from the profile
-quality_profiles.no_changes_done_on_this_profile=No changes have been made on this quality profile.
+quality_profiles.not_used=This Quality Profile has not yet being used so changes are not yet tracked.
+quality_profiles.first_use_without_change=No changes has occurred since first use of this Quality Profile.
 quality_profiles.changelog_from=Changelog from
 quality_profiles.no_version=no version
 quality_profiles.last_version_x_with_date=last version {0} ({1})
+quality_profiles.version_1=version 1
 quality_profiles.version_x_with_date=version {0} ({1})
 quality_profiles.profile_version=Profile version
 quality_profiles.severity_changed_from_x_to=Severity changed from {0}<b>{1}</b> to
@@ -1444,6 +1446,7 @@ quality_profiles.remove_projects_confirm_message=Are you sure that you want to d
 quality_profiles.remove_projects_confirm_button=Remove All
 quality_profiles.copy_x_title=Copy Profile {0}
 quality_profiles.copy_new_name=New name
+quality_profiles.
 
 #------------------------------------------------------------------------------
 #
index 365df45b72f59a6cbc966e9ba047eb5011bafe87..9aa9c6ccbb9f511b85a74a2544e933df5e844a2b 100644 (file)
@@ -23,11 +23,7 @@ import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.profiles.RulesProfile;
-import org.sonar.api.rules.ActiveRule;
-import org.sonar.api.rules.ActiveRuleChange;
-import org.sonar.api.rules.Rule;
-import org.sonar.api.rules.RuleParam;
-import org.sonar.api.rules.RulePriority;
+import org.sonar.api.rules.*;
 import org.sonar.api.utils.ValidationMessages;
 import org.sonar.jpa.dao.BaseDao;
 import org.sonar.jpa.dao.RulesDao;
@@ -232,15 +228,21 @@ public class ProfilesManager extends BaseDao {
     }
   }
 
+  private synchronized boolean shouldTrackChanges(RulesProfile profile) {
+    return profile.getVersion() > 1 || profile.getVersion() == 1 && profile.getUsed();
+  }
+
   /**
    * Deal with creation of ActiveRuleChange item when a rule param is changed on a profile
    */
   private void ruleParamChanged(RulesProfile profile, Rule rule, String paramKey, String oldValue, String newValue, String userName) {
-    incrementProfileVersionIfNeeded(profile);
-    ActiveRuleChange rc = new ActiveRuleChange(userName, profile, rule);
-    if (!StringUtils.equals(oldValue, newValue)) {
-      rc.setParameterChange(paramKey, oldValue, newValue);
-      getSession().saveWithoutFlush(rc);
+    if (shouldTrackChanges(profile)) {
+      incrementProfileVersionIfNeeded(profile);
+      ActiveRuleChange rc = new ActiveRuleChange(userName, profile, rule);
+      if (!StringUtils.equals(oldValue, newValue)) {
+        rc.setParameterChange(paramKey, oldValue, newValue);
+        getSession().saveWithoutFlush(rc);
+      }
     }
   }
 
@@ -248,12 +250,14 @@ public class ProfilesManager extends BaseDao {
    * Deal with creation of ActiveRuleChange item when a rule severity is changed on a profile
    */
   private void ruleSeverityChanged(RulesProfile profile, Rule rule, RulePriority oldSeverity, RulePriority newSeverity, String userName) {
-    incrementProfileVersionIfNeeded(profile);
-    ActiveRuleChange rc = new ActiveRuleChange(userName, profile, rule);
-    if (!ObjectUtils.equals(oldSeverity, newSeverity)) {
-      rc.setOldSeverity(oldSeverity);
-      rc.setNewSeverity(newSeverity);
-      getSession().saveWithoutFlush(rc);
+    if (shouldTrackChanges(profile)) {
+      incrementProfileVersionIfNeeded(profile);
+      ActiveRuleChange rc = new ActiveRuleChange(userName, profile, rule);
+      if (!ObjectUtils.equals(oldSeverity, newSeverity)) {
+        rc.setOldSeverity(oldSeverity);
+        rc.setNewSeverity(newSeverity);
+        getSession().saveWithoutFlush(rc);
+      }
     }
   }
 
@@ -261,62 +265,68 @@ public class ProfilesManager extends BaseDao {
    * Deal with creation of ActiveRuleChange item when a rule is changed (severity and/or param(s)) on a profile
    */
   private void ruleChanged(RulesProfile profile, ActiveRule oldActiveRule, ActiveRule newActiveRule, String userName) {
-    incrementProfileVersionIfNeeded(profile);
-    ActiveRuleChange rc = new ActiveRuleChange(userName, profile, newActiveRule.getRule());
+    if (shouldTrackChanges(profile)) {
+      incrementProfileVersionIfNeeded(profile);
+      ActiveRuleChange rc = new ActiveRuleChange(userName, profile, newActiveRule.getRule());
 
-    if (oldActiveRule.getSeverity() != newActiveRule.getSeverity()) {
-      rc.setOldSeverity(oldActiveRule.getSeverity());
-      rc.setNewSeverity(newActiveRule.getSeverity());
-    }
-    if (oldActiveRule.getRule().getParams() != null) {
-      for (RuleParam p : oldActiveRule.getRule().getParams()) {
-        String oldParam = oldActiveRule.getParameter(p.getKey());
-        String newParam = newActiveRule.getParameter(p.getKey());
-        if (!StringUtils.equals(oldParam, newParam)) {
-          rc.setParameterChange(p.getKey(), oldParam, newParam);
+      if (oldActiveRule.getSeverity() != newActiveRule.getSeverity()) {
+        rc.setOldSeverity(oldActiveRule.getSeverity());
+        rc.setNewSeverity(newActiveRule.getSeverity());
+      }
+      if (oldActiveRule.getRule().getParams() != null) {
+        for (RuleParam p : oldActiveRule.getRule().getParams()) {
+          String oldParam = oldActiveRule.getParameter(p.getKey());
+          String newParam = newActiveRule.getParameter(p.getKey());
+          if (!StringUtils.equals(oldParam, newParam)) {
+            rc.setParameterChange(p.getKey(), oldParam, newParam);
+          }
         }
       }
-    }
 
-    getSession().saveWithoutFlush(rc);
+      getSession().saveWithoutFlush(rc);
+    }
   }
 
   /**
    * Deal with creation of ActiveRuleChange item when a rule is enabled on a profile
    */
   private void ruleEnabled(RulesProfile profile, ActiveRule newActiveRule, String userName) {
-    incrementProfileVersionIfNeeded(profile);
-    ActiveRuleChange rc = new ActiveRuleChange(userName, profile, newActiveRule.getRule());
-    rc.setEnabled(true);
-    rc.setNewSeverity(newActiveRule.getSeverity());
-    if (newActiveRule.getRule().getParams() != null) {
-      for (RuleParam p : newActiveRule.getRule().getParams()) {
-        String newParam = newActiveRule.getParameter(p.getKey());
-        if (newParam != null) {
-          rc.setParameterChange(p.getKey(), null, newParam);
+    if (shouldTrackChanges(profile)) {
+      incrementProfileVersionIfNeeded(profile);
+      ActiveRuleChange rc = new ActiveRuleChange(userName, profile, newActiveRule.getRule());
+      rc.setEnabled(true);
+      rc.setNewSeverity(newActiveRule.getSeverity());
+      if (newActiveRule.getRule().getParams() != null) {
+        for (RuleParam p : newActiveRule.getRule().getParams()) {
+          String newParam = newActiveRule.getParameter(p.getKey());
+          if (newParam != null) {
+            rc.setParameterChange(p.getKey(), null, newParam);
+          }
         }
       }
+      getSession().saveWithoutFlush(rc);
     }
-    getSession().saveWithoutFlush(rc);
   }
 
   /**
    * Deal with creation of ActiveRuleChange item when a rule is disabled on a profile
    */
   private void ruleDisabled(RulesProfile profile, ActiveRule disabledRule, String userName) {
-    incrementProfileVersionIfNeeded(profile);
-    ActiveRuleChange rc = new ActiveRuleChange(userName, profile, disabledRule.getRule());
-    rc.setEnabled(false);
-    rc.setOldSeverity(disabledRule.getSeverity());
-    if (disabledRule.getRule().getParams() != null) {
-      for (RuleParam p : disabledRule.getRule().getParams()) {
-        String oldParam = disabledRule.getParameter(p.getKey());
-        if (oldParam != null) {
-          rc.setParameterChange(p.getKey(), oldParam, null);
+    if (shouldTrackChanges(profile)) {
+      incrementProfileVersionIfNeeded(profile);
+      ActiveRuleChange rc = new ActiveRuleChange(userName, profile, disabledRule.getRule());
+      rc.setEnabled(false);
+      rc.setOldSeverity(disabledRule.getSeverity());
+      if (disabledRule.getRule().getParams() != null) {
+        for (RuleParam p : disabledRule.getRule().getParams()) {
+          String oldParam = disabledRule.getParameter(p.getKey());
+          if (oldParam != null) {
+            rc.setParameterChange(p.getKey(), oldParam, null);
+          }
         }
       }
+      getSession().saveWithoutFlush(rc);
     }
-    getSession().saveWithoutFlush(rc);
   }
 
   private void activateOrChange(RulesProfile profile, ActiveRule parentActiveRule, String userName) {
index 7c6447e77c835b1491ee23cebdac844f74b69d48..acbf1540eed3d3cdd8755560ace87cb04e54f70b 100644 (file)
@@ -201,7 +201,7 @@ class ProfilesController < ApplicationController
     versions = ActiveRuleChange.all(:select => 'profile_version, MAX(change_date) AS change_date', :conditions => ['profile_id=?', @profile.id], :group => 'profile_version')
     versions.sort! { |a, b| b.profile_version <=> a.profile_version }
 
-    if !versions.empty?
+    unless versions.empty?
       last_version = versions[0].profile_version
       if params[:since].blank?
         @since_version = last_version - 1
@@ -218,7 +218,9 @@ class ProfilesController < ApplicationController
       end
       @changes = ActiveRuleChange.all(:conditions => ['profile_id=? and ?<profile_version and profile_version<=?', @profile.id, @since_version, @to_version], :order => 'id desc')
 
-      @select_versions = versions.map { |u| [message(u.profile_version == last_version ? 'quality_profiles.last_version_x_with_date' : 'quality_profiles.version_x_with_date', :params => [u.profile_version.to_s, l(u.change_date)]), u.profile_version] } | [[message('quality_profiles.no_version'), 0]];
+      @select_versions = versions.map { |u| [message(u.profile_version == last_version ? 'quality_profiles.last_version_x_with_date' : 'quality_profiles.version_x_with_date',
+                                                     :params => [u.profile_version.to_s, l(u.change_date)]), u.profile_version] } |
+          [[message('quality_profiles.version_1'), 0]]
     end
 
     set_profile_breadcrumbs
index 05cc0dcaafc69358254ddff369c49e055d4a3fdb..8316ee26cb73d15d10a99670fd2a02915350a73f 100644 (file)
@@ -72,7 +72,7 @@ class Profile < ActiveRecord::Base
 
   def self.options_for_select
     array=[]
-    Profile.find(:all, :order => 'name').each do |profile|
+    Profile.all(:order => 'name').each do |profile|
       label = profile.name
       label = label + ' (active)' if profile.default_profile?
       array<<[label, profile.id]
@@ -111,7 +111,7 @@ class Profile < ActiveRecord::Base
     @parent||=
       begin
         if parent_name.present?
-          Profile.find(:first, :conditions => ['language=? and name=?', language, parent_name])
+          Profile.first(:conditions => ['language=? and name=?', language, parent_name])
         else
           nil
         end
@@ -121,7 +121,7 @@ class Profile < ActiveRecord::Base
   def children
     @children ||=
       begin
-        Profile.find(:all, :conditions => ['parent_name=? and language=?', name, language])
+        Profile.all(:conditions => ['parent_name=? and language=?', name, language])
       end
   end
 
@@ -187,8 +187,7 @@ class Profile < ActiveRecord::Base
   def projects
     @projects ||=
       begin
-        Project.find(:all,
-                     :joins => 'LEFT JOIN properties ON properties.resource_id = projects.id',
+        Project.all(:joins => 'LEFT JOIN properties ON properties.resource_id = projects.id',
                      :conditions => ['properties.resource_id is not null and properties.prop_key=? and properties.text_value like ?', "sonar.profile.#{language}", name])
       end
   end
@@ -236,15 +235,15 @@ class Profile < ActiveRecord::Base
 
   def self.by_default(language)
     default_name = Property.value("sonar.profile.#{language}")
-    default_name.present? ? Profile.find(:first, :conditions => {:name => default_name, :language => language}) : nil
+    default_name.present? ? Profile.first(:conditions => {:name => default_name, :language => language}) : nil
   end
 
   # Results are NOT sorted
   def self.all_by_language(language)
-    Profile.find(:all, :conditions => {:language => language})
+    Profile.all(:conditions => {:language => language})
   end
 
   def self.find_by_name_and_language(name, language)
-    Profile.find(:first, :conditions => {:name => name, :language => language})
+    Profile.first(:conditions => {:name => name, :language => language})
   end
 end
\ No newline at end of file
index c78dd2d55472d9b0d84634395c61840f9a1db574..e1737027d98ddce07c53322e26fbf30336f7b683 100644 (file)
@@ -2,7 +2,11 @@
 
 <div class="tabs-panel marginbottom10">
   <% if @select_versions.nil? %>
-    <%= message('quality_profiles.no_changes_done_on_this_profile') -%>
+    <% if !@profile.used_profile %>
+      <%= message('quality_profiles.not_used') -%>
+    <% else %>
+      <%= message('quality_profiles.first_use_without_change') -%>
+    <% end %>
   <% else %>
 
   <% form_tag({:action => 'changelog'}, {:method => 'post', :class => 'marginbottom10'}) do %>