Add a function to select the outputs in a revision

This commit is contained in:
Christopher Baines 2019-12-08 21:38:32 +01:00
parent e92d4dbbcf
commit eecfdeb9e4

View file

@ -8,6 +8,7 @@
#:use-module (guix inferior)
#:use-module (guix memoization)
#:use-module (guix derivations)
#:use-module (guix-data-service database)
#:use-module (guix-data-service model utils)
#:export (valid-systems
count-derivations
@ -18,6 +19,7 @@
select-derivation-by-output-filename
select-derivations-using-output
select-derivations-in-revision
select-derivation-outputs-in-revision
select-derivations-by-revision-name-and-version
select-derivation-inputs-by-derivation-id
select-existing-derivations
@ -268,6 +270,78 @@ ORDER BY derivations.file_name
(list after-name)
'())))))
(define* (select-derivation-outputs-in-revision conn
commit-hash
#:key
limit-results
after-path)
(define query
(string-append
"
SELECT derivation_output_details.path,
derivation_output_details.hash_algorithm,
derivation_output_details.hash,
derivation_output_details.recursive,
(
SELECT JSON_AGG(
json_build_object(
'build_server_id', narinfo_fetch_records.build_server_id,
'hash_algorithm', nars.hash_algorithm,
'hash', nars.hash,
'size', nars.size
)
)
FROM nars
INNER JOIN narinfo_signatures
ON nars.id = narinfo_signatures.nar_id
INNER JOIN narinfo_signature_data
ON narinfo_signature_data.id = narinfo_signatures.narinfo_signature_data_id
INNER JOIN narinfo_fetch_records
ON narinfo_signature_data.id = narinfo_fetch_records.narinfo_signature_data_id
WHERE nars.store_path = derivation_output_details.path
) AS nars
FROM derivations
INNER JOIN derivation_outputs
ON derivations.id = derivation_outputs.derivation_id
INNER JOIN derivation_output_details
ON derivation_outputs.derivation_output_details_id = derivation_output_details.id
INNER JOIN package_derivations
ON derivations.id = package_derivations.derivation_id
INNER JOIN guix_revision_package_derivations
ON package_derivations.id = guix_revision_package_derivations.package_derivation_id
INNER JOIN guix_revisions
ON guix_revision_package_derivations.revision_id = guix_revisions.id
INNER JOIN packages
ON package_derivations.package_id = packages.id
WHERE guix_revisions.commit = $1
"
(if after-path
" AND derivation_output_details.path > $2"
"")
"
ORDER BY derivation_output_details.path
"
(if limit-results
(string-append
" LIMIT " (number->string limit-results))
"")))
(map (match-lambda
((path hash_algorithm hash recursive nars_json)
(list path
hash
hash_algorithm
(string=? recursive "t")
(if (null? nars_json)
#()
(json-string->scm nars_json)))))
(exec-query-with-null-handling conn
query
`(,commit-hash
,@(if after-path
(list after-path)
'())))))
(define (insert-derivation-outputs conn
derivation-id
names-and-derivation-outputs)