Show merge requests which close current issue
This commit is contained in:
		
							parent
							
								
									bd3689e9e0
								
							
						
					
					
						commit
						9f9f0c35ec
					
				|  | @ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date. | |||
| v 8.1.0 (unreleased) | ||||
|   - Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu) | ||||
|   - Speed up load times of issue detail pages by roughly 1.5x | ||||
|   - If a merge request is to close an issue, show this on the issue page (Zeger-Jan van de Weg) | ||||
|   - Make diff file view easier to use on mobile screens (Stan Hu) | ||||
|   - Improved performance of finding users by username or Email address | ||||
|   - Fix bug where merge request comments created by API would not trigger notifications (Stan Hu) | ||||
|  |  | |||
|  | @ -132,6 +132,11 @@ form.edit-issue { | |||
|   } | ||||
| } | ||||
| 
 | ||||
| .issue-closed-by-widget { | ||||
|   padding: 16px 0; | ||||
|   margin: 0px; | ||||
| } | ||||
| 
 | ||||
| .issue-form .select2-container { | ||||
|   width: 250px !important; | ||||
| } | ||||
|  |  | |||
|  | @ -14,6 +14,9 @@ class Projects::IssuesController < Projects::ApplicationController | |||
|   # Allow issues bulk update | ||||
|   before_action :authorize_admin_issues!, only: [:bulk_update] | ||||
| 
 | ||||
|   # Cross-reference merge requests | ||||
|   before_action :closed_by_merge_requests, only: [:show] | ||||
| 
 | ||||
|   respond_to :html | ||||
| 
 | ||||
|   def index | ||||
|  | @ -112,6 +115,10 @@ class Projects::IssuesController < Projects::ApplicationController | |||
|     render nothing: true | ||||
|   end | ||||
| 
 | ||||
|   def closed_by_merge_requests | ||||
|     @closed_by_mr = @issue.closed_by_merge_requests(current_user) | ||||
|   end | ||||
| 
 | ||||
|   protected | ||||
| 
 | ||||
|   def issue | ||||
|  |  | |||
|  | @ -259,7 +259,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | |||
|     @commits = @merge_request.commits | ||||
| 
 | ||||
|     @merge_request_diff = @merge_request.merge_request_diff | ||||
|      | ||||
| 
 | ||||
|     if @merge_request.locked_long_ago? | ||||
|       @merge_request.unlock_mr | ||||
|       @merge_request.close | ||||
|  |  | |||
|  | @ -83,6 +83,10 @@ module IssuesHelper | |||
|     end | ||||
|   end | ||||
| 
 | ||||
|   def merge_requests_sentence(merge_requests) | ||||
|     merge_requests.map(&:to_reference).to_sentence | ||||
|   end | ||||
| 
 | ||||
|   # Required for Gitlab::Markdown::IssueReferenceFilter | ||||
|   module_function :url_for_issue | ||||
| end | ||||
|  |  | |||
|  | @ -95,4 +95,14 @@ class Issue < ActiveRecord::Base | |||
|   def source_project | ||||
|     project | ||||
|   end | ||||
| 
 | ||||
|   # From all notes on this issue, we'll select the system notes about linked | ||||
|   # merge requests. Of those, the MRs closing `self` are returned. | ||||
|   def closed_by_merge_requests(current_user) | ||||
|     notes.system.flat_map do |note| | ||||
|       ext = Gitlab::ReferenceExtractor.new(self.project, current_user) | ||||
|       ext.analyze(note.note) | ||||
|       ext.merge_requests | ||||
|     end.uniq.select { |mr| mr.closes_issue?(self) } | ||||
|   end | ||||
| end | ||||
|  |  | |||
|  | @ -294,6 +294,10 @@ class MergeRequest < ActiveRecord::Base | |||
|     target_project | ||||
|   end | ||||
| 
 | ||||
|   def closes_issue?(issue) | ||||
|     closes_issues.include?(issue) | ||||
|   end | ||||
| 
 | ||||
|   # Return the set of issues that will be closed if this merge request is accepted. | ||||
|   def closes_issues(current_user = self.author) | ||||
|     if target_branch == project.default_branch | ||||
|  |  | |||
|  | @ -0,0 +1,6 @@ | |||
| .issue-closed-by-widget  | ||||
|   %i.fa.fa-check | ||||
|   - if @closed_by_mr.count == 1 | ||||
|     This issue will be closed when #{gfm(@closed_by_mr.first.to_reference)} is accepted. | ||||
|   -else  | ||||
|     This issue will be closed when any of merge requests #{gfm(merge_requests_sentence(@closed_by_mr.sort))} is accepted. | ||||
|  | @ -46,6 +46,7 @@ | |||
|                 = markdown(@issue.description) | ||||
|             %textarea.hidden.js-task-list-field | ||||
|               = @issue.description | ||||
| 
 | ||||
|   - if @closed_by_mr.present? | ||||
|     = render 'projects/issues/closed_by_box' | ||||
|   .issue-discussion | ||||
|     = render 'projects/issues/discussion' | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue