| ... | @@ -16,17 +16,14 @@ module Projects |
... | @@ -16,17 +16,14 @@ module Projects |
|
|
@lfs_download_object = lfs_download_object
|
|
@lfs_download_object = lfs_download_object
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
# rubocop: disable CodeReuse/ActiveRecord
|
|
|
|
|
def execute
|
|
def execute
|
|
|
return unless project&.lfs_enabled? && lfs_download_object
|
|
return unless project&.lfs_enabled? && lfs_download_object
|
|
|
return error("LFS file with oid #{lfs_oid} has invalid attributes") unless lfs_download_object.valid?
|
|
return error("LFS file with oid #{lfs_oid} has invalid attributes") unless lfs_download_object.valid?
|
|
|
return if LfsObject.exists?(oid: lfs_oid)
|
|
|
|
|
|
|
|
|
|
wrap_download_errors do
|
|
wrap_download_errors do
|
|
|
download_lfs_file!
|
|
download_lfs_file!
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
# rubocop: enable CodeReuse/ActiveRecord
|
|
|
|
|
|
|
|
|
|
private
|
|
private
|
|
|
|
|
|
| ... | @@ -39,14 +36,24 @@ module Projects |
... | @@ -39,14 +36,24 @@ module Projects |
|
|
def download_lfs_file!
|
|
def download_lfs_file!
|
|
|
with_tmp_file do |tmp_file|
|
|
with_tmp_file do |tmp_file|
|
|
|
download_and_save_file!(tmp_file)
|
|
download_and_save_file!(tmp_file)
|
|
|
project.lfs_objects << LfsObject.new(oid: lfs_oid,
|
|
|
|
|
size: lfs_size,
|
|
project.lfs_objects << find_or_create_lfs_object(tmp_file)
|
|
|
file: tmp_file)
|
|
|
|
|
|
|
|
|
|
success
|
|
success
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
def find_or_create_lfs_object(tmp_file)
|
|
|
|
lfs_obj = LfsObject.safe_find_or_create_by!(
|
|
|
|
oid: lfs_oid,
|
|
|
|
size: lfs_size
|
|
|
|
)
|
|
|
|
|
|
|
|
lfs_obj.update!(file: tmp_file) unless lfs_obj.file.file
|
|
|
|
|
|
|
|
lfs_obj
|
|
|
|
end
|
|
|
|
|
|
|
def download_and_save_file!(file)
|
|
def download_and_save_file!(file)
|
|
|
digester = Digest::SHA256.new
|
|
digester = Digest::SHA256.new
|
|
|
response = Gitlab::HTTP.get(lfs_sanitized_url, download_headers) do |fragment|
|
|
response = Gitlab::HTTP.get(lfs_sanitized_url, download_headers) do |fragment|
|
| ... | |
... | |
| ... | | ... | |