@@ -420,10 +420,20 @@ curlTransport prog =
420
420
421
421
wgetTransport :: ConfiguredProgram -> HttpTransport
422
422
wgetTransport prog =
423
- HttpTransport gethttp posthttp posthttpfile puthttpfile True False
423
+ HttpTransport gethttp posthttp posthttpfile puthttpfile True False
424
424
where
425
- gethttp verbosity uri etag destPath reqHeaders = do
425
+ gethttp verbosity uri etag destPath reqHeaders = do
426
426
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
427
437
(code, etag') <- parseOutput uri resp
428
438
return (code, etag')
429
439
where
@@ -436,7 +446,13 @@ wgetTransport prog =
436
446
[ [" --header" , " If-None-Match: " ++ t]
437
447
| t <- maybeToList etag ]
438
448
++ [ " --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
440
456
441
457
posthttp = noPostYet
442
458
0 commit comments