Project

General

Profile

Defect #4163 » patch-cp-issue-keywords_1.diff

Implementation and unit test - Anonymous, 2009-11-04 21:02

View differences:

app/models/changeset.rb
80 80
    # status and optional done ratio applied
81 81
    fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
82 82
    done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
83
    if Setting.cross_project_commit_keywords?
84
      issues_finder = Issue
85
    else
86
      issues_finder = repository.project.issues
87
    end
83 88
    
84 89
    kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
85 90
    return if kw_regexp.blank?
......
90 95
      # find any issue ID in the comments
91 96
      target_issue_ids = []
92 97
      comments.scan(%r{([\s\(\[,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
93
      referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids)
98
      referenced_issues += issues_finder.find_all_by_id(target_issue_ids)
94 99
    end
95 100
    
96 101
    comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
97 102
      action = match[0]
98 103
      target_issue_ids = match[1].scan(/\d+/)
99
      target_issues = repository.project.issues.find_all_by_id(target_issue_ids)
104
      target_issues = issues_finder.find_all_by_id(target_issue_ids)
100 105
      if fix_status && fix_keywords.include?(action.downcase)
101 106
        # update status of issues
102 107
        logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
app/views/settings/_repositories.rhtml
11 11
<%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %>
12 12
</p>
13 13

  
14
<p><label><%= l(:setting_cross_project_commit_keywords) %></label>
15
<%= hidden_field_tag 'settings[cross_project_commit_keywords]', 0 %>
16
<%= check_box_tag 'settings[cross_project_commit_keywords]', 1, Setting.cross_project_commit_keywords? %>
17
</p>
18

  
14 19
<p><label><%= l(:setting_enabled_scm) %></label>
15 20
<% REDMINE_SUPPORTED_SCM.each do |scm| -%>
16 21
<%= check_box_tag 'settings[enabled_scm][]', scm, Setting.enabled_scm.include?(scm) %> <%= scm %>
config/locales/en.yml
285 285
  setting_default_projects_public: New projects are public by default
286 286
  setting_autofetch_changesets: Autofetch commits
287 287
  setting_sys_api_enabled: Enable WS for repository management
288
  setting_cross_project_commit_keywords: Allow cross project references in commit messages
288 289
  setting_commit_ref_keywords: Referencing keywords
289 290
  setting_commit_fix_keywords: Fixing keywords
290 291
  setting_autologin: Autologin
config/settings.yml
94 94
  default: 0
95 95
commit_fix_done_ratio:
96 96
  default: 100
97
cross_project_commit_keywords:
98
  default: 0
97 99
# autologin duration in days
98 100
# 0 means autologin is disabled 
99 101
autologin:
test/unit/repository_test.rb
104 104
    
105 105
    # ignoring commits referencing an issue of another project
106 106
    assert_equal [], Issue.find(4).changesets
107
    Setting.cross_project_commit_keywords = 1
108
    Repository.scan_changesets_for_issue_ids
109
    assert_equal [103], Issue.find(4).changeset_ids
107 110
  end
108 111
  
109 112
  def test_for_changeset_comments_strip
(1-1/2)