diff -ur redmine-1.1.0/app/models/changeset.rb redmine-1.1.0-commit-update/app/models/changeset.rb --- redmine-1.1.0/app/models/changeset.rb 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-commit-update/app/models/changeset.rb 2011-01-25 17:57:11.871370800 -0700 @@ -110,10 +110,25 @@ # keywords used to reference issues ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip) ref_keywords_any = ref_keywords.delete('*') - # keywords used to fix issues - fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip) - - kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|") + + ref_updates = + [ { :keywords => Setting.commit_update1_keywords.downcase.split(",").collect(&:strip), + :status_id => Setting.commit_update1_status_id, + :done_ratio => Setting.commit_update1_done_ratio }, + { :keywords => Setting.commit_update2_keywords.downcase.split(",").collect(&:strip), + :status_id => Setting.commit_update2_status_id, + :done_ratio => Setting.commit_update2_done_ratio }, + { :keywords => Setting.commit_update3_keywords.downcase.split(",").collect(&:strip), + :status_id => Setting.commit_update3_status_id, + :done_ratio => Setting.commit_update3_done_ratio }, + { :keywords => Setting.commit_update4_keywords.downcase.split(",").collect(&:strip), + :status_id => Setting.commit_update4_status_id, + :done_ratio => Setting.commit_update4_done_ratio }, + { :keywords => Setting.commit_update5_keywords.downcase.split(",").collect(&:strip), + :status_id => Setting.commit_update5_status_id, + :done_ratio => Setting.commit_update5_done_ratio } ] + + kw_regexp = (ref_keywords + ref_updates.collect{|u| u[:keywords]}.flatten).collect{|kw| Regexp.escape(kw)}.join("|") referenced_issues = [] @@ -124,8 +139,10 @@ refs.scan(/#(\d+)(\s+@#{TIMELOG_RE})?/).each do |m| issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2] if issue - referenced_issues << issue - fix_issue(issue) if fix_keywords.include?(action.to_s.downcase) + referenced_issues << issue + ref_updates.each do |u| + update_issue(issue, u[:status_id], u[:done_ratio]) if u[:keywords].include?(action.to_s.downcase) + end log_time(issue, hours) if hours && Setting.commit_logtime_enabled? end end @@ -190,10 +207,10 @@ issue end - def fix_issue(issue) - status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i) + def update_issue(issue, status_id, done_ratio) + status = IssueStatus.find_by_id(status_id.to_i) if status.nil? - logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger + logger.warn("No status macthes commit_update_status_id setting (#{status_id})") if logger return issue end @@ -204,8 +221,8 @@ journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, text_tag)) issue.status = status - unless Setting.commit_fix_done_ratio.blank? - issue.done_ratio = Setting.commit_fix_done_ratio.to_i + unless done_ratio.blank? + issue.done_ratio = done_ratio.to_i end Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, { :changeset => self, :issue => issue }) Only in redmine-1.1.0-commit-update/app/models: changeset.rb.orig Only in redmine-1.1.0-commit-update/app/models: changeset.rb.rej diff -ur redmine-1.1.0/app/views/settings/_repositories.rhtml redmine-1.1.0-commit-update/app/views/settings/_repositories.rhtml --- redmine-1.1.0/app/views/settings/_repositories.rhtml 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-commit-update/app/views/settings/_repositories.rhtml 2011-01-25 17:05:58.109793000 -0700 @@ -27,9 +27,29 @@

<%= setting_text_field :commit_ref_keywords, :size => 30 %>
<%= l(:text_comma_separated) %>

-

<%= setting_text_field :commit_fix_keywords, :size => 30 %> - <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> - <%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> +

<%= setting_text_field :commit_update1_keywords, :size => 30 %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_update1_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_update1_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> +
<%= l(:text_comma_separated) %>

+ +

<%= setting_text_field :commit_update2_keywords, :size => 30 %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_update2_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_update2_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> +
<%= l(:text_comma_separated) %>

+ +

<%= setting_text_field :commit_update3_keywords, :size => 30 %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_update3_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_update3_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> +
<%= l(:text_comma_separated) %>

+ +

<%= setting_text_field :commit_update4_keywords, :size => 30 %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_update4_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_update4_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %> +
<%= l(:text_comma_separated) %>

+ +

<%= setting_text_field :commit_update5_keywords, :size => 30 %> + <%= l(:label_applied_status) %>: <%= setting_select :commit_update5_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %> + <%= l(:field_done_ratio) %>: <%= setting_select :commit_update5_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %>
<%= l(:text_comma_separated) %>

<%= setting_check_box :commit_logtime_enabled, diff -ur redmine-1.1.0/config/locales/en.yml redmine-1.1.0-commit-update/config/locales/en.yml --- redmine-1.1.0/config/locales/en.yml 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-commit-update/config/locales/en.yml 2011-01-25 17:01:25.799035800 -0700 @@ -323,7 +323,11 @@ setting_autofetch_changesets: Autofetch commits setting_sys_api_enabled: Enable WS for repository management setting_commit_ref_keywords: Referencing keywords - setting_commit_fix_keywords: Fixing keywords + setting_commit_update1_keywords: Keywords + setting_commit_update2_keywords: Keywords + setting_commit_update3_keywords: Keywords + setting_commit_update4_keywords: Keywords + setting_commit_update5_keywords: Keywords setting_autologin: Autologin setting_date_format: Date format setting_time_format: Time format @@ -872,7 +876,7 @@ text_unallowed_characters: Unallowed characters text_comma_separated: Multiple values allowed (comma separated). text_line_separated: Multiple values allowed (one line for each value). - text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages + text_issues_ref_in_commit_messages: Referencing and updating issues in commit messages text_issue_added: "Issue %{id} has been reported by %{author}." text_issue_updated: "Issue %{id} has been updated by %{author}." text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ? diff -ur redmine-1.1.0/config/settings.yml redmine-1.1.0-commit-update/config/settings.yml --- redmine-1.1.0/config/settings.yml 2011-01-09 17:05:00.000000000 -0700 +++ redmine-1.1.0-commit-update/config/settings.yml 2011-01-25 16:57:19.159989300 -0700 @@ -92,14 +92,48 @@ default: 0 sys_api_key: default: '' +# commit actions commit_ref_keywords: default: 'refs,references,IssueID' -commit_fix_keywords: +# commit update 1 +commit_update1_keywords: default: 'fixes,closes' -commit_fix_status_id: +commit_update1_status_id: format: int default: 0 -commit_fix_done_ratio: +commit_update1_done_ratio: + default: 100 +# commit update 2 +commit_update2_keywords: + default: '' +commit_update2_status_id: + format: int + default: 0 +commit_update2_done_ratio: + default: 100 +# commit update 3 +commit_update3_keywords: + default: '' +commit_update3_status_id: + format: int + default: 0 +commit_update3_done_ratio: + default: 100 +# commitupdate 4 +commit_update4_keywords: + default: '' +commit_update4_status_id: + format: int + default: 0 +commit_update4_done_ratio: + default: 100 +# commit update 5 +commit_update5_keywords: + default: '' +commit_update5_status_id: + format: int + default: 0 +commit_update5_done_ratio: default: 100 commit_logtime_enabled: default: 0