diff options
author | Christopher Baines <mail@cbaines.net> | 2020-02-12 08:37:38 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-02-12 08:37:38 +0000 |
commit | 7306df0a0f6607d8b6fe385ffa83ad7638a66d7d (patch) | |
tree | c1fbac4e7fd0272b0718469d6332b205548cc9ae | |
parent | 7326e8b3bb08c0352cd53abb818c4a7e9f00d6eb (diff) | |
download | data-service-7306df0a0f6607d8b6fe385ffa83ad7638a66d7d.tar data-service-7306df0a0f6607d8b6fe385ffa83ad7638a66d7d.tar.gz |
Add a function to select channel instances for a revision
-rw-r--r-- | guix-data-service/model/channel-instance.scm | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/guix-data-service/model/channel-instance.scm b/guix-data-service/model/channel-instance.scm index 9df2722..b08ecae 100644 --- a/guix-data-service/model/channel-instance.scm +++ b/guix-data-service/model/channel-instance.scm @@ -23,7 +23,8 @@ #:use-module (guix utils) #:use-module (guix-data-service model utils) #:use-module (guix-data-service model derivation) - #:export (insert-channel-instances)) + #:export (insert-channel-instances + select-channel-instances-for-guix-revision)) (define (insert-channel-instances conn guix-revision-id @@ -50,3 +51,50 @@ VALUES " derivation-ids) ", ")))) #t) + +(define (select-channel-instances-for-guix-revision conn + commit-hash) + (define query + " +SELECT channel_instances.system, + derivations.file_name, + JSON_AGG( + json_build_object( + 'build_server_id', builds.build_server_id, + 'status', latest_build_status.status, + 'timestamp', latest_build_status.timestamp, + 'build_for_equivalent_derivation', + builds.derivation_file_name != derivations.file_name + ) + ORDER BY latest_build_status.timestamp + ) AS builds +FROM channel_instances +INNER JOIN derivations + ON channel_instances.derivation_id = derivations.id +INNER JOIN derivations_by_output_details_set + ON derivations.id = derivations_by_output_details_set.derivation_id +LEFT OUTER JOIN builds + ON derivations_by_output_details_set.derivation_output_details_set_id = + builds.derivation_output_details_set_id +LEFT OUTER JOIN ( + SELECT DISTINCT ON (build_id) * + FROM build_status + ORDER BY build_id, timestamp DESC +) AS latest_build_status + ON builds.id = latest_build_status.build_id +INNER JOIN guix_revisions + ON guix_revisions.id = channel_instances.guix_revision_id +WHERE guix_revisions.commit = $1 +GROUP BY channel_instances.system, derivations.file_name +ORDER BY channel_instances.system DESC") + + (map + (match-lambda + ((system derivation_file_name builds-json) + (list system + derivation_file_name + (filter (lambda (build) + (assoc-ref build "status")) + (vector->list + (json-string->scm builds-json)))))) + (exec-query conn query (list commit-hash)))) |