Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/finders/lfs_pointers_finder.rb')
-rw-r--r--app/finders/lfs_pointers_finder.rb36
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