From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:48070) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jOPFA-0005ha-Fr for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jOPF9-0007L8-DJ for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:51401) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jOPF9-0007Ko-3s for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jOPF8-0006bY-Tu for guix-patches@gnu.org; Tue, 14 Apr 2020 13:21:02 -0400 Subject: [bug#40629] [PATCH 3/5] import/json: Add json->scheme-file. Resent-Message-ID: From: Ricardo Wurmus Message-ID: <20200414171959.3428-3-rekado@elephly.net> Date: Tue, 14 Apr 2020 19:19:57 +0200 In-Reply-To: <20200414171959.3428-1-rekado@elephly.net> References: <20200414171959.3428-1-rekado@elephly.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 40629@debbugs.gnu.org Cc: Ricardo Wurmus * guix/import/json.scm (json->code, json->scheme-file): New procedures. --- guix/import/json.scm | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/guix/import/json.scm b/guix/import/json.scm index 8900724dcd..16dc2ad5cb 100644 --- a/guix/import/json.scm +++ b/guix/import/json.scm @@ -2,6 +2,7 @@ ;;; Copyright =C2=A9 2014 David Thompson ;;; Copyright =C2=A9 2015, 2016 Eric Bavier ;;; Copyright =C2=A9 2018, 2019 Ludovic Court=C3=A8s +;;; Copyright =C2=A9 2020 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,8 +23,12 @@ #:use-module (json) #:use-module (guix http-client) #:use-module (guix import utils) + #:use-module (guix import print) + #:use-module (ice-9 rdelim) + #:use-module (srfi srfi-2) #:use-module (srfi srfi-34) - #:export (json-fetch)) + #:export (json-fetch + json->scheme-file)) =20 (define* (json-fetch url ;; Note: many websites returns 403 if we omit a @@ -42,3 +47,31 @@ the query." (result (json->scm port))) (close-port port) result))) + +(define (json->code file-name) + "Read FILE-NAME containing a JSON package definition and return an +S-expression, or return #F when the JSON is invalid." + (catch 'json-invalid + (lambda () + (let ((json (json-string->scm + (with-input-from-file file-name read-string)))) + (package->code (alist->package json)))) + (const #f))) + +(define (json->scheme-file file) + "Convert the FILE containing a JSON package definition to a Scheme +representation and return the new file name (or #F on error)." + (and-let* ((json (json->code file)) + (file* (let* ((tempdir (or (getenv "TMPDIR") "/tmp")) + (template (string-append tempdir "/guix-XXXXXX"= )) + (port (mkstemp! template))) + (close-port port) + template))) + (call-with-output-file file* + (lambda (port) + (write '(use-modules (gnu) + (guix) + ((guix licenses) #:prefix license:)) + port) + (write json port))) + file*)) --=20 2.25.1