Skip to content
Snippets Groups Projects
Select Git revision
  • ag-test
  • rs-test
  • master default protected
  • test-me-pa
  • mksionek-master-patch-52381
  • new-branch-10
  • test-conflicts
  • test-suggestions
  • alejandro-test
  • patch-25
  • winh-test-image-doscussion
  • stg-lfs-image-test-2
  • stg-lfs-image-test
  • test42016
  • issue_42016
  • issue-32709
  • add-codeowners
  • ClemMakesApps-master-patch-62759
  • bvl-staging-test
  • bvl-merge-base-api
  • v9.2.0-rc6 protected
  • v9.2.0-rc5 protected
  • v9.2.0-rc4 protected
  • v9.2.0-rc3 protected
  • v9.1.4 protected
  • v9.2.0-rc2 protected
  • v9.2.0-rc1 protected
  • v9.1.3 protected
  • v8.17.6 protected
  • v9.0.7 protected
  • v9.1.2 protected
  • v9.1.1 protected
  • v9.2.0.pre protected
  • v9.1.0 protected
  • v9.1.0-rc7 protected
  • v9.1.0-rc6 protected
  • v9.0.6 protected
  • v9.1.0-rc5 protected
  • v9.1.0-rc4 protected
  • v9.1.0-rc3 protected
40 results

base_service.rb

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    base_service.rb 2.32 KiB
    module Files
      class BaseService < ::BaseService
        class ValidationError < StandardError; end
    
        def execute
          @source_project = params[:source_project] || @project
          @source_branch = params[:source_branch]
          @target_branch  = params[:target_branch]
    
          @commit_message = params[:commit_message]
          @file_path      = params[:file_path]
          @previous_path  = params[:previous_path]
          @file_content   = if params[:file_content_encoding] == 'base64'
                              Base64.decode64(params[:file_content])
                            else
                              params[:file_content]
                            end
    
          puts @file_path
    
          # Validate parameters
          validate
    
          # Create new branch if it different from source_branch
          if different_branch?
            create_target_branch
          end
    
          if commit
            success
          else
            error('Something went wrong. Your changes were not committed')
          end
        rescue Repository::CommitError, Gitlab::Git::Repository::InvalidBlobName, GitHooksService::PreReceiveError, ValidationError => ex
          error(ex.message)
        end
    
        private
    
        def different_branch?
          @source_branch != @target_branch || @source_project != @project
        end
    
        def raise_error(message)
          raise ValidationError.new(message)
        end
    
        def validate
          allowed = ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(@target_branch)
    
          unless allowed
            raise_error("You are not allowed to push into this branch")
          end
    
          unless project.empty_repo?
            unless @source_project.repository.branch_names.include?(@source_branch)
              raise_error('You can only create or edit files when you are on a branch')
            end
    
            if different_branch?
              if repository.branch_names.include?(@target_branch)
                raise_error('Branch with such name already exists. You need to switch to this branch in order to make changes')
              end
            end
          end
        end
    
        def create_target_branch
          result = CreateBranchService.new(project, current_user).execute(@target_branch, @source_branch, source_project: @source_project)
    
          unless result[:status] == :success
            raise_error("Something went wrong when we tried to create #{@target_branch} for you: #{result[:message]}")
          end
        end
      end
    end