blob: 2ea5a8856ecd784c477690f9639bc61c7ba13129 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# frozen_string_literal: true
module Repositories
class TreeFinder < GitRefsFinder
attr_reader :user_project
CommitMissingError = Class.new(StandardError)
def initialize(user_project, params = {})
super(user_project.repository, params)
@user_project = user_project
end
def execute(gitaly_pagination: false)
raise CommitMissingError unless commit_exists?
request_params = { recursive: recursive }
request_params[:pagination_params] = pagination_params if gitaly_pagination
tree = user_project.repository.tree(commit.id, path, **request_params)
tree.sorted_entries
end
def total
# This is inefficient and we'll look at replacing this implementation
Gitlab::Cache.fetch_once([user_project, repository.commit, :tree_size, commit.id, path, recursive]) do
user_project.repository.tree(commit.id, path, recursive: recursive).entries.size
end
end
def commit_exists?
commit.present?
end
private
def commit
@commit ||= user_project.commit(ref)
end
def ref
params[:ref] || user_project.default_branch
end
def path
params[:path]
end
def recursive
params[:recursive]
end
def pagination_params
{
limit: params[:per_page] || Kaminari.config.default_per_page,
page_token: params[:page_token]
}
end
end
end
|