diff options
author | Douwe Maan <douwe@selenight.nl> | 2016-02-26 19:34:32 -0800 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2016-02-26 19:36:38 -0800 |
commit | 09ff9bc722e8ee98223c5b8ecec3b839990c5f82 (patch) | |
tree | 5c6c8fb0bce59cff2945371a2ceb8551443e5ce4 | |
parent | acf9778e77e5d6e36cb3eb750e88adaa5881a94a (diff) | |
download | gitlab-ce-09ff9bc722e8ee98223c5b8ecec3b839990c5f82.tar.gz |
Easily (un)mark merge request as WIP using link
Fixes #3768
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/assets/javascripts/issuable_form.js.coffee | 41 | ||||
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 11 | ||||
-rw-r--r-- | app/views/projects/merge_requests/widget/open/_wip.html.haml | 8 | ||||
-rw-r--r-- | app/views/shared/issuable/_form.html.haml | 12 | ||||
-rw-r--r-- | config/routes.rb | 1 |
6 files changed, 67 insertions, 7 deletions
diff --git a/CHANGELOG b/CHANGELOG index 5ad85ab8ccc..c5663717e64 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.6.0 (unreleased) - Improve the formatting for the user page bio (Connor Shea) - Fix avatar stretching by providing a cropping feature (Johann Pardanaud) + - Easily (un)mark merge request as WIP using link - Use specialized system notes when MR is (un)marked as WIP v 8.5.1 diff --git a/app/assets/javascripts/issuable_form.js.coffee b/app/assets/javascripts/issuable_form.js.coffee index 48c249943f2..db494347a28 100644 --- a/app/assets/javascripts/issuable_form.js.coffee +++ b/app/assets/javascripts/issuable_form.js.coffee @@ -1,4 +1,5 @@ class @IssuableForm + wipRegex: /^\[?WIP(\]|:| )\s*/i constructor: (@form) -> GitLab.GfmAutoComplete.setup() new UsersSelect() @@ -14,6 +15,8 @@ class @IssuableForm @form.on "submit", @resetAutosave @form.on "click", ".btn-cancel", @resetAutosave + @initWip() + initAutosave: -> new Autosave @titleField, [ document.location.pathname, @@ -30,3 +33,41 @@ class @IssuableForm resetAutosave: => @titleField.data("autosave").reset() @descriptionField.data("autosave").reset() + + initWip: -> + return unless @form.find(".js-wip-explanation").length + + @form.on "click", ".js-remove-wip", @removeWip + + @form.on "click", ".js-add-wip", @addWip + + @titleField.on "change", @renderWipExplanation + + @renderWipExplanation() + + workInProgress: -> + @titleField.val().match(@wipRegex) + + renderWipExplanation: => + if @workInProgress() + @form.find(".js-wip-explanation").show() + @form.find(".js-no-wip-explanation").hide() + else + @form.find(".js-wip-explanation").hide() + @form.find(".js-no-wip-explanation").show() + + removeWip: (event) => + event.preventDefault() + + return unless @workInProgress() + @titleField.val @titleField.val().replace(@wipRegex, "") + + @renderWipExplanation() + + addWip: (event) => + event.preventDefault() + + return if @workInProgress() + @titleField.val "WIP: #{@titleField.val()}" + + @renderWipExplanation() diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 5fe21694605..c0375021ab4 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -2,7 +2,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController before_action :module_enabled before_action :merge_request, only: [ :edit, :update, :show, :diffs, :commits, :builds, :merge, :merge_check, - :ci_status, :toggle_subscription, :cancel_merge_when_build_succeeds + :ci_status, :toggle_subscription, :cancel_merge_when_build_succeeds, :remove_wip ] before_action :closes_issues, only: [:edit, :update, :show, :diffs, :commits, :builds] before_action :validates_merge_request, only: [:show, :diffs, :commits, :builds] @@ -17,7 +17,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController before_action :authorize_create_merge_request!, only: [:new, :create] # Allow modify merge_request - before_action :authorize_update_merge_request!, only: [:close, :edit, :update, :sort] + before_action :authorize_update_merge_request!, only: [:close, :edit, :update, :remove_wip, :sort] def index terms = params['issue_search'] @@ -161,6 +161,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController end end + def remove_wip + MergeRequests::UpdateService.new(project, current_user, title: @merge_request.wipless_title).execute(@merge_request) + + redirect_to namespace_project_merge_request_path(@project.namespace, @project, @merge_request), + notice: "The merge request can now be merged." + end + def merge_check @merge_request.check_if_can_be_merged diff --git a/app/views/projects/merge_requests/widget/open/_wip.html.haml b/app/views/projects/merge_requests/widget/open/_wip.html.haml index 0cf16542cc1..3f62818280f 100644 --- a/app/views/projects/merge_requests/widget/open/_wip.html.haml +++ b/app/views/projects/merge_requests/widget/open/_wip.html.haml @@ -2,4 +2,10 @@ This merge request is currently a Work In Progress %p - When this merge request is ready, remove the "WIP" prefix from the title to allow it to be merged. + When this merge request is ready, + - text = 'remove the "WIP" prefix from the title' + - if can?(current_user, :update_merge_request, @merge_request) + = link_to text, remove_wip_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), method: :post + - else + = text + to allow it to be merged. diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml index 90dc0062481..d93395a3e85 100644 --- a/app/views/shared/issuable/_form.html.haml +++ b/app/views/shared/issuable/_form.html.haml @@ -13,11 +13,15 @@ - if issuable.is_a?(MergeRequest) %p.help-block - - if issuable.work_in_progress? - Remove the <code>WIP</code> prefix from the title to allow this + .js-wip-explanation + %a{href: "#", class: "js-remove-wip", data: { }} + Remove the <code>WIP</code> prefix from the title + to allow this <strong>Work In Progress</strong> merge request to be merged when it's ready. - - else - Start the title with <code>[WIP]</code> or <code>WIP:</code> to prevent a + .js-no-wip-explanation + %a{href: "#", class: "js-add-wip"} + Start the title with <code>[WIP]</code> or <code>WIP:</code> + to prevent a <strong>Work In Progress</strong> merge request from being merged before it's ready. .form-group.detail-page-description = f.label :description, 'Description', class: 'control-label' diff --git a/config/routes.rb b/config/routes.rb index 1485b64da19..01a73bb39a2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -599,6 +599,7 @@ Rails.application.routes.draw do post :cancel_merge_when_build_succeeds get :ci_status post :toggle_subscription + post :remove_wip end collection do |