guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/04: Support querying package derivation outputs without the nars


From: Christopher Baines
Subject: 01/04: Support querying package derivation outputs without the nars
Date: Mon, 31 Jan 2022 15:28:39 -0500 (EST)

cbaines pushed a commit to branch master
in repository data-service.

commit f1418c4e88e9fc77e9a450fa1c01471e897774f3
Author: Christopher Baines <mail@cbaines.net>
AuthorDate: Mon Jan 31 20:24:27 2022 +0000

    Support querying package derivation outputs without the nars
    
    Since this speeds up the response if you don't need the nar information.
---
 guix-data-service/model/derivation.scm          | 20 +++++++++++++++++---
 guix-data-service/web/repository/controller.scm |  2 ++
 guix-data-service/web/revision/controller.scm   | 12 +++++++++++-
 guix-data-service/web/revision/html.scm         | 25 +++++++++++++++++++++++--
 guix-data-service/web/util.scm                  |  9 +++++++++
 5 files changed, 62 insertions(+), 6 deletions(-)

diff --git a/guix-data-service/model/derivation.scm 
b/guix-data-service/model/derivation.scm
index a1ae821..47b5adc 100644
--- a/guix-data-service/model/derivation.scm
+++ b/guix-data-service/model/derivation.scm
@@ -678,6 +678,7 @@ LIMIT $4"))
                                                 no-nars-from-build-servers
                                                 system
                                                 target
+                                                include-nars?
                                                 limit-results
                                                 after-path)
   (define query
@@ -688,7 +689,10 @@ SELECT packages.name,
        derivation_output_details.path,
        derivation_output_details.hash_algorithm,
        derivation_output_details.hash,
-       derivation_output_details.recursive,
+       derivation_output_details.recursive"
+
+     (if include-nars?
+         ",
        (
          SELECT JSON_AGG(
            json_build_object(
@@ -706,7 +710,9 @@ SELECT packages.name,
          INNER JOIN narinfo_fetch_records
            ON narinfo_signature_data.id = 
narinfo_fetch_records.narinfo_signature_data_id
          WHERE nars.store_path = derivation_output_details.path
-       ) AS nars
+       ) AS nars"
+         "")
+     "
 FROM derivations
 INNER JOIN derivation_outputs
   ON derivations.id = derivation_outputs.derivation_id
@@ -833,7 +839,15 @@ ORDER BY derivation_output_details.path
                 (string=? recursive "t")
                 (if (null? nars_json)
                     #()
-                    (json-string->scm nars_json)))))
+                    (json-string->scm nars_json))))
+         ((package_name package_version
+                        path hash_algorithm hash recursive)
+          (list package_name
+                package_version
+                path
+                hash
+                hash_algorithm
+                (string=? recursive "t"))))
        (exec-query-with-null-handling  conn
                                        query
                                        `(,commit-hash
diff --git a/guix-data-service/web/repository/controller.scm 
b/guix-data-service/web/repository/controller.scm
index aa31df6..752c424 100644
--- a/guix-data-service/web/repository/controller.scm
+++ b/guix-data-service/web/repository/controller.scm
@@ -398,6 +398,8 @@
                                           #:default "any")
                       (system ,parse-system #:default "x86_64-linux")
                       (target ,parse-target #:default "")
+                      (field          ,identity #:multi-value
+                                      #:default ("nars"))
                       (limit_results  ,parse-result-limit
                                       #:no-default-when (all_results)
                                       #:default 10)
diff --git a/guix-data-service/web/revision/controller.scm 
b/guix-data-service/web/revision/controller.scm
index 24d9188..7d6f047 100644
--- a/guix-data-service/web/revision/controller.scm
+++ b/guix-data-service/web/revision/controller.scm
@@ -267,6 +267,8 @@
                                         #:default "any")
                     (system ,parse-system #:default "x86_64-linux")
                     (target ,parse-target #:default "")
+                    (field          ,identity #:multi-value
+                                    #:default ("nars"))
                     (limit_results  ,parse-result-limit
                                     #:no-default-when (all_results)
                                     #:default 10)
@@ -1253,7 +1255,9 @@
       (let ((limit-results
              (assq-ref query-parameters 'limit_results))
             (all-results
-             (assq-ref query-parameters 'all_results)))
+             (assq-ref query-parameters 'all_results))
+            (fields
+             (assq-ref query-parameters 'field)))
         (letpar&
             ((derivation-outputs
               (with-thread-postgresql-connection
@@ -1270,6 +1274,7 @@
                   (assq-ref query-parameters 'output_consistency)
                   #:system (assq-ref query-parameters 'system)
                   #:target (assq-ref query-parameters 'target)
+                  #:include-nars? (member "nars" fields)
                   #:limit-results limit-results
                   #:after-path (assq-ref query-parameters 'after_path))))))
           (let ((show-next-page?
@@ -1286,6 +1291,11 @@
                   (store_paths
                    . ,(list->vector
                        (map (match-lambda
+                              ((package-name package-version
+                                             path hash-algorithm hash 
recursive)
+                               `((package . ((name    . ,package-name)
+                                             (version . ,package-version)))
+                                 (path . ,path)))
                               ((package-name package-version
                                              path hash-algorithm hash recursive
                                              nars)
diff --git a/guix-data-service/web/revision/html.scm 
b/guix-data-service/web/revision/html.scm
index 4680874..eeb2fc8 100644
--- a/guix-data-service/web/revision/html.scm
+++ b/guix-data-service/web/revision/html.scm
@@ -1876,6 +1876,15 @@ figure {
             (cons url id)))
          build-server-urls))
 
+  (define field-options
+    (map
+     (lambda (field)
+       (cons field
+             (hyphenate-words
+              (remove-brackets
+               (string-downcase field)))))
+     '("(no additional fields)" "Nars")))
+
   (layout
    #:title
    (string-append "Package derivation outputs - Revision "
@@ -1937,6 +1946,11 @@ figure {
             #:allow-selecting-multiple-options #f
             #:help-text "Only include outputs from derivations that are build 
for this system."
             #:font-family "monospace")
+          ,(form-horizontal-control
+            "Fields" query-parameters
+            #:name "field"
+            #:options field-options
+            #:help-text "Fields to return in the response.")
           ,(form-horizontal-control
             "After path" query-parameters
             #:help-text
@@ -1977,11 +1991,18 @@ figure {
          (thead
           (tr
            (th (@ (class "col-sm-5")) "Path")
-           (th (@ (class "col-sm-5")) "Data")
-           (th (@ (class "col-sm-2")) "Output consistency")))
+           ,@(if (member "nars" (assq-ref query-parameters 'field))
+                 '((th (@ (class "col-sm-5")) "Data")
+                   (th (@ (class "col-sm-2")) "Output consistency"))
+                 '())))
          (tbody
           ,@(map
              (match-lambda
+               ((package-name package-version
+                              path hash-algorithm hash recursive)
+                `(tr
+                  (td (a (@ (href ,path))
+                         ,(display-store-item-short path)))))
                ((package-name package-version
                               path hash-algorithm hash recursive nars)
                 `(tr
diff --git a/guix-data-service/web/util.scm b/guix-data-service/web/util.scm
index 439c581..1dd193a 100644
--- a/guix-data-service/web/util.scm
+++ b/guix-data-service/web/util.scm
@@ -28,6 +28,7 @@
             directory?
 
             hyphenate-words
+            remove-brackets
             underscore-join-words))
 
 (define (most-appropriate-mime-type accepted-mime-types
@@ -99,6 +100,14 @@
    (string-split words #\space)
    "-"))
 
+(define (remove-brackets s)
+  (string-filter
+   (lambda (c)
+     (not
+      (or (eq? #\( c)
+          (eq? #\) c))))
+   s))
+
 (define (underscore-join-words words)
   (string-join
    (string-split words #\space)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]