utils/curl: support disabling partial downloads in curl_download
This commit is contained in:
parent
2970d2e4f9
commit
997ba42a4b
@ -54,21 +54,25 @@ def curl(*args, secrets: [], **options)
|
|||||||
secrets: secrets
|
secrets: secrets
|
||||||
end
|
end
|
||||||
|
|
||||||
def curl_download(*args, to: nil, **options)
|
def curl_download(*args, to: nil, partial: true, **options)
|
||||||
destination = Pathname(to)
|
destination = Pathname(to)
|
||||||
destination.dirname.mkpath
|
destination.dirname.mkpath
|
||||||
|
|
||||||
range_stdout = curl_output("--location", "--range", "0-1",
|
if partial
|
||||||
"--dump-header", "-",
|
range_stdout = curl_output("--location", "--range", "0-1",
|
||||||
"--write-out", "%\{http_code}",
|
"--dump-header", "-",
|
||||||
"--output", "/dev/null", *args, **options).stdout
|
"--write-out", "%\{http_code}",
|
||||||
headers, _, http_status = range_stdout.partition("\r\n\r\n")
|
"--output", "/dev/null", *args, **options).stdout
|
||||||
|
headers, _, http_status = range_stdout.partition("\r\n\r\n")
|
||||||
|
|
||||||
supports_partial_download = http_status.to_i == 206 # Partial Content
|
supports_partial_download = http_status.to_i == 206 # Partial Content
|
||||||
if supports_partial_download &&
|
if supports_partial_download &&
|
||||||
destination.exist? &&
|
destination.exist? &&
|
||||||
destination.size == %r{^.*Content-Range: bytes \d+-\d+/(\d+)\r\n.*$}m.match(headers)&.[](1)&.to_i
|
destination.size == %r{^.*Content-Range: bytes \d+-\d+/(\d+)\r\n.*$}m.match(headers)&.[](1)&.to_i
|
||||||
return # We've already downloaded all the bytes
|
return # We've already downloaded all the bytes
|
||||||
|
end
|
||||||
|
else
|
||||||
|
supports_partial_download = false
|
||||||
end
|
end
|
||||||
|
|
||||||
continue_at = if destination.exist? && supports_partial_download
|
continue_at = if destination.exist? && supports_partial_download
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user