diff options
Diffstat (limited to 'app/finders/lfs_pointers_finder.rb')
-rw-r--r-- | app/finders/lfs_pointers_finder.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/finders/lfs_pointers_finder.rb b/app/finders/lfs_pointers_finder.rb new file mode 100644 index 00000000000..7e621002f1e --- /dev/null +++ b/app/finders/lfs_pointers_finder.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +class LfsPointersFinder + def initialize(repository, path) + @repository = repository + @path = path + end + + def execute + return [] unless ref + + blob_ids = tree.blobs.map(&:id) + + # When current endpoint is a Blob then `tree.blobs` will be empty, it means we need to analyze + # the current Blob in order to determine if it's a LFS object + blob_ids = Array.wrap(current_blob&.id) if blob_ids.empty? + + Gitlab::Git::Blob.batch_lfs_pointers(repository, blob_ids).map(&:id) + end + + private + + attr_reader :repository, :path + + def ref + repository.root_ref + end + + def tree + repository.tree(ref, path) + end + + def current_blob + repository.blob_at(ref, path) + end +end |