diff options
author | Christopher Baines <mail@cbaines.net> | 2021-03-14 21:48:43 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2021-03-14 21:48:43 +0000 |
commit | 663bd1411a0aaea38dd8ce6d12d5c16f17f74a30 (patch) | |
tree | e1713d8b7e701e6c33d4f4a0e43b9202eebdaf33 /guix-data-service/model | |
parent | fbaa37328cdc62e39a7cc39e27f8e35bf1bee054 (diff) | |
download | data-service-663bd1411a0aaea38dd8ce6d12d5c16f17f74a30.tar data-service-663bd1411a0aaea38dd8ce6d12d5c16f17f74a30.tar.gz |
Add a /package/NAME page
This might be useful for working out when a non-master branch contains a newer
version of a package, or someone has sent in a patch for a newer version
already.
Diffstat (limited to 'guix-data-service/model')
-rw-r--r-- | guix-data-service/model/package.scm | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/guix-data-service/model/package.scm b/guix-data-service/model/package.scm index 7d58a8e..82d8ef3 100644 --- a/guix-data-service/model/package.scm +++ b/guix-data-service/model/package.scm @@ -34,7 +34,9 @@ package-derivations-for-branch package-outputs-for-branch - any-package-synopsis-or-descriptions-translations?)) + any-package-synopsis-or-descriptions-translations? + + branches-by-package-version)) (define (select-existing-package-entries package-entries) (string-append "SELECT id, packages.name, packages.version, " @@ -532,3 +534,46 @@ ORDER BY first_datetime DESC, package_version DESC") (or (string=? synopsis-locale locale) (string=? description-locale locale)))) packages)) + +(define (branches-by-package-version conn package-name system target) + (define query + " +WITH branches AS ( + SELECT DISTINCT ON (git_repository_id, name) git_repository_id, name, commit + FROM git_branches + WHERE commit <> '' + ORDER BY git_repository_id, name, datetime DESC +) +SELECT packages.version, + JSON_AGG( + json_build_object( + 'git_repository_id', branches.git_repository_id, + 'name', branches.name + ) + ) +FROM branches +INNER JOIN guix_revisions + ON branches.git_repository_id = guix_revisions.git_repository_id + AND branches.commit = guix_revisions.commit +INNER JOIN guix_revision_package_derivations + ON guix_revision_package_derivations.revision_id = guix_revisions.id +INNER JOIN package_derivations + ON package_derivations.id = guix_revision_package_derivations.package_derivation_id + AND package_derivations.system = $2 + AND package_derivations.target = $3 +INNER JOIN packages + ON package_derivations.package_id = packages.id +WHERE packages.name = $1 +GROUP BY packages.version +ORDER BY packages.version DESC") + + (list->vector + (map (match-lambda + ((version + branches-json) + `((version . ,version) + (branches . ,(json-string->scm branches-json))))) + (exec-query + conn + query + (list package-name system target))))) |