diff options
Diffstat (limited to 'app/services/snippets/update_service.rb')
-rw-r--r-- | app/services/snippets/update_service.rb | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/app/services/snippets/update_service.rb b/app/services/snippets/update_service.rb index 250120c1c19..6cdc2c374da 100644 --- a/app/services/snippets/update_service.rb +++ b/app/services/snippets/update_service.rb @@ -7,12 +7,14 @@ module Snippets UpdateError = Class.new(StandardError) def execute(snippet) + return invalid_params_error(snippet) unless valid_params? + if visibility_changed?(snippet) && !visibility_allowed?(snippet, visibility_level) - return error_forbidden_visibility(snippet) + return forbidden_visibility_error(snippet) end - snippet.assign_attributes(params) - spam_check(snippet, current_user) + update_snippet_attributes(snippet) + spam_check(snippet, current_user, action: :update) if save_and_commit(snippet) Gitlab::UsageDataCounters::SnippetCounter.count(:update) @@ -29,6 +31,19 @@ module Snippets visibility_level && visibility_level.to_i != snippet.visibility_level end + def update_snippet_attributes(snippet) + # We can remove the following condition once + # https://gitlab.com/gitlab-org/gitlab/-/issues/217801 + # is implemented. + # Once we can perform different operations through this service + # we won't need to keep track of the `content` and `file_name` fields + if snippet_files.any? + params.merge!(content: snippet_files[0].content, file_name: snippet_files[0].file_path) + end + + snippet.assign_attributes(params) + end + def save_and_commit(snippet) return false unless snippet.save @@ -81,15 +96,7 @@ module Snippets message: 'Update snippet' } - snippet.snippet_repository.multi_files_action(current_user, snippet_files(snippet), commit_attrs) - end - - def snippet_files(snippet) - file_name_on_repo = snippet.file_name_on_repo - - [{ previous_path: file_name_on_repo, - file_path: params[:file_name] || file_name_on_repo, - content: params[:content] }] + snippet.snippet_repository.multi_files_action(current_user, files_to_commit(snippet), commit_attrs) end # Because we are removing repositories we don't want to remove @@ -101,7 +108,15 @@ module Snippets end def committable_attributes? - (params.stringify_keys.keys & COMMITTABLE_ATTRIBUTES).present? + (params.stringify_keys.keys & COMMITTABLE_ATTRIBUTES).present? || snippet_files.any? + end + + def build_actions_from_params(snippet) + file_name_on_repo = snippet.file_name_on_repo + + [{ previous_path: file_name_on_repo, + file_path: params[:file_name] || file_name_on_repo, + content: params[:content] }] end end end |