]> source.dussan.org Git - redmine.git/commitdiff
Added the ability to set the "done ratio" of issues fixed by commit (original path...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 10 Oct 2007 18:56:59 +0000 (18:56 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 10 Oct 2007 18:56:59 +0000 (18:56 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@821 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/changeset.rb
app/views/settings/edit.rhtml
config/settings.yml
test/unit/repository_test.rb

index 330338ab130a2b4a71ee80f495b2f90f4c5eaab0..21e14fc0df5c7b7b651ecec27e255f7bb6a627cc 100644 (file)
@@ -55,8 +55,9 @@ class Changeset < ActiveRecord::Base
     ref_keywords = Setting.commit_ref_keywords.downcase.split(",")
     # keywords used to fix issues
     fix_keywords = Setting.commit_fix_keywords.downcase.split(",")
-    # status applied
+    # status and optional done ratio applied
     fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
+    done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
     
     kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw.strip)}.join("|")
     return if kw_regexp.blank?
@@ -75,6 +76,7 @@ class Changeset < ActiveRecord::Base
           # don't change the status is the issue is already closed
           next if issue.status.is_closed?
           issue.status = fix_status
+          issue.done_ratio = done_ratio if done_ratio
           issue.save
         end
       end
index 736e6c421b25b6a72ecce9eb413cef6718c1d808..503339884648e1c0727fc1f693f152d6a0cb9be6 100644 (file)
@@ -85,6 +85,7 @@
 <p><label><%= l(:setting_commit_fix_keywords) %></label>
 <%= text_field_tag 'settings[commit_fix_keywords]', Setting.commit_fix_keywords, :size => 30 %>
 &nbsp;<%= l(:label_applied_status) %>: <%= select_tag 'settings[commit_fix_status_id]', options_for_select( [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, Setting.commit_fix_status_id) %>
+&nbsp;<%= l(:field_done_ratio) %>: <%= select_tag 'settings[commit_fix_done_ratio]', options_for_select( [[l(:label_no_change_option), '']] + ((0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }), Setting.commit_fix_done_ratio) %>
 <br /><em><%= l(:text_comma_separated) %></em></p>
 </fieldset>
 
index e2897775eeed08268f8ece53578a768ce20a1328..f0591ba5ae443461a1d753ad66d53152db9c70e0 100644 (file)
@@ -61,6 +61,9 @@ commit_fix_keywords:
 commit_fix_status_id:
   format: int
   default: 0
+commit_fix_done_ratio:
+  format: int
+  default: 100
 # autologin duration in days
 # 0 means autologin is disabled 
 autologin:
index bc2fa626c39bf1b1775467b1407bb6979aa96b5d..ea2122aa7a2d0507d0395b0c0446fa498ee4eee2 100644 (file)
@@ -39,7 +39,8 @@ class RepositoryTest < Test::Unit::TestCase
   def test_scan_changesets_for_issue_ids
     # choosing a status to apply to fix issues
     Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
-    
+    Setting.commit_fix_done_ratio = "90"
+
     # make sure issue 1 is not already closed
     assert !Issue.find(1).status.is_closed?
         
@@ -47,8 +48,10 @@ class RepositoryTest < Test::Unit::TestCase
     assert_equal [101, 102], Issue.find(3).changeset_ids
     
     # fixed issues
-    assert Issue.find(1).status.is_closed?
-    assert_equal [101], Issue.find(1).changeset_ids
+    fixed_issue = Issue.find(1)
+    assert fixed_issue.status.is_closed?
+    assert_equal 90, fixed_issue.done_ratio
+    assert_equal [101], fixed_issue.changeset_ids
     
     # ignoring commits referencing an issue of another project
     assert_equal [], Issue.find(4).changesets