From 27cadc3f3b68595cde18a2463b91f37bd9e0cf55 Mon Sep 17 00:00:00 2001 From: Nikolay Edigaryev Date: Thu, 14 Sep 2023 21:16:08 +0400 Subject: [PATCH] tart create --from-ipsw: do a HEAD instead of a GET first (#599) --- Sources/tart/VM.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Sources/tart/VM.swift b/Sources/tart/VM.swift index 51ba2fb..92037bb 100644 --- a/Sources/tart/VM.swift +++ b/Sources/tart/VM.swift @@ -71,9 +71,11 @@ class VM: NSObject, VZVirtualMachineDelegate, ObservableObject { static func retrieveIPSW(remoteURL: URL) async throws -> URL { // Check if we already have this IPSW in cache - let (channel, response) = try await Fetcher.fetch(URLRequest(url: remoteURL), viaFile: true) + var headRequest = URLRequest(url: remoteURL) + headRequest.httpMethod = "HEAD" + let (_, headResponse) = try await Fetcher.fetch(headRequest, viaFile: false) - if let hash = response.value(forHTTPHeaderField: "x-amz-meta-digest-sha256") { + if let hash = headResponse.value(forHTTPHeaderField: "x-amz-meta-digest-sha256") { let ipswLocation = try IPSWCache().locationFor(fileName: "sha256:\(hash).ipsw") if FileManager.default.fileExists(atPath: ipswLocation.path) { @@ -87,6 +89,8 @@ class VM: NSObject, VZVirtualMachineDelegate, ObservableObject { // Download the IPSW defaultLogger.appendNewLine("Fetching \(remoteURL.lastPathComponent)...") + let (channel, response) = try await Fetcher.fetch(URLRequest(url: remoteURL), viaFile: true) + let progress = Progress(totalUnitCount: response.expectedContentLength) ProgressObserver(progress).log(defaultLogger)