Commit 5f10cc86 authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

Added the ability to set the "done ratio" of issues fixed by commit (original…

Added the ability to set the "done ratio" of issues fixed by commit (original path by Nikolay Solakov, slightly edited).

git-svn-id: http://redmine.rubyforge.org/svn/trunk@821 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent 45203143
......@@ -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
......
......@@ -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>
......
......@@ -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:
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment