diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-09-05 15:31:11 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-09-05 15:31:11 +0000 |
commit | e77ba96fd09efba591a9df28b4f4cab6d72569fd (patch) | |
tree | dc00084f44fe2f5868f3aa5bf56fe9c35714f584 | |
parent | e088777e1ba1c8fa809f2a6894aea640373c56c1 (diff) | |
parent | fd6b7b4a300c9121806ec487001f763f011ee700 (diff) | |
download | gitlab-ce-e77ba96fd09efba591a9df28b4f4cab6d72569fd.tar.gz |
Merge branch 'mr-push-note' into 'master'
Add comment to merge request when new push happens
Fixes #1494
See merge request !1065
-rw-r--r-- | app/models/note.rb | 19 | ||||
-rw-r--r-- | app/models/project.rb | 23 |
2 files changed, 39 insertions, 3 deletions
diff --git a/app/models/note.rb b/app/models/note.rb index 0fa1a7ab615..7cbab1130ea 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -117,6 +117,25 @@ class Note < ActiveRecord::Base }) end + def create_new_commits_note(noteable, project, author, commits) + commits_text = ActionController::Base.helpers.pluralize(commits.size, 'new commit') + body = "Added #{commits_text}:\n\n" + + commits.each do |commit| + message = "* #{commit.short_id} - #{commit.title}" + body << message + body << "\n" + end + + create( + noteable: noteable, + project: project, + author: author, + note: body, + system: true + ) + end + def discussions_from_notes(notes) discussion_ids = [] discussions = [] diff --git a/app/models/project.rb b/app/models/project.rb index 2bd6a57ee28..114e40983f8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -400,18 +400,35 @@ class Project < ActiveRecord::Base def update_merge_requests(oldrev, newrev, ref, user) return true unless ref =~ /heads/ branch_name = ref.gsub("refs/heads/", "") - c_ids = self.repository.commits_between(oldrev, newrev).map(&:id) + commits = self.repository.commits_between(oldrev, newrev) + c_ids = commits.map(&:id) # Close merge requests mrs = self.merge_requests.opened.where(target_branch: branch_name).to_a mrs = mrs.select(&:last_commit).select { |mr| c_ids.include?(mr.last_commit.id) } - mrs.each { |merge_request| MergeRequests::MergeService.new.execute(merge_request, user, nil) } + + mrs.uniq.each do |merge_request| + MergeRequests::MergeService.new.execute(merge_request, user, nil) + end # Update code for merge requests into project between project branches mrs = self.merge_requests.opened.by_branch(branch_name).to_a # Update code for merge requests between project and project fork mrs += self.fork_merge_requests.opened.by_branch(branch_name).to_a - mrs.each { |merge_request| merge_request.reload_code; merge_request.mark_as_unchecked } + + mrs.uniq.each do |merge_request| + merge_request.reload_code + merge_request.mark_as_unchecked + end + + # Add comment about pushing new commits to merge requests + mrs = self.merge_requests.opened.where(source_branch: branch_name).to_a + mrs += self.fork_merge_requests.opened.where(source_branch: branch_name).to_a + + mrs.uniq.each do |merge_request| + Note.create_new_commits_note(merge_request, merge_request.project, + user, commits) + end true end |