mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-26 18:46:23 +00:00
feat: implementar un servicio liviano de git-lfs #9361
This commit is contained in:
parent
b15ebdf549
commit
4c49926e4c
1 changed files with 64 additions and 0 deletions
64
app/services/lfs_object_service.rb
Normal file
64
app/services/lfs_object_service.rb
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# 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
|
Loading…
Reference in a new issue