aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-09-26 23:50:34 +0100
committerChristopher Baines <mail@cbaines.net>2019-09-27 17:28:46 +0100
commit59c342ffde542a62f3911ee9122cde648eee2133 (patch)
tree812c0e0deb84962c20869189c8a643bd2f7a21d3
parent43bc7cab917a09698ee75687ada31b74cf732baf (diff)
downloaddata-service-59c342ffde542a62f3911ee9122cde648eee2133.tar
data-service-59c342ffde542a62f3911ee9122cde648eee2133.tar.gz
Add a new page to show package versions available on a branch
This is useful when looking back through history at what package versions were previously available.
-rw-r--r--guix-data-service/model/package.scm34
-rw-r--r--guix-data-service/web/controller.scm11
-rw-r--r--guix-data-service/web/view/html.scm63
3 files changed, 107 insertions, 1 deletions
diff --git a/guix-data-service/model/package.scm b/guix-data-service/model/package.scm
index b3327ca..8a6bb94 100644
--- a/guix-data-service/model/package.scm
+++ b/guix-data-service/model/package.scm
@@ -9,7 +9,9 @@
select-packages-in-revision
search-packages-in-revision
count-packages-in-revision
- inferior-packages->package-ids))
+ inferior-packages->package-ids
+
+ package-versions-for-branch))
(define (select-existing-package-entries package-entries)
(string-append "SELECT id, packages.name, packages.version, "
@@ -181,3 +183,33 @@ WHERE packages.id IN (
"packages"
'(name version package_metadata_id)
package-entries))
+
+(define (package-versions-for-branch conn
+ git-repository-id
+ branch-name
+ package-name)
+ (exec-query
+ conn
+ "
+SELECT package_version,
+ first_guix_revisions.commit AS first_guix_revision_commit,
+ first_git_branches.datetime AS first_datetime,
+ last_guix_revisions.commit AS last_guix_revision_commit,
+ last_git_branches.datetime AS last_datetime
+FROM package_versions_by_guix_revision_range
+INNER JOIN guix_revisions AS first_guix_revisions
+ ON first_guix_revision_id = first_guix_revisions.id
+INNER JOIN git_branches AS first_git_branches
+ ON first_guix_revisions.git_repository_id = first_git_branches.git_repository_id AND first_guix_revisions.commit = first_git_branches.commit
+INNER JOIN guix_revisions AS last_guix_revisions
+ ON last_guix_revision_id = last_guix_revisions.id
+INNER JOIN git_branches AS last_git_branches
+ ON last_guix_revisions.git_repository_id = last_git_branches.git_repository_id AND last_guix_revisions.commit = last_git_branches.commit
+WHERE package_name = $1
+AND package_versions_by_guix_revision_range.git_repository_id = $2
+AND package_versions_by_guix_revision_range.branch_name = $3
+ORDER BY first_datetime DESC"
+ (list package-name
+ (number->string git-repository-id)
+ branch-name)))
+
diff --git a/guix-data-service/web/controller.scm b/guix-data-service/web/controller.scm
index f497d32..77fcc93 100644
--- a/guix-data-service/web/controller.scm
+++ b/guix-data-service/web/controller.scm
@@ -882,6 +882,17 @@
'after_date)
#:before-date (assq-ref parsed-query-parameters
'before_date)))))))
+ (('GET "repository" repository-id "branch" branch-name "package" package-name)
+ (render-html
+ #:sxml (view-branch-package
+ repository-id
+ branch-name
+ package-name
+ (package-versions-for-branch
+ conn
+ (string->number repository-id)
+ branch-name
+ package-name))))
(('GET "repository" repository-id "branch" branch-name "latest-processed-revision")
(let ((commit-hash
(latest-processed-commit-for-branch conn repository-id branch-name)))
diff --git a/guix-data-service/web/view/html.scm b/guix-data-service/web/view/html.scm
index 11833de..3827f5f 100644
--- a/guix-data-service/web/view/html.scm
+++ b/guix-data-service/web/view/html.scm
@@ -40,6 +40,7 @@
view-git-repository
view-branches
view-branch
+ view-branch-package
view-builds
view-derivation
view-store-item
@@ -1088,6 +1089,68 @@
(cdr branch-commits))
'((#f #f))))))))))))
+(define (view-branch-package git-repository-id
+ branch-name
+ package-name
+ versions-by-revision-range)
+ (layout
+ #:body
+ `(,(header)
+ (div
+ (@ (class "container"))
+ (div
+ (@ (class "row"))
+ (div
+ (@ (class "col-md-12"))
+ (a (@ (href ,(string-append "/repository/" git-repository-id)))
+ (h3 "Repository"))
+ (a (@ (href ,(string-append "/repository/" git-repository-id
+ "/branch/" branch-name)))
+ (h3 ,(string-append branch-name " branch")))
+ (h1 (@ (style "white-space: nowrap;"))
+ (samp ,package-name))))
+ (div
+ (@ (class "row"))
+ (div
+ (@ (class "col-md-12"))
+ (table
+ (@ (class "table")
+ (style "table-layout: fixed;"))
+ (thead
+ (tr
+ (th (@ (class "col-sm-4")) "Version")
+ (th (@ (class "col-sm-4")) "From")
+ (th (@ (class "col-sm-4")) "To")))
+ (tbody
+ ,@(map
+ (match-lambda
+ ((package-version first-guix-revision-commit
+ first-datetime
+ last-guix-revision-commit
+ last-datetime)
+ `(tr
+ (td ,package-version)
+ (td (a (@ (href ,(string-append
+ "/revision/" first-guix-revision-commit)))
+ ,first-datetime)
+ (br)
+ (a (@ (href ,(string-append
+ "/revision/"
+ first-guix-revision-commit
+ "/package/"
+ package-name "/" package-version)))
+ "(More information)"))
+ (td (a (@ (href ,(string-append
+ "/revision/" last-guix-revision-commit)))
+ ,last-datetime)
+ (br)
+ (a (@ (href ,(string-append
+ "/revision/"
+ last-guix-revision-commit
+ "/package/"
+ package-name "/" package-version)))
+ "(More information)")))))
+ versions-by-revision-range)))))))))
(define (view-builds stats builds)
(layout