aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-06-15 11:36:46 +0100
committerChristopher Baines <mail@cbaines.net>2023-06-15 11:36:46 +0100
commit044a905c1d75e9a989b457c203c4d6a65d29fbe6 (patch)
tree11bc9aa5a29cef6ec36a0053aa1c3bd30e95c5cf
parentf7b823cfd951f7832412832db05fd5419645f90e (diff)
downloaddata-service-044a905c1d75e9a989b457c203c4d6a65d29fbe6.tar
data-service-044a905c1d75e9a989b457c203c4d6a65d29fbe6.tar.gz
Provide more information about revision processing errors
In the compare package derivations response.
-rw-r--r--guix-data-service/web/compare/controller.scm62
1 files changed, 40 insertions, 22 deletions
diff --git a/guix-data-service/web/compare/controller.scm b/guix-data-service/web/compare/controller.scm
index 366a0bd..3d96aa4 100644
--- a/guix-data-service/web/compare/controller.scm
+++ b/guix-data-service/web/compare/controller.scm
@@ -648,28 +648,46 @@
'(application/json text/html)
mime-types)
((application/json)
- (render-json
- `((error . "invalid query")
- (query_parameters
- .
- ,(map
- (match-lambda
- ((name . val)
- (cons
- name
- (cond
- ((invalid-query-parameter? val)
- `((invalid
- . ,(with-output-to-string
- (lambda ()
- (sxml->html
- (invalid-query-parameter-message
- val)))))
- (value . ,(invalid-query-parameter-value val))))
- ((list? val)
- (list->vector val))
- (else val)))))
- query-parameters)))))
+ (letpar& ((base-job
+ (and=> (match (assq-ref query-parameters 'base_commit)
+ (($ <invalid-query-parameter> value)
+ (and (string? value) value))
+ ((? string? value) value)
+ (_ #f))
+ (lambda (commit)
+ (with-thread-postgresql-connection
+ (lambda (conn)
+ (select-job-for-commit conn commit))))))
+ (target-job
+ (and=> (match (assq-ref query-parameters 'target_commit)
+ (($ <invalid-query-parameter> value)
+ (and (string? value) value))
+ ((? string? value) value)
+ (_ #f))
+ (lambda (commit)
+ (with-thread-postgresql-connection
+ (lambda (conn)
+ (select-job-for-commit conn commit)))))))
+ (render-json
+ `((error . "invalid query")
+ (query_parameters
+ .
+ ,(map
+ (match-lambda
+ ((key . val)
+ (cons key
+ (match val
+ (($ <invalid-query-parameter> value message)
+ `((invalid_value . ,value)
+ (message . ,(call-with-output-string
+ (lambda (port)
+ (sxml->html message port))))))
+ ((? list? val)
+ (list->vector val))
+ (val val)))))
+ query-parameters))
+ (base_job . ,base-job)
+ (target_job . ,target-job)))))
(else
(letpar& ((systems
(with-thread-postgresql-connection