aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/utils.scm')
-rw-r--r--guix-build-coordinator/utils.scm25
1 files changed, 25 insertions, 0 deletions
diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm
index ef26d3a..c6f1b44 100644
--- a/guix-build-coordinator/utils.scm
+++ b/guix-build-coordinator/utils.scm
@@ -36,6 +36,7 @@
call-with-streaming-http-request
make-chunked-input-port*
+ find-missing-substitutes-for-output
has-substiutes-no-cache?
substitute-derivation
@@ -256,6 +257,30 @@ upcoming chunk."
(values response
body))))))))
+(define (find-missing-substitutes-for-output store substitute-urls output)
+ (if (valid-path? store output)
+ '()
+ (let ((narinfo
+ (any (lambda (substitute-url)
+ (let ((result (lookup-narinfos substitute-url (list output))))
+ (if (null? result)
+ #f
+ (first result))))
+ substitute-urls)))
+ (if narinfo
+ (append-map
+ (lambda (reference)
+ (let ((referenced-output
+ (string-append (%store-prefix) "/" reference)))
+ (peek "REF" referenced-output)
+ (if (string=? referenced-output output)
+ '()
+ (find-missing-substitutes-for-output store
+ substitute-urls
+ referenced-output))))
+ (narinfo-references narinfo))
+ (list output)))))
+
(define (has-substiutes-no-cache? substitute-urls file)
(define %narinfo-cache-directory
(if (zero? (getuid))