Patch #7445 » commit-update-1.0.4.patch
| redmine-1.0.4-commit-update/app/models/changeset.rb 2011-01-21 16:31:45.922686700 -0700 | ||
|---|---|---|
| 81 | 81 | return if comments.blank? | 
| 82 | 82 | # keywords used to reference issues | 
| 83 | 83 |     ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
 | 
| 84 | # keywords used to fix issues | |
| 85 |     fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
 | |
| 86 |  | |
| 87 |     kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
 | |
| 84 |  | |
| 85 | # keywords used to update issues | |
| 86 |     keywords1 = Setting.commit_update1_keywords.downcase.split(",").collect(&:strip)
 | |
| 87 |     keywords2 = Setting.commit_update2_keywords.downcase.split(",").collect(&:strip)
 | |
| 88 |     keywords3 = Setting.commit_update3_keywords.downcase.split(",").collect(&:strip)
 | |
| 89 |     keywords4 = Setting.commit_update4_keywords.downcase.split(",").collect(&:strip)
 | |
| 90 |     keywords5 = Setting.commit_update5_keywords.downcase.split(",").collect(&:strip)
 | |
| 91 |  | |
| 92 |     kw_regexp = (ref_keywords + keywords1 + keywords2 + keywords3 + keywords4 + keywords5).collect{|kw| Regexp.escape(kw)}.join("|")
 | |
| 88 | 93 | return if kw_regexp.blank? | 
| 89 |  | |
| 94 |  | |
| 90 | 95 | referenced_issues = [] | 
| 91 | 96 |  | 
| 92 | 97 |     if ref_keywords.delete('*')
 | 
| ... | ... | |
| 95 | 100 |       comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
 | 
| 96 | 101 | referenced_issues += find_referenced_issues_by_id(target_issue_ids) | 
| 97 | 102 | end | 
| 98 |  | |
| 103 |  | |
| 99 | 104 |     comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
 | 
| 100 | 105 | action = match[0] | 
| 101 | 106 | target_issue_ids = match[1].scan(/\d+/) | 
| 102 | 107 | target_issues = find_referenced_issues_by_id(target_issue_ids) | 
| 103 | if fix_keywords.include?(action.downcase) && fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id) | |
| 104 | # update status of issues | |
| 105 |         logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
 | |
| 106 | target_issues.each do |issue| | |
| 107 | # the issue may have been updated by the closure of another one (eg. duplicate) | |
| 108 | issue.reload | |
| 109 | # don't change the status is the issue is closed | |
| 110 | next if issue.status.is_closed? | |
| 111 |           csettext = "r#{self.revision}"
 | |
| 112 | if self.scmid && (! (csettext =~ /^r[0-9]+$/)) | |
| 113 |             csettext = "commit:\"#{self.scmid}\""
 | |
| 114 | end | |
| 115 | journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext)) | |
| 116 | issue.status = fix_status | |
| 117 | unless Setting.commit_fix_done_ratio.blank? | |
| 118 | issue.done_ratio = Setting.commit_fix_done_ratio.to_i | |
| 119 | end | |
| 120 | Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, | |
| 121 |                                   { :changeset => self, :issue => issue })
 | |
| 122 | issue.save | |
| 123 | end | |
| 124 | end | |
| 108 |  | |
| 109 | update_issue_id(action, target_issues, target_issue_ids, keywords1, | |
| 110 | Setting.commit_update1_status_id, Setting.commit_update1_done_ratio) | |
| 111 | update_issue_id(action, target_issues, target_issue_ids, keywords2, | |
| 112 | Setting.commit_update2_status_id, Setting.commit_update2_done_ratio) | |
| 113 | update_issue_id(action, target_issues, target_issue_ids, keywords3, | |
| 114 | Setting.commit_update3_status_id, Setting.commit_update3_done_ratio) | |
| 115 | update_issue_id(action, target_issues, target_issue_ids, keywords4, | |
| 116 | Setting.commit_update4_status_id, Setting.commit_update4_done_ratio) | |
| 117 | update_issue_id(action, target_issues, target_issue_ids, keywords5, | |
| 118 | Setting.commit_update5_status_id, Setting.commit_update5_done_ratio) | |
| 119 |  | |
| 125 | 120 | referenced_issues += target_issues | 
| 126 | 121 | end | 
| 127 |  | |
| 122 |  | |
| 128 | 123 | referenced_issues.uniq! | 
| 129 | 124 | self.issues = referenced_issues unless referenced_issues.empty? | 
| 125 | end | |
| 126 |  | |
| 127 | def update_issue_id(action, issues, issue_ids, keywords, status_id, done_ratio) | |
| 128 | if keywords.include?(action.downcase) && new_status = IssueStatus.find_by_id(status_id) | |
| 129 | # update status of issues | |
| 130 |       logger.debug "Issues #{new_status.downcase} by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
 | |
| 131 | issues.each do |issue| | |
| 132 | # the issue may have been updated by the closure of another one (eg. duplicate) | |
| 133 | issue.reload | |
| 134 | # don't change the status if the issue is closed | |
| 135 | next if issue.status.is_closed? | |
| 136 |         csettext = "r#{self.revision}"
 | |
| 137 | if self.scmid && (! (csettext =~ /^r[0-9]+$/)) | |
| 138 |           csettext = "commit:\"#{self.scmid}\""
 | |
| 139 | end | |
| 140 | journal = issue.init_journal(user || User.anonymous, ll(Setting.default_language, :text_status_changed_by_changeset, csettext)) | |
| 141 | issue.status = new_status | |
| 142 | unless done_ratio.blank? | |
| 143 | issue.done_ratio = done_ratio.to_i | |
| 144 | end | |
| 145 | Redmine::Hook.call_hook(:model_changeset_scan_commit_for_issue_ids_pre_issue_update, | |
| 146 |                                 { :changeset => self, :issue => issue })
 | |
| 147 | issue.save | |
| 148 | end | |
| 149 | end | |
| 130 | 150 | end | 
| 131 | 151 |  | 
| 132 | 152 | def short_comments | 
| redmine-1.0.4-commit-update/app/views/settings/_repositories.rhtml 2011-01-21 16:31:45.938311700 -0700 | ||
|---|---|---|
| 27 | 27 | <p><%= setting_text_field :commit_ref_keywords, :size => 30 %><br /> | 
| 28 | 28 | <em><%= l(:text_comma_separated) %></em></p> | 
| 29 | 29 |  | 
| 30 | <p><%= setting_text_field :commit_fix_keywords, :size => 30 %>
 | |
| 31 |  <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
 | |
| 32 |  <%= 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 %>
 | |
| 30 | <p><%= setting_text_field :commit_update1_keywords, :size => 30 %>
 | |
| 31 |  <%= l(:label_applied_status) %>: <%= setting_select :commit_update1_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
 | |
| 32 |  <%= 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 %>
 | |
| 33 | 33 | <br /><em><%= l(:text_comma_separated) %></em></p> | 
| 34 |  | |
| 35 | <p><%= setting_text_field :commit_update2_keywords, :size => 30 %> | |
| 36 |  <%= l(:label_applied_status) %>: <%= setting_select :commit_update2_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
 | |
| 37 |  <%= 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 %>
 | |
| 38 | <br /><em><%= l(:text_comma_separated) %></em></p> | |
| 39 |  | |
| 40 | <p><%= setting_text_field :commit_update3_keywords, :size => 30 %> | |
| 41 |  <%= l(:label_applied_status) %>: <%= setting_select :commit_update3_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
 | |
| 42 |  <%= 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 %>
 | |
| 43 | <br /><em><%= l(:text_comma_separated) %></em></p> | |
| 44 |  | |
| 45 | <p><%= setting_text_field :commit_update4_keywords, :size => 30 %> | |
| 46 |  <%= l(:label_applied_status) %>: <%= setting_select :commit_update4_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
 | |
| 47 |  <%= 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 %>
 | |
| 48 | <br /><em><%= l(:text_comma_separated) %></em></p> | |
| 49 |  | |
| 50 | <p><%= setting_text_field :commit_update5_keywords, :size => 30 %> | |
| 51 |  <%= l(:label_applied_status) %>: <%= setting_select :commit_update5_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
 | |
| 52 |  <%= 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 %>
 | |
| 53 | <br /><em><%= l(:text_comma_separated) %></em></p> | |
| 54 |  | |
| 34 | 55 | </fieldset> | 
| 35 | 56 |  | 
| 36 | 57 | <%= submit_tag l(:button_save) %> | 
| redmine-1.0.4-commit-update/config/locales/en.yml 2011-01-21 16:31:45.953936700 -0700 | ||
|---|---|---|
| 316 | 316 | setting_autofetch_changesets: Autofetch commits | 
| 317 | 317 | setting_sys_api_enabled: Enable WS for repository management | 
| 318 | 318 | setting_commit_ref_keywords: Referencing keywords | 
| 319 | setting_commit_fix_keywords: Fixing keywords | |
| 319 | setting_commit_update1_keywords: Keywords | |
| 320 | setting_commit_update2_keywords: Keywords | |
| 321 | setting_commit_update3_keywords: Keywords | |
| 322 | setting_commit_update4_keywords: Keywords | |
| 323 | setting_commit_update5_keywords: Keywords | |
| 320 | 324 | setting_autologin: Autologin | 
| 321 | 325 | setting_date_format: Date format | 
| 322 | 326 | setting_time_format: Time format | 
| ... | ... | |
| 857 | 861 | text_unallowed_characters: Unallowed characters | 
| 858 | 862 | text_comma_separated: Multiple values allowed (comma separated). | 
| 859 | 863 | text_line_separated: Multiple values allowed (one line for each value). | 
| 860 |   text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
 | |
| 864 |   text_issues_ref_in_commit_messages: Referencing and updating issues in commit messages
 | |
| 861 | 865 |   text_issue_added: "Issue {{id}} has been reported by {{author}}."
 | 
| 862 | 866 |   text_issue_updated: "Issue {{id}} has been updated by {{author}}."
 | 
| 863 | 867 | text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ? | 
| redmine-1.0.4-commit-update/config/settings.yml 2011-01-21 16:31:45.969561700 -0700 | ||
|---|---|---|
| 89 | 89 | default: 0 | 
| 90 | 90 | sys_api_key: | 
| 91 | 91 | default: '' | 
| 92 | # commit actions | |
| 92 | 93 | commit_ref_keywords: | 
| 93 | 94 | default: 'refs,references,IssueID' | 
| 94 | commit_fix_keywords: | |
| 95 | # commit update 1 | |
| 96 | commit_update1_keywords: | |
| 95 | 97 | default: 'fixes,closes' | 
| 96 | commit_fix_status_id:
 | |
| 98 | commit_update1_status_id:
 | |
| 97 | 99 | format: int | 
| 98 | 100 | default: 0 | 
| 99 | commit_fix_done_ratio: | |
| 101 | commit_update1_done_ratio: | |
| 102 | default: 100 | |
| 103 | # commit update 2 | |
| 104 | commit_update2_keywords: | |
| 105 | default: '' | |
| 106 | commit_update2_status_id: | |
| 107 | format: int | |
| 108 | default: 0 | |
| 109 | commit_update2_done_ratio: | |
| 110 | default: 100 | |
| 111 | # commit update 3 | |
| 112 | commit_update3_keywords: | |
| 113 | default: '' | |
| 114 | commit_update3_status_id: | |
| 115 | format: int | |
| 116 | default: 0 | |
| 117 | commit_update3_done_ratio: | |
| 118 | default: 100 | |
| 119 | # commitupdate 4 | |
| 120 | commit_update4_keywords: | |
| 121 | default: '' | |
| 122 | commit_update4_status_id: | |
| 123 | format: int | |
| 124 | default: 0 | |
| 125 | commit_update4_done_ratio: | |
| 126 | default: 100 | |
| 127 | # commit update 5 | |
| 128 | commit_update5_keywords: | |
| 129 | default: '' | |
| 130 | commit_update5_status_id: | |
| 131 | format: int | |
| 132 | default: 0 | |
| 133 | commit_update5_done_ratio: | |
| 100 | 134 | default: 100 | 
| 101 | 135 | # autologin duration in days | 
| 102 | 136 | # 0 means autologin is disabled | 
| 103 | 137 | |