From fb51cb2c0bc7d47b25042665f781950ecfbeb732 Mon Sep 17 00:00:00 2001 From: Gregor Schmidt Date: Thu, 8 Mar 2018 10:35:36 +0100 Subject: [PATCH] Don't match commit references across new lines --- app/models/changeset.rb | 4 ++-- test/unit/changeset_test.rb | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 637a1819f..a318571a0 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -125,11 +125,11 @@ class Changeset < ActiveRecord::Base referenced_issues = [] - comments.scan(/([\s\(\[,-]|^)((#{kw_regexp})[\s:]+)?(#\d+(\s+@#{TIMELOG_RE})?([\s,;&]+#\d+(\s+@#{TIMELOG_RE})?)*)(?=[[:punct:]]|\s|<|$)/i) do |match| + comments.scan(/([[[:blank:]]\(\[,-]|^)((#{kw_regexp})[[[:blank:]]:]+)?(#\d+([[:blank:]]+@#{TIMELOG_RE})?([[[:blank:]],;&]+#\d+([[:blank:]]+@#{TIMELOG_RE})?)*)(?=[[:punct:]]|[[:blank:]]|<|$)/i) do |match| action, refs = match[2].to_s.downcase, match[3] next unless action.present? || ref_keywords_any - refs.scan(/#(\d+)(\s+@#{TIMELOG_RE})?/).each do |m| + refs.scan(/#(\d+)([[:blank:]]+@#{TIMELOG_RE})?/).each do |m| issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2] if issue && !issue_linked_to_same_commit?(issue) referenced_issues << issue diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb index 8586d8fc7..bcd833f32 100644 --- a/test/unit/changeset_test.rb +++ b/test/unit/changeset_test.rb @@ -60,6 +60,22 @@ class ChangesetTest < ActiveSupport::TestCase assert_equal [1], c.issue_ids.sort end + def test_ref_keywords_stop_at_newlines + ActionMailer::Base.deliveries.clear + Setting.commit_ref_keywords = '*' + Setting.commit_update_keywords = [{'keywords' => 'fixes', 'status_id' => '5'}] + + c = Changeset.new(:repository => Project.find(1).repository, + :committed_on => Time.now, + :comments => "#1 some UI fixes\n#2 still work in progess", + :revision => '12345') + assert c.save + assert_equal [1, 2], c.issue_ids.sort + wip = Issue.find(2) + assert !wip.closed? + assert_empty ActionMailer::Base.deliveries + end + def test_ref_keywords_any_only Setting.commit_ref_keywords = '*' Setting.commit_update_keywords = '' -- 2.14.1