aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-08-29 15:09:26 +0100
committerChristopher Baines <mail@cbaines.net>2023-08-29 15:09:26 +0100
commit1f2c60c85b2b24d2dcb66133fd50bbdedcaacdbd (patch)
tree6b57b6d2ae0c26db7820f16c5204283d8975d01f /guix-build-coordinator
parentcbded42c284cca4ecaaebbf0a666cf89efc465a7 (diff)
downloadbuild-coordinator-1f2c60c85b2b24d2dcb66133fd50bbdedcaacdbd.tar
build-coordinator-1f2c60c85b2b24d2dcb66133fd50bbdedcaacdbd.tar.gz
Replace request-builds-list by fold-builds
As this can wait until the stream is finished and properly close the port.
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r--guix-build-coordinator/client-communication.scm60
1 files changed, 37 insertions, 23 deletions
diff --git a/guix-build-coordinator/client-communication.scm b/guix-build-coordinator/client-communication.scm
index 61b8731..21d9e67 100644
--- a/guix-build-coordinator/client-communication.scm
+++ b/guix-build-coordinator/client-communication.scm
@@ -48,8 +48,8 @@
send-submit-build-request
send-cancel-build-request
send-update-build-priority-request
+ fold-builds
request-build-details
- request-builds-list
request-output-details
request-agent-details
request-agent-build-allocation-plan
@@ -786,19 +786,21 @@
'GET
(string-append "/build/" uuid)))
-(define* (request-builds-list coordinator-uri
- #:key
- (tags '())
- (not-tags '())
- (systems '())
- (not-systems '())
- (processed 'unset)
- (canceled 'unset)
- (priority-> 'unset)
- (priority-< 'unset)
- (relationship 'unset)
- (after-id #f)
- (limit #f))
+(define* (fold-builds coordinator-uri
+ proc
+ init
+ #:key
+ (tags '())
+ (not-tags '())
+ (systems '())
+ (not-systems '())
+ (processed 'unset)
+ (canceled 'unset)
+ (priority-> 'unset)
+ (priority-< 'unset)
+ (relationship 'unset)
+ (after-id #f)
+ (limit #f))
(let ((query-parameters
`(,@(if (null? tags)
'()
@@ -853,15 +855,27 @@
,@(if limit
(list (simple-format #f "limit=~A" limit))
'()))))
- (send-request coordinator-uri
- 'GET
- (string-append
- "/builds"
- (if (null? query-parameters)
- ""
- (string-append
- "?"
- (string-join query-parameters "&")))))))
+ (let ((builds-stream
+ response
+ (send-request coordinator-uri
+ 'GET
+ (string-append
+ "/builds"
+ (if (null? query-parameters)
+ ""
+ (string-append
+ "?"
+ (string-join query-parameters "&")))))))
+ (with-exception-handler
+ (lambda (exn)
+ (close-port
+ (response-port response))
+ (raise-exception exn))
+ (lambda ()
+ (stream-fold proc init builds-stream)
+ (close-port
+ (response-port response))))
+ #:unwind? #t)))
(define (request-output-details coordinator-uri
output)