diff options
Diffstat (limited to 'app/services/git/branch_hooks_service.rb')
-rw-r--r-- | app/services/git/branch_hooks_service.rb | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/app/services/git/branch_hooks_service.rb b/app/services/git/branch_hooks_service.rb index 431a5aedf2e..ab7bce25952 100644 --- a/app/services/git/branch_hooks_service.rb +++ b/app/services/git/branch_hooks_service.rb @@ -83,9 +83,20 @@ module Git # Schedules processing of commit messages def enqueue_process_commit_messages - limited_commits.each do |commit| - next unless commit.matches_cross_reference_regex? + processable_commits = limited_commits.select(&:matches_cross_reference_regex?) + + # Avoid reprocessing commits that already exist in the upstream + # when project is forked. This will also prevent duplicated system notes. + upstream_project = project.fork_source + if upstream_project + upstream_commits = upstream_project.commits_by(oids: processable_commits.map(&:id)) + upstream_commit_ids = upstream_commits.each_with_object(Set.new) do |commit, set| + set << commit.id + end + processable_commits.reject! { |commit| upstream_commit_ids.include?(commit.id) } + end + processable_commits.each do |commit| ProcessCommitWorker.perform_async( project.id, current_user.id, |