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.
This commit is contained in:
parent
5bc0e7d4bf
commit
e117bb1d87
11 changed files with 999 additions and 326 deletions
|
|
@ -12,20 +12,56 @@
|
|||
package-data-vhashes->new-packages
|
||||
package-data-vhashes->removed-packages
|
||||
package-data-version-changes
|
||||
package-data-other-changes))
|
||||
package-data-derivation-changes))
|
||||
|
||||
(define (package-differences-data conn base_guix_revision_id target_guix_revision_id)
|
||||
(define query
|
||||
"WITH base_packages AS (
|
||||
SELECT packages.* FROM packages INNER JOIN guix_revision_packages ON packages.id = guix_revision_packages.package_id WHERE revision_id = $1
|
||||
"
|
||||
WITH base_packages AS (
|
||||
SELECT packages.*, derivations.file_name,
|
||||
package_derivations.system, package_derivations.target
|
||||
FROM packages
|
||||
INNER JOIN package_derivations
|
||||
ON packages.id = package_derivations.package_id
|
||||
INNER JOIN derivations
|
||||
ON package_derivations.derivation_id = derivations.id
|
||||
WHERE package_derivations.id IN (
|
||||
SELECT guix_revision_package_derivations.package_derivation_id
|
||||
FROM guix_revision_package_derivations
|
||||
WHERE revision_id = $1
|
||||
)
|
||||
), target_packages AS (
|
||||
SELECT packages.* FROM packages INNER JOIN guix_revision_packages ON packages.id = guix_revision_packages.package_id WHERE revision_id = $2
|
||||
SELECT packages.*, derivations.file_name,
|
||||
package_derivations.system, package_derivations.target
|
||||
FROM packages
|
||||
INNER JOIN package_derivations
|
||||
ON packages.id = package_derivations.package_id
|
||||
INNER JOIN derivations
|
||||
ON package_derivations.derivation_id = derivations.id
|
||||
WHERE package_derivations.id IN (
|
||||
SELECT guix_revision_package_derivations.package_derivation_id
|
||||
FROM guix_revision_package_derivations
|
||||
WHERE revision_id = $2
|
||||
)
|
||||
)
|
||||
SELECT base_packages.name, base_packages.version, base_packages.package_metadata_id, base_packages.derivation_id, target_packages.name, target_packages.version, target_packages.package_metadata_id, target_packages.derivation_id
|
||||
SELECT base_packages.name, base_packages.version,
|
||||
base_packages.package_metadata_id, base_packages.file_name,
|
||||
base_packages.system, base_packages.target,
|
||||
target_packages.name, target_packages.version,
|
||||
target_packages.package_metadata_id, target_packages.file_name,
|
||||
target_packages.system, target_packages.target
|
||||
FROM base_packages
|
||||
FULL OUTER JOIN target_packages ON base_packages.name = target_packages.name AND base_packages.version = target_packages.version
|
||||
WHERE (base_packages.id IS NULL OR target_packages.id IS NULL OR base_packages.id != target_packages.id)
|
||||
ORDER BY base_packages.name, base_packages.version, target_packages.name, target_packages.version")
|
||||
FULL OUTER JOIN target_packages
|
||||
ON base_packages.name = target_packages.name
|
||||
AND base_packages.version = target_packages.version
|
||||
AND base_packages.system = target_packages.system
|
||||
AND base_packages.target = target_packages.target
|
||||
WHERE
|
||||
base_packages.id IS NULL OR
|
||||
target_packages.id IS NULL OR
|
||||
base_packages.id != target_packages.id OR
|
||||
base_packages.file_name != target_packages.file_name
|
||||
ORDER BY base_packages.name DESC, base_packages.version, target_packages.name, target_packages.version")
|
||||
|
||||
(exec-query conn query (list base_guix_revision_id target_guix_revision_id)))
|
||||
|
||||
|
|
@ -40,7 +76,7 @@ ORDER BY base_packages.name, base_packages.version, target_packages.name, target
|
|||
|
||||
(apply values
|
||||
(fold (lambda (row result)
|
||||
(let-values (((base-row-part target-row-part) (split-at row 4)))
|
||||
(let-values (((base-row-part target-row-part) (split-at row 6)))
|
||||
(match result
|
||||
((base-package-data target-package-data)
|
||||
(list (add-data-to-vhash base-row-part base-package-data)
|
||||
|
|
@ -63,24 +99,29 @@ ORDER BY base_packages.name, base_packages.version, target_packages.name, target
|
|||
derivation-data))
|
||||
|
||||
(define (package-data-vhash->derivations-and-build-status conn packages-vhash)
|
||||
(define (vhash->derivation-ids vhash)
|
||||
(define (vhash->derivation-file-names vhash)
|
||||
(vhash-fold (lambda (key value result)
|
||||
(cons (third value)
|
||||
result))
|
||||
'()
|
||||
vhash))
|
||||
|
||||
(let* ((derivation-ids
|
||||
(vhash->derivation-ids packages-vhash))
|
||||
(let* ((derivation-file-names
|
||||
(vhash->derivation-file-names packages-vhash))
|
||||
(derivation-data
|
||||
(select-derivations-and-build-status-by-id conn derivation-ids)))
|
||||
(select-derivations-and-build-status-by-file-name
|
||||
conn
|
||||
derivation-file-names)))
|
||||
derivation-data))
|
||||
|
||||
(define (package-data-vhash->package-name-and-version-vhash vhash)
|
||||
(vhash-fold (lambda (name details result)
|
||||
(vhash-cons (cons name (first details))
|
||||
(cdr details)
|
||||
result))
|
||||
(let ((key (cons name (first details))))
|
||||
(vhash-cons key
|
||||
(cons (cdr details)
|
||||
(or (and=> (vhash-assoc key result) cdr)
|
||||
'()))
|
||||
(vhash-delete key result))))
|
||||
vlist-null
|
||||
vhash))
|
||||
|
||||
|
|
@ -99,16 +140,29 @@ ORDER BY base_packages.name, base_packages.version, target_packages.name, target
|
|||
base-packages-vhash)))
|
||||
|
||||
(define (package-data-vhash->package-versions-vhash package-data-vhash)
|
||||
(define (system-and-target<? a b)
|
||||
(if (string=? (car a) (car b))
|
||||
(string<? (cdr a) (cdr b))
|
||||
(string<? (car a) (car b))))
|
||||
|
||||
(define (add-version-system-and-target-to-alist alist data)
|
||||
(match data
|
||||
((version package-metadata-id derivation-id system target)
|
||||
(let ((systems-for-version (or (and=> (assoc version alist) cdr)
|
||||
'())))
|
||||
`((,version . ,(sort (cons (cons system target)
|
||||
systems-for-version)
|
||||
system-and-target<?))
|
||||
,@(alist-delete version alist))))))
|
||||
|
||||
(vhash-fold (lambda (name details result)
|
||||
(let ((version (first details))
|
||||
(known-versions (vhash-assoc name result)))
|
||||
(if known-versions
|
||||
(vhash-cons name
|
||||
(cons version known-versions)
|
||||
(vhash-delete name result))
|
||||
(vhash-cons name
|
||||
(list version)
|
||||
result))))
|
||||
(known-versions (or (and=> (vhash-assoc name result) cdr)
|
||||
'())))
|
||||
(vhash-cons name
|
||||
(add-version-system-and-target-to-alist known-versions
|
||||
details)
|
||||
(vhash-delete name result))))
|
||||
vlist-null
|
||||
package-data-vhash))
|
||||
|
||||
|
|
@ -124,30 +178,42 @@ ORDER BY base_packages.name, base_packages.version, target_packages.name, target
|
|||
(begin
|
||||
(if (equal? base-versions target-versions)
|
||||
result
|
||||
`((,name . ((base . ,base-versions)
|
||||
(target . ,target-versions)))
|
||||
`((,name . ((base . ,(map car base-versions))
|
||||
(target . ,(map car target-versions))))
|
||||
,@result)))
|
||||
result)))
|
||||
'()
|
||||
target-versions)))
|
||||
|
||||
(define (package-data-other-changes base-packages-vhash target-packages-vhash)
|
||||
(define (package-data-derivation-changes base-packages-vhash target-packages-vhash)
|
||||
(define base-package-details-by-name-and-version
|
||||
(package-data-vhash->package-name-and-version-vhash base-packages-vhash))
|
||||
|
||||
(define target-package-details-by-name-and-version
|
||||
(package-data-vhash->package-name-and-version-vhash target-packages-vhash))
|
||||
|
||||
(vhash-fold (lambda (name-and-version target-details result)
|
||||
(let ((base-packages-entry
|
||||
(vhash-assoc name-and-version base-package-details-by-name-and-version)))
|
||||
(if base-packages-entry
|
||||
(let ((base-details (cdr base-packages-entry)))
|
||||
(if (equal? base-details target-details)
|
||||
result
|
||||
`((,name-and-version . ((base . ,base-details)
|
||||
(target . ,target-details)))
|
||||
,@result)))
|
||||
result)))
|
||||
'()
|
||||
target-package-details-by-name-and-version))
|
||||
(define (derivation-system-and-target-list->alist lst)
|
||||
(if (null? lst)
|
||||
'()
|
||||
`((,(cdr (first lst)) . ,(car (first lst)))
|
||||
,@(derivation-system-and-target-list->alist (cdr lst)))))
|
||||
|
||||
(vhash-fold
|
||||
(lambda (name-and-version target-packages-entry result)
|
||||
(let ((base-packages-entry
|
||||
(vhash-assoc name-and-version
|
||||
base-package-details-by-name-and-version)))
|
||||
(if base-packages-entry
|
||||
(let ((base-derivations (map cdr (cdr base-packages-entry)))
|
||||
(target-derivations (map cdr target-packages-entry)))
|
||||
(if (equal? base-derivations target-derivations)
|
||||
result
|
||||
`((,name-and-version
|
||||
. ((base . ,(derivation-system-and-target-list->alist
|
||||
base-derivations))
|
||||
(target . ,(derivation-system-and-target-list->alist
|
||||
target-derivations))))
|
||||
,@result)))
|
||||
result)))
|
||||
'()
|
||||
target-package-details-by-name-and-version))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue