From 044a905c1d75e9a989b457c203c4d6a65d29fbe6 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Thu, 15 Jun 2023 11:36:46 +0100 Subject: Provide more information about revision processing errors In the compare package derivations response. --- guix-data-service/web/compare/controller.scm | 62 ++++++++++++++++++---------- 1 file changed, 40 insertions(+), 22 deletions(-) (limited to 'guix-data-service/web') 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) + (($ 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) + (($ 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 + (($ 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 -- cgit v1.2.3