mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-04-06 21:20:33 +02:00
http-client: Alter http-fetch to return the response.
Rather than just the port and response-content-length. I'm looking at using the response headers within the substitute script to work out when to close the connection. * guix/http-client.scm (http-fetch): Return the response as the second value, rather than the response-content-length. * guix/build/download-nar.scm (download-nar): Adapt accordingly. * guix/build/download.scm (url-fetch): Adapt accordingly. * guix/scripts/substitute.scm (process-substitution): Adapt accordingly. * guix/scripts/challenge.scm (call-with-nar): Adapt accordingly. Change-Id: I490ecf7cef1f5ebbf1e6ed026f6a8fc9dacc56be
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#:autoload (lzlib) (call-with-lzip-input-port)
|
||||
#:use-module (guix progress)
|
||||
#:use-module (web uri)
|
||||
#:use-module (web response)
|
||||
#:use-module (srfi srfi-11)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:use-module (ice-9 format)
|
||||
@@ -69,7 +70,7 @@ item. Return #t on success, #f otherwise."
|
||||
((url rest ...)
|
||||
(format #t "Trying content-addressed mirror at ~a...~%"
|
||||
(uri-host (string->uri url)))
|
||||
(let-values (((port size)
|
||||
(let-values (((port response)
|
||||
(catch #t
|
||||
(lambda ()
|
||||
(http-fetch (string->uri url)))
|
||||
@@ -81,7 +82,7 @@ item. Return #t on success, #f otherwise."
|
||||
(values #f #f)))))
|
||||
(if (not port)
|
||||
(loop rest)
|
||||
(begin
|
||||
(let ((size (response-content-length response)))
|
||||
(if size
|
||||
(format #t "Downloading from ~a (~,2h MiB)...~%" url
|
||||
(/ size (expt 2 20.)))
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
(define-module (guix build download)
|
||||
#:use-module (web uri)
|
||||
#:use-module (web http)
|
||||
#:use-module (web response)
|
||||
#:use-module ((web client) #:hide (open-socket-for-uri))
|
||||
#:use-module (web response)
|
||||
#:use-module (guix base64)
|
||||
@@ -752,7 +753,7 @@ otherwise simply ignore them."
|
||||
(case (uri-scheme uri)
|
||||
((http https)
|
||||
(false-if-exception*
|
||||
(let-values (((port size)
|
||||
(let-values (((port response)
|
||||
(http-fetch uri
|
||||
#:verify-certificate? verify-certificate?
|
||||
#:timeout timeout)))
|
||||
@@ -762,9 +763,13 @@ otherwise simply ignore them."
|
||||
#:buffer-size %http-receive-buffer-size
|
||||
#:reporter (if print-build-trace?
|
||||
(progress-reporter/trace
|
||||
file (uri->string uri) size)
|
||||
file (uri->string uri)
|
||||
(response-content-length
|
||||
response))
|
||||
(progress-reporter/file
|
||||
(uri-abbreviation uri) size)))
|
||||
(uri-abbreviation uri)
|
||||
(response-content-length
|
||||
response))))
|
||||
(newline)))
|
||||
(close-port port)
|
||||
file)))
|
||||
|
||||
@@ -83,11 +83,11 @@
|
||||
(headers '((user-agent . "GNU Guile")))
|
||||
(log-port (current-error-port))
|
||||
timeout)
|
||||
"Return an input port containing the data at URI, and the expected number of
|
||||
bytes available or #f. If TEXT? is true, the data at URI is considered to be
|
||||
textual. Follow any HTTP redirection. When BUFFERED? is #f, return an
|
||||
unbuffered port, suitable for use in `filtered-port'. HEADERS is an alist of
|
||||
extra HTTP headers.
|
||||
"Return an input port containing the data at URI, and the HTTP response from
|
||||
the server. If TEXT? is true, the data at URI is considered to be textual.
|
||||
Follow any HTTP redirection. When BUFFERED? is #f, return an unbuffered port,
|
||||
suitable for use in `filtered-port'. HEADERS is an alist of extra HTTP
|
||||
headers.
|
||||
|
||||
When KEEP-ALIVE? is true, the connection is marked as 'keep-alive' and PORT is
|
||||
not closed upon completion.
|
||||
@@ -126,7 +126,7 @@ Raise an '&http-get-error' condition if downloading fails."
|
||||
(response-code resp)))
|
||||
(case code
|
||||
((200)
|
||||
(values data (response-content-length resp)))
|
||||
(values data resp))
|
||||
((301 ; moved permanently
|
||||
302 ; found (redirection)
|
||||
303 ; see other
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#:use-module (ice-9 format)
|
||||
#:use-module (ice-9 ftw)
|
||||
#:use-module (web uri)
|
||||
#:use-module (web response)
|
||||
#:export (compare-contents
|
||||
|
||||
comparison-report?
|
||||
@@ -257,11 +258,14 @@ in the nar."
|
||||
"Call PROC with an input port from which it can read the nar pointed to by
|
||||
NARINFO."
|
||||
(let* ((uri compression size (narinfo-best-uri narinfo))
|
||||
(port actual-size (http-fetch uri)))
|
||||
(port response (http-fetch uri)))
|
||||
(define reporter
|
||||
(progress-reporter/file (narinfo-path narinfo)
|
||||
(and size
|
||||
(max size (or actual-size 0))) ;defensive
|
||||
(max size (or
|
||||
(response-content-length
|
||||
response)
|
||||
0))) ;defensive
|
||||
#:abbreviation (const (uri-host uri))))
|
||||
|
||||
(define result
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
#:use-module (srfi srfi-34)
|
||||
#:use-module (srfi srfi-71)
|
||||
#:use-module (web uri)
|
||||
#:use-module (web response)
|
||||
#:use-module (guix http-client)
|
||||
#:export (%allow-unauthenticated-substitutes?
|
||||
%reply-file-descriptor
|
||||
@@ -496,10 +497,14 @@ STATUS-PORT."
|
||||
(uri->string uri))
|
||||
(warning (G_ "try `--no-substitutes' if the problem persists~%")))
|
||||
(with-cached-connection uri port
|
||||
(http-fetch uri #:text? #f
|
||||
#:port port
|
||||
#:keep-alive? #t
|
||||
#:buffered? #f))))
|
||||
(let ((raw
|
||||
response
|
||||
(http-fetch uri #:text? #f
|
||||
#:port port
|
||||
#:keep-alive? #t
|
||||
#:buffered? #f)))
|
||||
(values raw
|
||||
(response-content-length response))))))
|
||||
(else
|
||||
(raise
|
||||
(formatted-message
|
||||
|
||||
Reference in New Issue
Block a user