debian-mirror-gitlab/lib/api/lsif_data.rb

41 lines
1.2 KiB
Ruby
Raw Normal View History

2020-03-09 13:42:32 +05:30
# frozen_string_literal: true
module API
class LsifData < Grape::API
MAX_FILE_SIZE = 10.megabytes
before do
not_found! if Feature.disabled?(:code_navigation, user_project)
end
params do
requires :id, type: String, desc: 'The ID of a project'
requires :commit_id, type: String, desc: 'The ID of a commit'
end
resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
segment ':id/commits/:commit_id' do
params do
2020-04-08 14:13:33 +05:30
requires :paths, type: Array, desc: 'The paths of the files'
2020-03-09 13:42:32 +05:30
end
get 'lsif/info' do
authorize! :download_code, user_project
artifact =
2020-04-08 14:13:33 +05:30
Ci::JobArtifact
2020-03-09 13:42:32 +05:30
.with_file_types(['lsif'])
2020-04-08 14:13:33 +05:30
.for_sha(params[:commit_id], @project.id)
2020-03-09 13:42:32 +05:30
.last
not_found! unless artifact
authorize! :read_pipeline, artifact.job.pipeline
file_too_large! if artifact.file.cached_size > MAX_FILE_SIZE
2020-04-08 14:13:33 +05:30
service = ::Projects::LsifDataService.new(artifact.file, @project, params[:commit_id])
params[:paths].to_h { |path| [path, service.execute(path)] }
2020-03-09 13:42:32 +05:30
end
end
end
end
end