diff options
Diffstat (limited to 'app/services/projects')
-rw-r--r-- | app/services/projects/autocomplete_service.rb | 15 | ||||
-rw-r--r-- | app/services/projects/create_service.rb | 96 | ||||
-rw-r--r-- | app/services/projects/destroy_service.rb | 28 | ||||
-rw-r--r-- | app/services/projects/fork_service.rb | 66 | ||||
-rw-r--r-- | app/services/projects/participants_service.rb | 50 | ||||
-rw-r--r-- | app/services/projects/transfer_service.rb | 74 | ||||
-rw-r--r-- | app/services/projects/update_service.rb | 27 | ||||
-rw-r--r-- | app/services/projects/upload_service.rb | 28 |
8 files changed, 0 insertions, 384 deletions
diff --git a/app/services/projects/autocomplete_service.rb b/app/services/projects/autocomplete_service.rb deleted file mode 100644 index 7408e09ed1e..00000000000 --- a/app/services/projects/autocomplete_service.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Projects - class AutocompleteService < BaseService - def initialize(project) - @project = project - end - - def issues - @project.issues.opened.select([:iid, :title]) - end - - def merge_requests - @project.merge_requests.opened.select([:iid, :title]) - end - end -end diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb deleted file mode 100644 index a7afcf8f64b..00000000000 --- a/app/services/projects/create_service.rb +++ /dev/null @@ -1,96 +0,0 @@ -module Projects - class CreateService < BaseService - def initialize(user, params) - @current_user, @params = user, params.dup - end - - def execute - @project = Project.new(params) - - # Make sure that the user is allowed to use the specified visibility - # level - unless Gitlab::VisibilityLevel.allowed_for?(current_user, - params[:visibility_level]) - deny_visibility_level(@project) - return @project - end - - # Set project name from path - if @project.name.present? && @project.path.present? - # if both name and path set - everything is ok - elsif @project.path.present? - # Set project name from path - @project.name = @project.path.dup - elsif @project.name.present? - # For compatibility - set path from name - # TODO: remove this in 8.0 - @project.path = @project.name.dup.parameterize - end - - # get namespace id - namespace_id = params[:namespace_id] - - if namespace_id - # Find matching namespace and check if it allowed - # for current user if namespace_id passed. - unless allowed_namespace?(current_user, namespace_id) - @project.namespace_id = nil - deny_namespace - return @project - end - else - # Set current user namespace if namespace_id is nil - @project.namespace_id = current_user.namespace_id - end - - @project.creator = current_user - - Project.transaction do - @project.save - - unless @project.import? - unless @project.create_repository - raise 'Failed to create repository' - end - end - end - - after_create_actions if @project.persisted? - - @project - rescue => ex - @project.errors.add(:base, "Can't save project. Please try again later") - @project - end - - protected - - def deny_namespace - @project.errors.add(:namespace, "is not valid") - end - - def allowed_namespace?(user, namespace_id) - namespace = Namespace.find_by(id: namespace_id) - current_user.can?(:create_projects, namespace) - end - - def after_create_actions - log_info("#{@project.owner.name} created a new project \"#{@project.name_with_namespace}\"") - - @project.create_wiki if @project.wiki_enabled? - - event_service.create_project(@project, current_user) - system_hook_service.execute_hooks_for(@project, :create) - - unless @project.group - @project.team << [current_user, :master, current_user] - end - - @project.update_column(:last_activity_at, @project.created_at) - - if @project.import? - @project.import_start - end - end - end -end diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb deleted file mode 100644 index 7e1d753b021..00000000000 --- a/app/services/projects/destroy_service.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Projects - class DestroyService < BaseService - def execute - return false unless can?(current_user, :remove_project, project) - - project.team.truncate - project.repository.expire_cache unless project.empty_repo? - - if project.destroy - GitlabShellWorker.perform_async( - :remove_repository, - project.path_with_namespace - ) - - GitlabShellWorker.perform_async( - :remove_repository, - project.path_with_namespace + ".wiki" - ) - - project.satellite.destroy - - log_info("Project \"#{project.name}\" was removed") - system_hook_service.execute_hooks_for(project, :destroy) - true - end - end - end -end diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb deleted file mode 100644 index 1e4deb6ed39..00000000000 --- a/app/services/projects/fork_service.rb +++ /dev/null @@ -1,66 +0,0 @@ -module Projects - class ForkService < BaseService - include Gitlab::ShellAdapter - - def execute - @from_project = @project - - project_params = { - visibility_level: @from_project.visibility_level, - description: @from_project.description, - } - - project = Project.new(project_params) - project.name = @from_project.name - project.path = @from_project.path - project.creator = @current_user - if @from_project.avatar.present? && @from_project.avatar.image? - project.avatar = @from_project.avatar - end - - if namespace = @params[:namespace] - project.namespace = namespace - else - project.namespace = @current_user.namespace - end - - unless @current_user.can?(:create_projects, project.namespace) - project.errors.add(:namespace, 'insufficient access rights') - return project - end - - # If the project cannot save, we do not want to trigger the project destroy - # as this can have the side effect of deleting a repo attached to an existing - # project with the same name and namespace - if project.valid? - begin - Project.transaction do - #First save the DB entries as they can be rolled back if the repo fork fails - project.build_forked_project_link(forked_to_project_id: project.id, forked_from_project_id: @from_project.id) - if project.save - project.team << [@current_user, :master, @current_user] - end - - #Now fork the repo - unless gitlab_shell.fork_repository(@from_project.path_with_namespace, project.namespace.path) - raise 'forking failed in gitlab-shell' - end - - project.ensure_satellite_exists - end - - if @from_project.gitlab_ci? - ForkRegistrationWorker.perform_async(@from_project.id, project.id, @current_user.private_token) - end - rescue => ex - project.errors.add(:base, 'Fork transaction failed.') - project.destroy - end - else - project.errors.add(:base, 'Invalid fork destination') - end - - project - end - end -end diff --git a/app/services/projects/participants_service.rb b/app/services/projects/participants_service.rb deleted file mode 100644 index ae6260bcdab..00000000000 --- a/app/services/projects/participants_service.rb +++ /dev/null @@ -1,50 +0,0 @@ -module Projects - class ParticipantsService < BaseService - def execute(note_type, note_id) - participating = - if note_type && note_id - participants_in(note_type, note_id) - else - [] - end - project_members = sorted(project.team.members) - participants = all_members + groups + project_members + participating - participants.uniq - end - - def participants_in(type, id) - users = case type - when "Issue" - issue = project.issues.find_by_iid(id) - issue ? issue.participants(current_user) : [] - when "MergeRequest" - merge_request = project.merge_requests.find_by_iid(id) - merge_request ? merge_request.participants(current_user) : [] - when "Commit" - author_ids = Note.for_commit_id(id).pluck(:author_id).uniq - User.where(id: author_ids) - else - [] - end - sorted(users) - end - - def sorted(users) - users.uniq.to_a.compact.sort_by(&:username).map do |user| - { username: user.username, name: user.name } - end - end - - def groups - current_user.authorized_groups.sort_by(&:path).map do |group| - count = group.users.count - { username: group.path, name: "#{group.name} (#{count})" } - end - end - - def all_members - count = project.team.members.flatten.count - [{ username: "all", name: "All Project and Group Members (#{count})" }] - end - end -end diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb deleted file mode 100644 index 489e03bd5ef..00000000000 --- a/app/services/projects/transfer_service.rb +++ /dev/null @@ -1,74 +0,0 @@ -# Projects::TransferService class -# -# Used for transfer project to another namespace -# -# Ex. -# # Move projects to namespace with ID 17 by user -# Projects::TransferService.new(project, user, namespace_id: 17).execute -# -module Projects - class TransferService < BaseService - include Gitlab::ShellAdapter - class TransferError < StandardError; end - - def execute - namespace_id = params[:new_namespace_id] - namespace = Namespace.find_by(id: namespace_id) - - if allowed_transfer?(current_user, project, namespace) - transfer(project, namespace) - else - project.errors.add(:namespace, 'is invalid') - false - end - rescue Projects::TransferService::TransferError => ex - project.reload - project.errors.add(:namespace_id, ex.message) - false - end - - def transfer(project, new_namespace) - Project.transaction do - old_path = project.path_with_namespace - new_path = File.join(new_namespace.try(:path) || '', project.path) - - if Project.where(path: project.path, namespace_id: new_namespace.try(:id)).present? - raise TransferError.new("Project with same path in target namespace already exists") - end - - # Remove old satellite - project.satellite.destroy - - # Apply new namespace id - project.namespace = new_namespace - project.save! - - # Notifications - project.send_move_instructions - - # Move main repository - unless gitlab_shell.mv_repository(old_path, new_path) - raise TransferError.new('Cannot move project') - end - - # Move wiki repo also if present - gitlab_shell.mv_repository("#{old_path}.wiki", "#{new_path}.wiki") - - # Create a new satellite (reload project from DB) - Project.find(project.id).ensure_satellite_exists - - # clear project cached events - project.reset_events_cache - - true - end - end - - def allowed_transfer?(current_user, project, namespace) - namespace && - can?(current_user, :change_namespace, project) && - namespace.id != project.namespace_id && - current_user.can?(:create_projects, namespace) - end - end -end diff --git a/app/services/projects/update_service.rb b/app/services/projects/update_service.rb deleted file mode 100644 index 69bdd045ddf..00000000000 --- a/app/services/projects/update_service.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Projects - class UpdateService < BaseService - def execute - # check that user is allowed to set specified visibility_level - new_visibility = params[:visibility_level] - if new_visibility && new_visibility.to_i != project.visibility_level - unless can?(current_user, :change_visibility_level, project) && - Gitlab::VisibilityLevel.allowed_for?(current_user, new_visibility) - deny_visibility_level(project, new_visibility) - return project - end - end - - new_branch = params[:default_branch] - - if project.repository.exists? && new_branch && new_branch != project.default_branch - project.change_head(new_branch) - end - - if project.update_attributes(params.except(:default_branch)) - if project.previous_changes.include?('path') - project.rename_repo - end - end - end - end -end diff --git a/app/services/projects/upload_service.rb b/app/services/projects/upload_service.rb deleted file mode 100644 index 992a7a7a1dc..00000000000 --- a/app/services/projects/upload_service.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Projects - class UploadService < BaseService - def initialize(project, file) - @project, @file = project, file - end - - def execute - return nil unless @file and @file.size <= max_attachment_size - - uploader = FileUploader.new(@project) - uploader.store!(@file) - - filename = uploader.image? ? uploader.file.basename : uploader.file.filename - - { - 'alt' => filename, - 'url' => uploader.secure_url, - 'is_image' => uploader.image? - } - end - - private - - def max_attachment_size - current_application_settings.max_attachment_size.megabytes.to_i - end - end -end |