diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-03-05 15:19:06 +0400 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-03-05 15:19:06 +0400 |
commit | 0fd3ed99df400067fcee9860e090d6038f7673bb (patch) | |
tree | f680b2145329625fc1db4f8eba06fe505d207983 | |
parent | 42e34aec97818981338401a47560cd40c05e686d (diff) | |
parent | e9358f5a40d8329dc0d684720852dc63ff9c2ebb (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-- | CHANGELOG | 3 | ||||
-rw-r--r-- | app/assets/javascripts/project_users_select.js.coffee | 17 | ||||
-rw-r--r-- | app/assets/stylesheets/sections/merge_requests.scss | 8 | ||||
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 4 | ||||
-rw-r--r-- | app/models/concerns/issuable.rb | 3 | ||||
-rw-r--r-- | app/models/issue.rb | 4 | ||||
-rw-r--r-- | app/models/merge_request.rb | 6 | ||||
-rw-r--r-- | app/observers/merge_request_observer.rb | 2 | ||||
-rw-r--r-- | app/views/projects/merge_requests/_show.html.haml | 9 | ||||
-rw-r--r-- | app/views/projects/merge_requests/show/_mr_box.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/merge_requests/show/_mr_title.html.haml | 6 | ||||
-rw-r--r-- | features/project/merge_requests.feature | 7 | ||||
-rw-r--r-- | features/steps/project/project_merge_requests.rb | 12 | ||||
-rw-r--r-- | spec/features/issues_spec.rb | 47 |
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 |