aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/package.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-03-11 22:11:14 +0000
committerChristopher Baines <mail@cbaines.net>2019-03-11 22:11:14 +0000
commite117bb1d87174d2f3448367f0208fc3340f88e51 (patch)
tree921a845f0cf06a1cbc04267747127015684426a1 /guix-data-service/model/package.scm
parent5bc0e7d4bf2b55f7c62c98ae8ae268fbe53b30f0 (diff)
downloaddata-service-e117bb1d87174d2f3448367f0208fc3340f88e51.tar
data-service-e117bb1d87174d2f3448367f0208fc3340f88e51.tar.gz
Many changes
A large proportion of these changes relate to changing the way packages relate to derivations. Previously, a package at a given revision had a single derivation. This was OK, but didn't account for multiple architectures. Therefore, these changes mean that a package has multiple derivations, depending on the system of the derivation, and the target system. There are multiple changes, small and large to the web interface as well. More pages link to each other, and the visual display has been improved somewhat.
Diffstat (limited to 'guix-data-service/model/package.scm')
-rw-r--r--guix-data-service/model/package.scm74
1 files changed, 46 insertions, 28 deletions
diff --git a/guix-data-service/model/package.scm b/guix-data-service/model/package.scm
index b5a38fa..bb01986 100644
--- a/guix-data-service/model/package.scm
+++ b/guix-data-service/model/package.scm
@@ -7,75 +7,93 @@
#:use-module (guix-data-service model utils)
#:export (select-existing-package-entries
select-packages-in-revision
+ count-packages-in-revision
insert-into-package-entries
inferior-packages->package-ids))
(define (select-existing-package-entries package-entries)
(string-append "SELECT id, packages.name, packages.version, "
- "packages.package_metadata_id, packages.derivation_id "
+ "packages.package_metadata_id "
"FROM packages "
"JOIN (VALUES "
(string-join (map (lambda (package-entry)
(apply
simple-format
- #f "('~A', '~A', ~A, ~A)"
+ #f "('~A', '~A', ~A)"
package-entry))
package-entries)
", ")
- ") AS vals (name, version, package_metadata_id, derivation_id) "
+ ") AS vals (name, version, package_metadata_id) "
"ON packages.name = vals.name AND "
"packages.version = vals.version AND "
- "packages.package_metadata_id = vals.package_metadata_id AND "
- "packages.derivation_id = vals.derivation_id"
- ";"))
+ "packages.package_metadata_id = vals.package_metadata_id"))
(define (select-packages-in-revision conn commit-hash)
(define query
- (string-append
- "SELECT packages.name, packages.version, packages.derivation_id "
- "FROM packages "
- "INNER JOIN guix_revision_packages"
- " ON packages.id = guix_revision_packages.package_id "
- "INNER JOIN guix_revisions"
- " ON guix_revision_packages.revision_id = guix_revisions.id "
- "WHERE guix_revisions.commit = $1 "
- "ORDER BY packages.name, packages.version"))
+ "
+SELECT packages.name, packages.version, package_metadata.synopsis
+FROM packages
+INNER JOIN package_metadata
+ ON packages.package_metadata_id = package_metadata.id
+WHERE packages.id IN (
+ SELECT package_derivations.package_id
+ FROM package_derivations
+ 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
+ WHERE guix_revisions.commit = $1
+)
+ORDER BY packages.name, packages.version")
+
+ (exec-query conn query (list commit-hash)))
+
+(define (count-packages-in-revision conn commit-hash)
+ (define query
+ "
+SELECT COUNT(DISTINCT packages.name)
+FROM packages
+WHERE packages.id IN (
+ SELECT package_derivations.package_id
+ FROM package_derivations
+ 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
+ WHERE guix_revisions.commit = $1
+)")
(exec-query conn query (list commit-hash)))
(define (insert-into-package-entries package-entries)
(string-append "INSERT INTO packages "
- "(name, version, package_metadata_id, derivation_id) VALUES "
+ "(name, version, package_metadata_id) VALUES "
(string-join
(map
(match-lambda
- ((name version package_metadata_id derivation_id)
- (simple-format #f "('~A', '~A', ~A, ~A)"
+ ((name version package_metadata_id)
+ (simple-format #f "('~A', '~A', ~A)"
name
version
- package_metadata_id
- derivation_id)))
+ package_metadata_id)))
package-entries)
",")
" RETURNING id"
";"))
-(define (inferior-packages->package-ids conn packages metadata-ids derivation-ids)
+(define (inferior-packages->package-ids conn packages metadata-ids)
(define package-entries
- (map (lambda (package metadata-id derivation-id)
+ (map (lambda (package metadata-id)
(list (inferior-package-name package)
(inferior-package-version package)
- metadata-id
- derivation-id))
+ metadata-id))
packages
- metadata-ids
- derivation-ids))
+ metadata-ids))
(let* ((existing-package-entry-ids
(exec-query->vhash conn
(select-existing-package-entries package-entries)
- ;; name, version, package_metadata_id and
- ;; derivation_id
+ ;; name, version and package_metadata_id
cdr
first)) ;;id
(missing-package-entries