Show merge requests which close current issue
This commit is contained in:
parent
bd3689e9e0
commit
9f9f0c35ec
9 changed files with 40 additions and 2 deletions
|
@ -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)
|
v 8.1.0 (unreleased)
|
||||||
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
|
- 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
|
- 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)
|
- Make diff file view easier to use on mobile screens (Stan Hu)
|
||||||
- Improved performance of finding users by username or Email address
|
- 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)
|
- 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 {
|
.issue-form .select2-container {
|
||||||
width: 250px !important;
|
width: 250px !important;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,9 @@ class Projects::IssuesController < Projects::ApplicationController
|
||||||
# Allow issues bulk update
|
# Allow issues bulk update
|
||||||
before_action :authorize_admin_issues!, only: [: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
|
respond_to :html
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@ -112,6 +115,10 @@ class Projects::IssuesController < Projects::ApplicationController
|
||||||
render nothing: true
|
render nothing: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def closed_by_merge_requests
|
||||||
|
@closed_by_mr = @issue.closed_by_merge_requests(current_user)
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def issue
|
def issue
|
||||||
|
|
|
@ -259,7 +259,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
@commits = @merge_request.commits
|
@commits = @merge_request.commits
|
||||||
|
|
||||||
@merge_request_diff = @merge_request.merge_request_diff
|
@merge_request_diff = @merge_request.merge_request_diff
|
||||||
|
|
||||||
if @merge_request.locked_long_ago?
|
if @merge_request.locked_long_ago?
|
||||||
@merge_request.unlock_mr
|
@merge_request.unlock_mr
|
||||||
@merge_request.close
|
@merge_request.close
|
||||||
|
|
|
@ -83,6 +83,10 @@ module IssuesHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def merge_requests_sentence(merge_requests)
|
||||||
|
merge_requests.map(&:to_reference).to_sentence
|
||||||
|
end
|
||||||
|
|
||||||
# Required for Gitlab::Markdown::IssueReferenceFilter
|
# Required for Gitlab::Markdown::IssueReferenceFilter
|
||||||
module_function :url_for_issue
|
module_function :url_for_issue
|
||||||
end
|
end
|
||||||
|
|
|
@ -95,4 +95,14 @@ class Issue < ActiveRecord::Base
|
||||||
def source_project
|
def source_project
|
||||||
project
|
project
|
||||||
end
|
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
|
end
|
||||||
|
|
|
@ -294,6 +294,10 @@ class MergeRequest < ActiveRecord::Base
|
||||||
target_project
|
target_project
|
||||||
end
|
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.
|
# Return the set of issues that will be closed if this merge request is accepted.
|
||||||
def closes_issues(current_user = self.author)
|
def closes_issues(current_user = self.author)
|
||||||
if target_branch == project.default_branch
|
if target_branch == project.default_branch
|
||||||
|
|
6
app/views/projects/issues/_closed_by_box.html.haml
Normal file
6
app/views/projects/issues/_closed_by_box.html.haml
Normal file
|
@ -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)
|
= markdown(@issue.description)
|
||||||
%textarea.hidden.js-task-list-field
|
%textarea.hidden.js-task-list-field
|
||||||
= @issue.description
|
= @issue.description
|
||||||
|
- if @closed_by_mr.present?
|
||||||
|
= render 'projects/issues/closed_by_box'
|
||||||
.issue-discussion
|
.issue-discussion
|
||||||
= render 'projects/issues/discussion'
|
= render 'projects/issues/discussion'
|
||||||
|
|
Loading…
Reference in a new issue