aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/web/compare/controller.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/web/compare/controller.scm')
-rw-r--r--guix-data-service/web/compare/controller.scm90
1 files changed, 84 insertions, 6 deletions
diff --git a/guix-data-service/web/compare/controller.scm b/guix-data-service/web/compare/controller.scm
index 16dcf39..dba1fd0 100644
--- a/guix-data-service/web/compare/controller.scm
+++ b/guix-data-service/web/compare/controller.scm
@@ -20,6 +20,10 @@
#:use-module (srfi srfi-11)
#:use-module (ice-9 match)
#:use-module (ice-9 vlist)
+ #:use-module (texinfo)
+ #:use-module (texinfo html)
+ #:use-module (texinfo plain-text)
+ #:use-module (guix-data-service web sxml)
#:use-module (guix-data-service web util)
#:use-module (guix-data-service web render)
#:use-module (guix-data-service web query-parameters)
@@ -135,6 +139,14 @@
parsed-query-parameters)))
(_ #f)))
+(define (texinfo->variants-alist s)
+ (let ((stexi (texi-fragment->stexi s)))
+ `((source . ,s)
+ (html . ,(with-output-to-string
+ (lambda ()
+ (sxml->html (stexi->shtml stexi)))))
+ (plain . ,(stexi->plain-text stexi)))))
+
(define (render-compare mime-types
conn
query-parameters)
@@ -184,13 +196,45 @@
2
(lint-warning-differences-data conn
base-revision-id
- target-revision-id))))
+ target-revision-id)))
+ (channel-news-data
+ (channel-news-differences-data conn
+ base-revision-id
+ target-revision-id)))
(case (most-appropriate-mime-type
'(application/json text/html)
mime-types)
((application/json)
(render-json
- `((new-packages . ,(list->vector new-packages))
+ `((channel-news . ,(list->vector
+ (map
+ (match-lambda
+ ((commit tag title_text body_text change)
+ `(,@(if (null? commit)
+ '()
+ `((commit . ,commit)))
+ ,@(if (null? tag)
+ '()
+ `((tag . ,tag)))
+ (title-text
+ . ,(map
+ (match-lambda
+ ((lang . text)
+ (cons
+ lang
+ (texinfo->variants-alist text))))
+ title_text))
+ (body-text
+ . ,(map
+ (match-lambda
+ ((lang . text)
+ (cons
+ lang
+ (texinfo->variants-alist text))))
+ body_text))
+ (change . ,change))))
+ channel-news-data)))
+ (new-packages . ,(list->vector new-packages))
(removed-packages . ,(list->vector removed-packages))
(version-changes . ,(list->vector
(map
@@ -210,7 +254,8 @@
new-packages
removed-packages
version-changes
- lint-warnings-data)
+ lint-warnings-data
+ channel-news-data)
#:extra-headers http-headers-for-unchanging-content))))))))
(define (render-compare-by-datetime mime-types
@@ -272,13 +317,45 @@
2
(lint-warning-differences-data conn
base-revision-id
- target-revision-id))))
+ target-revision-id)))
+ (channel-news-data
+ (channel-news-differences-data conn
+ base-revision-id
+ target-revision-id)))
(case (most-appropriate-mime-type
'(application/json text/html)
mime-types)
((application/json)
(render-json
- `((new-packages . ,(list->vector new-packages))
+ `((channel-news . ,(list->vector
+ (map
+ (match-lambda
+ ((commit tag title_text body_text change)
+ `(,@(if (null? commit)
+ '()
+ `((commit . ,commit)))
+ ,@(if (null? tag)
+ '()
+ `((tag . ,tag)))
+ (title-text
+ . ,(map
+ (match-lambda
+ ((lang . text)
+ (cons
+ lang
+ (texinfo->variants-alist text))))
+ title_text))
+ (body-text
+ . ,(map
+ (match-lambda
+ ((lang . text)
+ (cons
+ lang
+ (texinfo->variants-alist text))))
+ body_text))
+ (change . ,change))))
+ channel-news-data)))
+ (new-packages . ,(list->vector new-packages))
(removed-packages . ,(list->vector removed-packages))
(version-changes . ,(list->vector
(map
@@ -300,7 +377,8 @@
new-packages
removed-packages
version-changes
- lint-warnings-data)
+ lint-warnings-data
+ channel-news-data)
#:extra-headers http-headers-for-unchanging-content)))))))))
(define (render-compare/derivation mime-types