From patchwork Mon Mar 24 07:29:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Graves X-Patchwork-Id: 40765 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 008DA27BBEA; Mon, 24 Mar 2025 07:30:17 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 3192B27BBE2 for ; Mon, 24 Mar 2025 07:30:17 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1twcG5-0004de-Rs; Mon, 24 Mar 2025 03:30:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1twcG3-0004dE-IN for guix-patches@gnu.org; Mon, 24 Mar 2025 03:30:03 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1twcG3-0002vN-7C for guix-patches@gnu.org; Mon, 24 Mar 2025 03:30:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=vFUGv3sAq0vmqn92iPSl6PuiSn2Nv9FPxSbl2VpAF0w=; b=LjnZEjqwudZaJdtCiTlwlqxDezdwNtL+X+CUmo/crFdXTz23T/M9bLD//5j1OyjRcksyaHbtd01AyezddhOMX1BpI9/cD/G4Wn/II8B/c+xUnxzkhwj6IP3NW/gsvuBsU0pGJLW/putiL0dx/hZdzV6oXfVaTkV63Yjb/bmDo2UzCWTIF9qQAgAb+Guwu1Oa/puhYM2z+rGROFhvBSJfolxGhDCseU+Z1+uQrlNMYLaYz+caT4RnDydYQHCteCjtnYPUErYMmV5HzpLBKHGEHsms7qi362E0bt/R+wUKXXZuSRFJlgHmbKR7fUgYygDD68pQimOkiqmlvtDYxgI95A==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1twcG2-0005Ul-VG for guix-patches@gnu.org; Mon, 24 Mar 2025 03:30:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#77231] [PATCH 2/6] import: npm-binary: Improve npm-package->package-sexp. Resent-From: Nicolas Graves Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 24 Mar 2025 07:30:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 77231 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 77231@debbugs.gnu.org Cc: jelle.licht@fsfe.org, Nicolas Graves Received: via spool by 77231-submit@debbugs.gnu.org id=B77231.174280137420987 (code B ref 77231); Mon, 24 Mar 2025 07:30:02 +0000 Received: (at 77231) by debbugs.gnu.org; 24 Mar 2025 07:29:34 +0000 Received: from localhost ([127.0.0.1]:53973 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1twcFZ-0005SQ-Pm for submit@debbugs.gnu.org; Mon, 24 Mar 2025 03:29:34 -0400 Received: from 4.mo563.mail-out.ovh.net ([46.105.53.192]:58723) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1twcFW-0005S9-Vt for 77231@debbugs.gnu.org; Mon, 24 Mar 2025 03:29:32 -0400 Received: from director4.derp.mail-out.ovh.net (director4.derp.mail-out.ovh.net [79.137.60.37]) by mo563.mail-out.ovh.net (Postfix) with ESMTPS id 4ZLl6x3qdgz1XC6; Mon, 24 Mar 2025 07:29:29 +0000 (UTC) Received: from director4.derp.mail-out.ovh.net (director4.derp.mail-out.ovh.net. [127.0.0.1]) by director4.derp.mail-out.ovh.net (inspect_sender_mail_agent) with SMTP for <77231@debbugs.gnu.org>; Mon, 24 Mar 2025 07:29:29 +0000 (UTC) Received: from mta10.priv.ovhmail-u1.ea.mail.ovh.net (unknown [10.110.113.35]) by director4.derp.mail-out.ovh.net (Postfix) with ESMTPS id 4ZLl6x3JqfzyBQ; Mon, 24 Mar 2025 07:29:29 +0000 (UTC) Received: from ngraves.fr (unknown [10.1.6.7]) by mta10.priv.ovhmail-u1.ea.mail.ovh.net (Postfix) with ESMTPSA id F1FC8DA38ED; Mon, 24 Mar 2025 07:29:28 +0000 (UTC) Authentication-Results: garm.ovh; auth=pass (GARM-96R00186fccbd0-40d8-47ae-8dfb-8d10acaa968b, AEA14DA1325383AAD40887B56448FDDF9DC3A193) smtp.auth=ngraves@ngraves.fr X-OVh-ClientIp: 90.92.117.144 Date: Mon, 24 Mar 2025 08:29:13 +0100 Message-ID: <20250324072925.19588-2-ngraves@ngraves.fr> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250324072925.19588-1-ngraves@ngraves.fr> References: <20250324072925.19588-1-ngraves@ngraves.fr> MIME-Version: 1.0 X-Ovh-Tracer-Id: 709598416900842210 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdduheeludejucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecuhedttdenucenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefpihgtohhlrghsucfirhgrvhgvshcuoehnghhrrghvvghssehnghhrrghvvghsrdhfrheqnecuggftrfgrthhtvghrnhepleffjeetueethfefkeffffefvddukeejkefgleduiedthfekvefhiedvhfffgeegnecukfhppeduvdejrddtrddtrddupdeltddrledvrdduudejrddugeegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepuddvjedrtddrtddruddpmhgrihhlfhhrohhmpehnghhrrghvvghssehnghhrrghvvghsrdhfrhdpnhgspghrtghpthhtohepfedprhgtphhtthhopeejjedvfeduseguvggssghughhsrdhgnhhurdhorhhgpdhrtghpthhtohepjhgvlhhlvgdrlhhitghhthesfhhsfhgvrdhorhhgpdhrtghpthhtohepnhhgrhgrvhgvshesnhhgrhgrvhgvshdrfhhrpdfovfetjfhoshhtpehmohehieefmgdpmhhouggvpehsmhhtphhouhht DKIM-Signature: a=rsa-sha256; bh=vFUGv3sAq0vmqn92iPSl6PuiSn2Nv9FPxSbl2VpAF0w=; c=relaxed/relaxed; d=ngraves.fr; h=From; s=ovhmo4487190-selector1; t=1742801369; v=1; b=gq6Cf7xOpvTVmB+ymDYZeJrpqiZZXQdY/jPaUj74UopJXlhi1xB9Q3yyoWVOQefdfGIyRC0w naHNXMSiBYutmGQyg5rZ2EvtUVJMrBAWRwzW2nWVGqp2KX4yWiNmZUG8VOfMq8R9HEtVeSOviRN Q3iZsZCeWgj2yCCiZseWQW2shSM6jaV9A2U/WTLbkIhv1RfBDZw7Pk8Y3vPl6wR3bCnw8puLrU4 iwccFRwKQ78WsyWoCpwQ9Bh28c0IvoTSeesZZ4L5mW3Gt/S4CoBHrKA2bBaD+DlE76bsvqRReH8 YCukPhYt3ajm5Qwd4LDK22UmTODEideIcdkOyrhTcfQtg== X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Nicolas Graves X-ACL-Warn: , Nicolas Graves via Guix-patches X-Patchwork-Original-From: Nicolas Graves via Guix-patches via From: Nicolas Graves Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * guix/import/npm-binary.scm (npm-package->package-sexp): Use record matching. --- guix/import/npm-binary.scm | 121 ++++++++++++++++++------------------- 1 file changed, 58 insertions(+), 63 deletions(-) diff --git a/guix/import/npm-binary.scm b/guix/import/npm-binary.scm index c43b84f3d5..f095651c34 100644 --- a/guix/import/npm-binary.scm +++ b/guix/import/npm-binary.scm @@ -196,69 +196,64 @@ (define resolve-spec (($ name version) (resolve-package name (string->semver-range version))))) - (if (package-revision? npm-package) - (let ((name (package-revision-name npm-package)) - (version (package-revision-version npm-package)) - (home-page (package-revision-home-page npm-package)) - (dependencies (package-revision-dependencies npm-package)) - (dev-dependencies (package-revision-dev-dependencies npm-package)) - (peer-dependencies (package-revision-peer-dependencies npm-package)) - (license (package-revision-license npm-package)) - (description (package-revision-description npm-package)) - (dist (package-revision-dist npm-package))) - (let* ((name (npm-name->name name)) - (url (dist-tarball dist)) - (home-page (if (string? home-page) - home-page - (string-append %default-page "/" (uri-encode name)))) - (synopsis description) - (resolved-deps (map resolve-spec - (append dependencies peer-dependencies))) - (peer-names (map versioned-package-name peer-dependencies)) - ;; lset-difference for treating peer-dependencies as dependencies, - ;; which leads to dependency cycles. lset-union for treating them as - ;; (ignored) dev-dependencies, which leads to broken packages. - (dev-names - (lset-union string= - (map versioned-package-name dev-dependencies) - peer-names)) - (extra-phases - (match dev-names - (() '()) - ((dev-names ...) - `((add-after 'patch-dependencies 'delete-dev-dependencies - (lambda _ - (modify-json - (delete-dependencies '(,@(reverse dev-names))))))))))) - (values - `(package - (name ,name) - (version ,(semver->string (package-revision-version npm-package))) - (source (origin - (method url-fetch) - (uri ,url) - (sha256 (base32 ,(hash-url url))))) - (build-system node-build-system) - (arguments - (list - #:tests? #f - #:phases - #~(modify-phases %standard-phases - (delete 'build) - ,@extra-phases))) - ,@(match dependencies - (() '()) - ((dependencies ...) - `((inputs - (list ,@(map package-revision->symbol resolved-deps)))))) - (home-page ,home-page) - (synopsis ,synopsis) - (description ,description) - (license ,license)) - (map (match-lambda (($ name version) - (list name (semver->string version)))) - resolved-deps)))) - (values #f '()))) + (match npm-package + (($ + name version home-page dependencies dev-dependencies + peer-dependencies license description dist) + (let* ((name (npm-name->name name)) + (url (dist-tarball dist)) + (home-page (if (string? home-page) + home-page + (string-append %default-page "/" (uri-encode name)))) + (synopsis description) + (resolved-deps (map resolve-spec + (append dependencies peer-dependencies))) + (peer-names (map versioned-package-name peer-dependencies)) + ;; lset-difference for treating peer-dependencies as dependencies, + ;; which leads to dependency cycles. lset-union for treating them as + ;; (ignored) dev-dependencies, which leads to broken packages. + (dev-names + (lset-union string= + (map versioned-package-name dev-dependencies) + peer-names)) + (extra-phases + (match dev-names + (() '()) + ((dev-names ...) + `((add-after 'patch-dependencies 'delete-dev-dependencies + (lambda _ + (modify-json + (delete-dependencies '(,@(reverse dev-names))))))))))) + (values + `(package + (name ,name) + (version ,(semver->string (package-revision-version npm-package))) + (source (origin + (method url-fetch) + (uri ,url) + (sha256 (base32 ,(hash-url url))))) + (build-system node-build-system) + (arguments + (list + #:tests? #f + #:phases + #~(modify-phases %standard-phases + (delete 'build) + ,@extra-phases))) + ,@(match dependencies + (() '()) + ((dependencies ...) + `((inputs + (list ,@(map package-revision->symbol resolved-deps)))))) + (home-page ,home-page) + (synopsis ,synopsis) + (description ,description) + (license ,license)) + (map (match-lambda (($ name version) + (list name (semver->string version)))) + resolved-deps)))) + (_ + (values #f '())))) ;;;