in Sources/Hub/HubApi.swift [294:323]
func computeFileHash(file url: URL) throws -> String {
// Open file for reading
guard let fileHandle = try? FileHandle(forReadingFrom: url) else {
throw Hub.HubClientError.fileNotFound(url.lastPathComponent)
}
defer {
try? fileHandle.close()
}
var hasher = SHA256()
let chunkSize = 1024 * 1024 // 1MB chunks
while autoreleasepool(invoking: {
let nextChunk = try? fileHandle.read(upToCount: chunkSize)
guard let nextChunk,
!nextChunk.isEmpty
else {
return false
}
hasher.update(data: nextChunk)
return true
}) { }
let digest = hasher.finalize()
return digest.map { String(format: "%02x", $0) }.joined()
}