Skip to content

Commit 2a5e9bc

Browse files
authored
Merge pull request #3841 from omefire/Bug_3795
WGET doesn't support range requests, so we should ignore them when using it
2 parents 8c400a4 + eb0596b commit 2a5e9bc

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

cabal-install/Distribution/Client/HttpUtils.hs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,10 +420,20 @@ curlTransport prog =
420420

421421
wgetTransport :: ConfiguredProgram -> HttpTransport
422422
wgetTransport prog =
423-
HttpTransport gethttp posthttp posthttpfile puthttpfile True False
423+
HttpTransport gethttp posthttp posthttpfile puthttpfile True False
424424
where
425-
gethttp verbosity uri etag destPath reqHeaders = do
425+
gethttp verbosity uri etag destPath reqHeaders = do
426426
resp <- runWGet verbosity uri args
427+
428+
-- wget doesn't support range requests.
429+
-- so, we not only ignore range request headers,
430+
-- but we also dispay a warning message when we see them.
431+
let hasRangeHeader = any (\hdr -> isRangeHeader hdr) reqHeaders
432+
warningMsg = "the 'wget' transport currently doesn't support range requests, which wastes network bandwidth."
433+
++ " To fix this, set 'http-transport' to 'curl' or 'plain-http' in '~/.cabal/config'."
434+
++ " Note that the 'plain-http' transport doesn't support HTTPS.\n"
435+
436+
when (hasRangeHeader) $ warn verbosity warningMsg
427437
(code, etag') <- parseOutput uri resp
428438
return (code, etag')
429439
where
@@ -436,7 +446,13 @@ wgetTransport prog =
436446
[ ["--header", "If-None-Match: " ++ t]
437447
| t <- maybeToList etag ]
438448
++ [ "--header=" ++ show name ++ ": " ++ value
439-
| Header name value <- reqHeaders ]
449+
| hdr@(Header name value) <- reqHeaders, (not (isRangeHeader hdr)) ]
450+
451+
-- wget doesn't support range requests.
452+
-- so, we ignore range request headers, lest we get errors.
453+
isRangeHeader :: Header -> Bool
454+
isRangeHeader (Header HdrRange _) = True
455+
isRangeHeader _ = False
440456

441457
posthttp = noPostYet
442458

0 commit comments

Comments
 (0)