Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-03-05 15:19:06 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-03-05 15:19:06 +0400
commit0fd3ed99df400067fcee9860e090d6038f7673bb (patch)
treef680b2145329625fc1db4f8eba06fe505d207983
parent42e34aec97818981338401a47560cd40c05e686d (diff)
parente9358f5a40d8329dc0d684720852dc63ff9c2ebb (diff)
Merge branch '6-6-5-patch' into '6-6-stable'
6.6.5 patch * adds ability to reopen mr * adds ability to remove issue assignee * removes close button from diff comment form
-rw-r--r--CHANGELOG3
-rw-r--r--app/assets/javascripts/project_users_select.js.coffee17
-rw-r--r--app/assets/stylesheets/sections/merge_requests.scss8
-rw-r--r--app/controllers/projects/merge_requests_controller.rb4
-rw-r--r--app/models/concerns/issuable.rb3
-rw-r--r--app/models/issue.rb4
-rw-r--r--app/models/merge_request.rb6
-rw-r--r--app/observers/merge_request_observer.rb2
-rw-r--r--app/views/projects/merge_requests/_show.html.haml9
-rw-r--r--app/views/projects/merge_requests/show/_mr_box.html.haml2
-rw-r--r--app/views/projects/merge_requests/show/_mr_title.html.haml6
-rw-r--r--features/project/merge_requests.feature7
-rw-r--r--features/steps/project/project_merge_requests.rb12
-rw-r--r--spec/features/issues_spec.rb47
14 files changed, 113 insertions, 17 deletions
diff --git a/CHANGELOG b/CHANGELOG
index d9962aed9e2..a4589cb8d3d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+v 6.6.5
+ - Added option to remove issue assignee on project issue page and issue edit page (Jason Blanchard)
+
v 6.6.4
- Add missing html escape for highlighted code blocks in comments, issues
diff --git a/app/assets/javascripts/project_users_select.js.coffee b/app/assets/javascripts/project_users_select.js.coffee
index aa8b70d9b8a..03fad41c490 100644
--- a/app/assets/javascripts/project_users_select.js.coffee
+++ b/app/assets/javascripts/project_users_select.js.coffee
@@ -10,6 +10,16 @@
query: (query) ->
Api.projectUsers project_id, query.term, (users) ->
data = { results: users }
+
+ nullUser = {
+ name: 'Unassigned',
+ avatar: null,
+ username: 'none',
+ id: ''
+ }
+
+ data.results.unshift(nullUser)
+
query.callback(data)
initSelection: (element, callback) ->
@@ -35,8 +45,13 @@
else
avatar = gon.relative_url_root + "/assets/no_avatar.png"
+ if user.id == ''
+ avatarMarkup = ''
+ else
+ avatarMarkup = "<div class='user-image'><img class='avatar s24' src='#{avatar}'></div>"
+
"<div class='user-result'>
- <div class='user-image'><img class='avatar s24' src='#{avatar}'></div>
+ #{avatarMarkup}
<div class='user-name'>#{user.name}</div>
<div class='user-username'>#{user.username}</div>
</div>"
diff --git a/app/assets/stylesheets/sections/merge_requests.scss b/app/assets/stylesheets/sections/merge_requests.scss
index 6e21bf0b0a1..ab61fcf41a4 100644
--- a/app/assets/stylesheets/sections/merge_requests.scss
+++ b/app/assets/stylesheets/sections/merge_requests.scss
@@ -89,3 +89,11 @@
.merge-request-form-info {
padding-top: 15px;
}
+
+// hide mr close link for inline diff comment form
+.merge-request {
+ .file .close-mr-link,
+ .file .reopen-mr-link {
+ display: none;
+ }
+}
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 2b410c5a610..fce54039373 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -131,7 +131,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def automerge
return access_denied! unless allowed_to_merge?
- if @merge_request.opened? && @merge_request.can_be_merged?
+ if @merge_request.open? && @merge_request.can_be_merged?
@merge_request.should_remove_source_branch = params[:should_remove_source_branch]
@merge_request.automerge!(current_user, params[:merge_commit_message])
@status = true
@@ -226,7 +226,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
@merge_request_diff = @merge_request.merge_request_diff
@allowed_to_merge = allowed_to_merge?
- @show_merge_controls = @merge_request.opened? && @commits.any? && @allowed_to_merge
+ @show_merge_controls = @merge_request.open? && @commits.any? && @allowed_to_merge
end
def allowed_to_merge?
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb
index bf2c2157d38..75989888bfa 100644
--- a/app/models/concerns/issuable.rb
+++ b/app/models/concerns/issuable.rb
@@ -23,7 +23,8 @@ module Issuable
scope :assigned, -> { where("assignee_id IS NOT NULL") }
scope :unassigned, -> { where("assignee_id IS NULL") }
scope :of_projects, ->(ids) { where(project_id: ids) }
-
+ scope :opened, -> { with_state(:opened, :reopened) }
+ scope :closed, -> { with_state(:closed) }
delegate :name,
:email,
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 6580c5004af..a8dc6e5fd85 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -28,8 +28,6 @@ class Issue < ActiveRecord::Base
scope :of_group, ->(group) { where(project_id: group.project_ids) }
scope :of_user_team, ->(team) { where(project_id: team.project_ids, assignee_id: team.member_ids) }
- scope :opened, -> { with_state(:opened, :reopened) }
- scope :closed, -> { with_state(:closed) }
attr_accessible :title, :assignee_id, :position, :description,
:milestone_id, :label_list, :author_id_of_changes,
@@ -50,9 +48,7 @@ class Issue < ActiveRecord::Base
end
state :opened
-
state :reopened
-
state :closed
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index b596d7eb9cf..4774cbcf3aa 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -100,8 +100,6 @@ class MergeRequest < ActiveRecord::Base
scope :of_group, ->(group) { where("source_project_id in (:group_project_ids) OR target_project_id in (:group_project_ids)", group_project_ids: group.project_ids) }
scope :of_user_team, ->(team) { where("(source_project_id in (:team_project_ids) OR target_project_id in (:team_project_ids) AND assignee_id in (:team_member_ids))", team_project_ids: team.project_ids, team_member_ids: team.member_ids) }
- scope :opened, -> { with_state(:opened) }
- scope :closed, -> { with_state(:closed) }
scope :merged, -> { with_state(:merged) }
scope :by_branch, ->(branch_name) { where("(source_branch LIKE :branch) OR (target_branch LIKE :branch)", branch: branch_name) }
scope :cared, ->(user) { where('assignee_id = :user OR author_id = :user', user: user.id) }
@@ -160,6 +158,10 @@ class MergeRequest < ActiveRecord::Base
MergeRequests::AutoMergeService.new.execute(self, current_user, commit_message)
end
+ def open?
+ opened? || reopened?
+ end
+
def mr_and_commit_notes
# Fetch comments only from last 100 commits
commits_for_notes_limit = 100
diff --git a/app/observers/merge_request_observer.rb b/app/observers/merge_request_observer.rb
index ef31498e7d0..f2e2d16c943 100644
--- a/app/observers/merge_request_observer.rb
+++ b/app/observers/merge_request_observer.rb
@@ -22,6 +22,8 @@ class MergeRequestObserver < ActivityObserver
create_event(merge_request, Event::REOPENED)
create_note(merge_request)
execute_hooks(merge_request)
+ merge_request.reload_code
+ merge_request.mark_as_unchecked
end
def after_update(merge_request)
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index ec9249be00d..1badd701db5 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -2,7 +2,7 @@
= render "projects/merge_requests/show/mr_title"
= render "projects/merge_requests/show/how_to_merge"
= render "projects/merge_requests/show/mr_box"
- - if @merge_request.opened?
+ - if @merge_request.open?
- if @merge_request.source_branch_exists? && @merge_request.target_branch_exists?
= render "projects/merge_requests/show/mr_accept"
- else
@@ -24,9 +24,10 @@
- content_for :note_actions do
- if can?(current_user, :modify_merge_request, @merge_request)
- - unless @merge_request.closed?
- = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn grouped btn-close", title: "Close merge request"
-
+ - unless @merge_request.closed? || @merge_request.merged?
+ = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn grouped btn-close close-mr-link", title: "Close merge request"
+ - if @merge_request.closed?
+ = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn grouped btn-reopen reopen-mr-link", title: "Close merge request"
.notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" }
= render "projects/notes/notes_with_form"
diff --git a/app/views/projects/merge_requests/show/_mr_box.html.haml b/app/views/projects/merge_requests/show/_mr_box.html.haml
index 803e00292b0..d7067f69855 100644
--- a/app/views/projects/merge_requests/show/_mr_box.html.haml
+++ b/app/views/projects/merge_requests/show/_mr_box.html.haml
@@ -37,7 +37,7 @@
%i.icon-ok
Merged by #{link_to_member(@project, @merge_request.merge_event.author)}
#{time_ago_with_tooltip(@merge_request.merge_event.created_at)}.
-- if !@closes_issues.empty? && @merge_request.opened?
+- if !@closes_issues.empty? && @merge_request.open?
.alert.alert-info.alert-info
%span
%i.icon-ok
diff --git a/app/views/projects/merge_requests/show/_mr_title.html.haml b/app/views/projects/merge_requests/show/_mr_title.html.haml
index b27522e46a4..e94b1315de4 100644
--- a/app/views/projects/merge_requests/show/_mr_title.html.haml
+++ b/app/views/projects/merge_requests/show/_mr_title.html.haml
@@ -3,8 +3,8 @@
%span.pull-right
- if can?(current_user, :modify_merge_request, @merge_request)
- - if @merge_request.opened?
- .left.btn-group
+ - if @merge_request.open?
+ .btn-group.pull-left
%a.btn.grouped.dropdown-toggle{ data: {toggle: :dropdown} }
%i.icon-download-alt
Download as
@@ -18,6 +18,8 @@
= link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped", id:"edit_merge_request" do
%i.icon-edit
Edit
+ - if @merge_request.closed?
+ = link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn grouped btn-reopen reopen-mr-link", title: "Close merge request"
.votes-holder.hidden-sm.hidden-xs
#votes= render 'votes/votes_block', votable: @merge_request
diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature
index 556b96338d6..435c47a276c 100644
--- a/features/project/merge_requests.feature
+++ b/features/project/merge_requests.feature
@@ -29,6 +29,13 @@ Feature: Project Merge Requests
And I click link "Close"
Then I should see closed merge request "Bug NS-04"
+ Scenario: I reopen merge request page
+ Given I click link "Bug NS-04"
+ And I click link "Close"
+ Then I should see closed merge request "Bug NS-04"
+ When I click link "Reopen"
+ Then I should see reopened merge request "Bug NS-04"
+
Scenario: I submit new unassigned merge request
Given I click link "New Merge Request"
And I submit new merge request "Wiki Feature"
diff --git a/features/steps/project/project_merge_requests.rb b/features/steps/project/project_merge_requests.rb
index adf9e77e136..813e7439b2c 100644
--- a/features/steps/project/project_merge_requests.rb
+++ b/features/steps/project/project_merge_requests.rb
@@ -170,6 +170,18 @@ class ProjectMergeRequests < Spinach::FeatureSteps
end
end
+ step 'I click link "Reopen"' do
+ within '.page-title' do
+ click_link "Reopen"
+ end
+ end
+
+ step 'I should see reopened merge request "Bug NS-04"' do
+ within '.state-label' do
+ page.should have_content "Open"
+ end
+ end
+
def project
@project ||= Project.find_by!(name: "Shop")
end
diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb
index ffe6d02d2f2..b9dab7846b1 100644
--- a/spec/features/issues_spec.rb
+++ b/spec/features/issues_spec.rb
@@ -43,6 +43,31 @@ describe "Issues" do
page.should have_content project.name
end
end
+
+ end
+
+ describe "Editing issue assignee" do
+ let!(:issue) do
+ create(:issue,
+ author: @user,
+ assignee: @user,
+ project: project)
+ end
+
+ it 'allows user to select unasigned', :js => true do
+ visit edit_project_issue_path(project, issue)
+
+ page.should have_content "Assign to #{@user.name}"
+
+ page.first('#s2id_issue_assignee_id').click
+ sleep 2 # wait for ajax stuff to complete
+ page.first('.user-result').click
+
+ click_button "Save changes"
+
+ page.should have_content "Assignee: Select assignee"
+ issue.reload.assignee.should be_nil
+ end
end
describe "Filter issue" do
@@ -245,6 +270,28 @@ describe "Issues" do
page.should have_content milestone.title
end
end
+
+ describe 'removing assignee' do
+ let(:user2) { create(:user) }
+
+ before :each do
+ issue.assignee = user2
+ issue.save
+ end
+
+ it 'allows user to remove assignee', :js => true do
+ visit project_issue_path(project, issue)
+ page.should have_content "Assignee: #{user2.name}"
+
+ page.first('#s2id_issue_assignee_id').click
+ sleep 2 # wait for ajax stuff to complete
+ page.first('.user-result').click
+
+ page.should have_content "Assignee: Unassigned"
+ sleep 2 # wait for ajax stuff to complete
+ issue.reload.assignee.should be_nil
+ end
+ end
end
def first_issue