39 lines
1.3 KiB
Ruby
39 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Resolvers
|
|
module Snippets
|
|
class BlobsResolver < BaseResolver
|
|
include Gitlab::Graphql::Authorize::AuthorizeResource
|
|
|
|
type Types::Snippets::BlobType.connection_type, null: true
|
|
authorize :read_snippet
|
|
calls_gitaly!
|
|
authorizes_object!
|
|
|
|
alias_method :snippet, :object
|
|
|
|
argument :paths, [GraphQL::Types::String],
|
|
required: false,
|
|
description: 'Paths of the blobs.'
|
|
|
|
def resolve(paths: [])
|
|
return [snippet.blob] if snippet.empty_repo?
|
|
|
|
paths = snippet.all_files if paths.empty?
|
|
blobs = snippet.blobs(paths)
|
|
|
|
# TODO: Some blobs, e.g. those with non-utf8 filenames, are returned as nil from the
|
|
# repository. We need to provide a flag to notify the user of this until we come up with a
|
|
# way to retrieve and display these blobs. We will be exploring a more holistic solution for
|
|
# this general problem of making all blobs retrievable as part
|
|
# of https://gitlab.com/gitlab-org/gitlab/-/issues/323082, at which point this attribute may
|
|
# be removed.
|
|
context[:unretrievable_blobs?] = blobs.size < paths.size
|
|
|
|
blobs
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Resolvers::Snippets::BlobsResolver.prepend_mod
|