aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-12-08 21:38:32 +0100
committerChristopher Baines <mail@cbaines.net>2019-12-08 21:38:32 +0100
commit8cbb8f36fc8e4463a420d0f7f9d89cde2b4ba209 (patch)
tree786b6847466b94542ce96080a6e1fceb000e5be2
parentaaead3517cf85efb042c98f9d33e52a440e8e243 (diff)
downloaddata-service-8cbb8f36fc8e4463a420d0f7f9d89cde2b4ba209.tar
data-service-8cbb8f36fc8e4463a420d0f7f9d89cde2b4ba209.tar.gz
Add a function to select the outputs in a revision
-rw-r--r--guix-data-service/model/derivation.scm74
1 files changed, 74 insertions, 0 deletions
diff --git a/guix-data-service/model/derivation.scm b/guix-data-service/model/derivation.scm
index 5d8df69..3505f99 100644
--- a/guix-data-service/model/derivation.scm
+++ b/guix-data-service/model/derivation.scm
@@ -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)