diff options
Diffstat (limited to 'guix-build-coordinator/utils.scm')
-rw-r--r-- | guix-build-coordinator/utils.scm | 25 |
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)) |