Class: Gitlab::GitalyClient::BlobService
Constant Summary
EncodingHelper::BOM_UTF8, EncodingHelper::ENCODING_CONFIDENCE_THRESHOLD, EncodingHelper::ESCAPED_CHARS, EncodingHelper::UNICODE_REPLACEMENT_CHARACTER
Instance Attribute Summary
#repository_actor
Instance Method Summary
collapse
-
#batch_lfs_pointers(blob_ids) ⇒ Object
-
#get_all_lfs_pointers ⇒ Object
-
#get_blob(oid:, limit:) ⇒ Object
-
#get_blob_types(revision_paths, limit = -1)) ⇒ Object
-
#get_blobs(revision_paths, limit = -1)) ⇒ Object
-
#get_new_lfs_pointers(revisions, limit, not_in, dynamic_timeout = nil) ⇒ Object
-
#initialize(repository) ⇒ BlobService
constructor
A new instance of BlobService.
-
#list_all_blobs(limit: nil, bytes_limit: 0, dynamic_timeout: nil, ignore_alternate_object_directories: false) ⇒ Object
-
#list_blobs(revisions, limit: 0, bytes_limit: 0, with_paths: false, dynamic_timeout: nil) ⇒ Object
-
#list_oversized_blobs(file_size_limit_megabytes: 100, limit: nil, bytes_limit: 0, dynamic_timeout: nil, ignore_alternate_object_directories: false) ⇒ Object
#gitaly_client_call, #gitaly_feature_flag_actors, #group_actor, #project_actor, #user_actor
#binary_io, #detect_binary?, #detect_encoding, #detect_libgit2_binary?, #encode!, #encode_binary, #encode_utf8, #encode_utf8_no_detect, #encode_utf8_with_escaping!, #encode_utf8_with_replacement_character, #force_encode_utf8, #strip_bom, #unquote_path
Constructor Details
#initialize(repository) ⇒ BlobService
Returns a new instance of BlobService.
9
10
11
12
13
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 9
def initialize(repository)
@gitaly_repo = repository.gitaly_repository
self.repository_actor = repository
end
|
Instance Method Details
#batch_lfs_pointers(blob_ids) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 56
def batch_lfs_pointers(blob_ids)
return [] if blob_ids.empty?
request = Gitaly::GetLFSPointersRequest.new(
repository: @gitaly_repo,
blob_ids: blob_ids
)
response = gitaly_client_call(@gitaly_repo.storage_name, :blob_service, :get_lfs_pointers, request, timeout: GitalyClient.medium_timeout)
map_lfs_pointers(response)
end
|
#get_all_lfs_pointers ⇒ Object
134
135
136
137
138
139
140
141
142
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 134
def get_all_lfs_pointers
request = Gitaly::ListLFSPointersRequest.new(
repository: @gitaly_repo,
revisions: [encode_binary("--all")]
)
response = gitaly_client_call(@gitaly_repo.storage_name, :blob_service, :list_lfs_pointers, request, timeout: GitalyClient.medium_timeout)
map_lfs_pointers(response)
end
|
#get_blob(oid:, limit:) ⇒ Object
15
16
17
18
19
20
21
22
23
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 15
def get_blob(oid:, limit:)
request = Gitaly::GetBlobRequest.new(
repository: @gitaly_repo,
oid: oid,
limit: limit
)
response = gitaly_client_call(@gitaly_repo.storage_name, :blob_service, :get_blob, request, timeout: GitalyClient.fast_timeout)
consume_blob_response(response)
end
|
#get_blob_types(revision_paths, limit = -1)) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 91
def get_blob_types(revision_paths, limit = -1)
return {} if revision_paths.empty?
request_revision_paths = revision_paths.map do |rev, path|
Gitaly::GetBlobsRequest::RevisionPath.new(revision: rev, path: encode_binary(path))
end
request = Gitaly::GetBlobsRequest.new(
repository: @gitaly_repo,
revision_paths: request_revision_paths,
limit: limit
)
response = gitaly_client_call(
@gitaly_repo.storage_name,
:blob_service,
:get_blobs,
request,
timeout: GitalyClient.fast_timeout
)
map_blob_types(response)
end
|
#get_blobs(revision_paths, limit = -1)) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 68
def get_blobs(revision_paths, limit = -1)
return [] if revision_paths.empty?
request_revision_paths = revision_paths.map do |rev, path|
Gitaly::GetBlobsRequest::RevisionPath.new(revision: rev, path: encode_binary(path))
end
request = Gitaly::GetBlobsRequest.new(
repository: @gitaly_repo,
revision_paths: request_revision_paths,
limit: limit
)
response = gitaly_client_call(
@gitaly_repo.storage_name,
:blob_service,
:get_blobs,
request,
timeout: GitalyClient.fast_timeout)
GitalyClient::BlobsStitcher.new(response)
end
|
#get_new_lfs_pointers(revisions, limit, not_in, dynamic_timeout = nil) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 114
def get_new_lfs_pointers(revisions, limit, not_in, dynamic_timeout = nil)
request, rpc = create_new_lfs_pointers_request(revisions, limit, not_in)
timeout =
if dynamic_timeout
[dynamic_timeout, GitalyClient.medium_timeout].min
else
GitalyClient.medium_timeout
end
response = gitaly_client_call(
@gitaly_repo.storage_name,
:blob_service,
rpc,
request,
timeout: timeout
)
map_lfs_pointers(response)
end
|
#list_all_blobs(limit: nil, bytes_limit: 0, dynamic_timeout: nil, ignore_alternate_object_directories: false) ⇒ Object
25
26
27
28
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 25
def list_all_blobs(limit: nil, bytes_limit: 0, dynamic_timeout: nil, ignore_alternate_object_directories: false)
response = list_all_blobs_response(limit: limit, bytes_limit: bytes_limit, dynamic_timeout: dynamic_timeout, ignore_alternate_object_directories: ignore_alternate_object_directories)
GitalyClient::BlobsStitcher.new(GitalyClient::ListBlobsAdapter.new(response))
end
|
#list_blobs(revisions, limit: 0, bytes_limit: 0, with_paths: false, dynamic_timeout: nil) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 36
def list_blobs(revisions, limit: 0, bytes_limit: 0, with_paths: false, dynamic_timeout: nil)
request = Gitaly::ListBlobsRequest.new(
repository: @gitaly_repo,
revisions: Array.wrap(revisions),
limit: limit,
bytes_limit: bytes_limit,
with_paths: with_paths
)
timeout =
if dynamic_timeout
[dynamic_timeout, GitalyClient.medium_timeout].min
else
GitalyClient.medium_timeout
end
response = gitaly_client_call(@gitaly_repo.storage_name, :blob_service, :list_blobs, request, timeout: timeout)
GitalyClient::BlobsStitcher.new(GitalyClient::ListBlobsAdapter.new(response))
end
|
#list_oversized_blobs(file_size_limit_megabytes: 100, limit: nil, bytes_limit: 0, dynamic_timeout: nil, ignore_alternate_object_directories: false) ⇒ Object
30
31
32
33
34
|
# File 'lib/gitlab/gitaly_client/blob_service.rb', line 30
def list_oversized_blobs(file_size_limit_megabytes: 100, limit: nil, bytes_limit: 0, dynamic_timeout: nil, ignore_alternate_object_directories: false)
response = list_all_blobs_response(limit: limit, bytes_limit: bytes_limit, dynamic_timeout: dynamic_timeout, ignore_alternate_object_directories: ignore_alternate_object_directories)
file_size_limit_bytes = ::Gitlab::Utils.try_megabytes_to_bytes(file_size_limit_megabytes)
BlobsStitcher.new(GitalyClient::ListBlobsAdapter.new(response), filter_function: ->(blob) { blob.size&.> file_size_limit_bytes })
end
|