blob: 78f1716274e0ddcf0d33f30a5a45e8b05f03132a (
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
|
# frozen_string_literal: true
module Gitlab
module Checks
module FileSizeCheck
class AllowExistingOversizedBlobs
def initialize(project:, changes:, file_size_limit_megabytes:)
@project = project
@changes = changes
@oldrevs = changes.pluck(:oldrev).compact # rubocop:disable CodeReuse/ActiveRecord just plucking from an array
@file_size_limit_megabytes = file_size_limit_megabytes
end
def find(timeout: nil)
oversize_blobs = any_oversize_blobs.find(timeout: timeout)
return oversize_blobs unless oldrevs.present?
revs_paths = oldrevs.product(oversize_blobs.map(&:path))
existing_blobs = project.repository.blobs_at(revs_paths, blob_size_limit: 1)
map_existing_path_to_size = existing_blobs.group_by(&:path).transform_values { |blobs| blobs.map(&:size).max }
# return blobs that are going to be over the limit that were previously within the limit
oversize_blobs.select { |blob| map_existing_path_to_size.fetch(blob.path, 0) <= file_size_limit_megabytes }
end
private
attr_reader :project, :changes, :newrevs, :oldrevs, :file_size_limit_megabytes
def any_oversize_blobs
AnyOversizedBlobs.new(project: project, changes: changes,
file_size_limit_megabytes: file_size_limit_megabytes)
end
end
end
end
end
|