in Sources/Hub/HubApi.swift [244:286]
func readDownloadMetadata(metadataPath: URL) throws -> LocalDownloadFileMetadata? {
if FileManager.default.fileExists(atPath: metadataPath.path) {
do {
let contents = try String(contentsOf: metadataPath, encoding: .utf8)
let lines = contents.components(separatedBy: .newlines)
guard lines.count >= 3 else {
throw EnvironmentError.invalidMetadataError(String(localized: "Metadata file is missing required fields"))
}
let commitHash = lines[0].trimmingCharacters(in: .whitespacesAndNewlines)
let etag = lines[1].trimmingCharacters(in: .whitespacesAndNewlines)
guard let timestamp = Double(lines[2].trimmingCharacters(in: .whitespacesAndNewlines)) else {
throw EnvironmentError.invalidMetadataError(String(localized: "Invalid timestamp format"))
}
let timestampDate = Date(timeIntervalSince1970: timestamp)
let filename = metadataPath.lastPathComponent.replacingOccurrences(of: ".metadata", with: "")
return LocalDownloadFileMetadata(commitHash: commitHash, etag: etag, filename: filename, timestamp: timestampDate)
} catch let error as EnvironmentError {
do {
HubApi.logger.warning("Invalid metadata file \(metadataPath): \(error.localizedDescription). Removing it from disk and continuing.")
try FileManager.default.removeItem(at: metadataPath)
} catch {
throw EnvironmentError.invalidMetadataError(String(localized: "Could not remove corrupted metadata file: \(error.localizedDescription)"))
}
return nil
} catch {
do {
HubApi.logger.warning("Error reading metadata file \(metadataPath): \(error.localizedDescription). Removing it from disk and continuing.")
try FileManager.default.removeItem(at: metadataPath)
} catch {
throw EnvironmentError.invalidMetadataError(String(localized: "Could not remove corrupted metadata file: \(error.localizedDescription)"))
}
return nil
}
}
// metadata file does not exist
return nil
}