mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-16 16:31:41 +00:00
65 lines
1.4 KiB
Ruby
65 lines
1.4 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# Representa un objeto git LFS
|
||
|
class LfsObjectService
|
||
|
attr_reader :site, :blob, :usuarie
|
||
|
|
||
|
# @param :site [Site]
|
||
|
# @param :blob [ActiveStorage::Blob]
|
||
|
def initialize(site:, blob:, usuarie:)
|
||
|
@site = site
|
||
|
@blob = blob
|
||
|
@usuarie = usuarie
|
||
|
end
|
||
|
|
||
|
def process
|
||
|
# Crear el directorio
|
||
|
FileUtils.mkdir_p(File.dirname(object_path))
|
||
|
|
||
|
# Mover el archivo
|
||
|
FileUtils.mv(path, object_path) unless File.exist? object_path
|
||
|
|
||
|
# Crear el pointer
|
||
|
Site::Writer.new(site: site, file: path, content: pointer).save
|
||
|
|
||
|
# Commitear el pointer
|
||
|
site.repository.commit(file: path, usuarie: usuarie, message: File.basename(path))
|
||
|
|
||
|
# Eliminar el pointer
|
||
|
FileUtils.rm(path)
|
||
|
|
||
|
# Hacer link duro del objeto al archivo
|
||
|
FileUtils.ln(object_path, path)
|
||
|
end
|
||
|
|
||
|
# @return [String]
|
||
|
def path
|
||
|
@path ||= blob.service.path_for(blob.key)
|
||
|
end
|
||
|
|
||
|
# @return [String]
|
||
|
def digest
|
||
|
@digest ||= Digest::SHA256.file(path).hexdigest
|
||
|
end
|
||
|
|
||
|
# @return [String]
|
||
|
def object_path
|
||
|
@git_lfs_object_path ||= File.join(site.path, '.git', 'lfs', 'objects', digest[0..1], digest[2..3], digest)
|
||
|
end
|
||
|
|
||
|
# @return [Integer]
|
||
|
def size
|
||
|
@size ||= File.size(File.exist?(object_path) ? object_path : path)
|
||
|
end
|
||
|
|
||
|
# @return [String]
|
||
|
def pointer
|
||
|
@pointer ||=
|
||
|
<<~POINTER
|
||
|
version https://git-lfs.github.com/spec/v1
|
||
|
oid sha256:#{digest}
|
||
|
size #{size}
|
||
|
POINTER
|
||
|
end
|
||
|
end
|