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:
authorSean McGivern <sean@gitlab.com>2016-04-29 19:38:07 +0300
committerAlfredo Sumaran <alfredo@gitlab.com>2016-06-04 01:11:41 +0300
commit81a21c945eb8a6c2f0af7bb074a1aec389fe9394 (patch)
tree0f3a77d0f3f8211c152aabd8187976134d42777f /app/services/issuable_base_service.rb
parente42f88ca3783cc848137a04ed0c21f9cb3c0b7a7 (diff)
WIP: allow adding and removing labels in bulk
Diffstat (limited to 'app/services/issuable_base_service.rb')
-rw-r--r--app/services/issuable_base_service.rb35
1 files changed, 31 insertions, 4 deletions
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index 2b16089df1b..969c87a6ed8 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -45,6 +45,8 @@ class IssuableBaseService < BaseService
unless can?(current_user, ability, project)
params.delete(:milestone_id)
+ params.delete(:add_label_ids)
+ params.delete(:remove_label_ids)
params.delete(:label_ids)
params.delete(:assignee_id)
end
@@ -67,10 +69,35 @@ class IssuableBaseService < BaseService
end
def filter_labels
- return if params[:label_ids].to_a.empty?
+ if params[:add_label_ids].present? || params[:remove_label_ids].present?
+ params.delete(:label_ids)
+
+ filter_labels_by_name([:add_label_ids, :remove_label_ids])
+ else
+ filter_labels_by_name([:label_ids])
+ end
+ end
+
+ def filter_labels_by_name(keys)
+ keys.each do |key|
+ return if params[key].to_a.empty?
+
+ params[key] = project.labels.where(id: params[key]).pluck(:id)
+ end
+ end
+
+ def update_issuable(issuable, attributes)
+ issuable.with_transaction_returning_status do
+ add_label_ids = attributes.delete(:add_label_ids)
+ remove_label_ids = attributes.delete(:remove_label_ids)
- params[:label_ids] =
- project.labels.where(id: params[:label_ids]).pluck(:id)
+ issuable.label_ids |= add_label_ids if add_label_ids
+ issuable.label_ids -= remove_label_ids if remove_label_ids
+
+ issuable.assign_attributes(attributes)
+
+ issuable.save
+ end
end
def update(issuable)
@@ -78,7 +105,7 @@ class IssuableBaseService < BaseService
filter_params
old_labels = issuable.labels.to_a
- if params.present? && issuable.update_attributes(params.merge(updated_by: current_user))
+ if params.present? && update_issuable(issuable, params.merge(updated_by: current_user))
issuable.reset_events_cache
handle_common_system_notes(issuable, old_labels: old_labels)
handle_changes(issuable, old_labels: old_labels)