From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id sNCHAWS4KmV0agAAauVa8A:P1 (envelope-from ) for ; Sat, 14 Oct 2023 17:48:52 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4789::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id sNCHAWS4KmV0agAAauVa8A (envelope-from ) for ; Sat, 14 Oct 2023 17:48:52 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 8D5383E629 for ; Sat, 14 Oct 2023 17:48:51 +0200 (CEST) Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gnu.org header.s=fencepost-gnu-org header.b="ipczeY/+"; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1697298531; a=rsa-sha256; cv=none; b=ZYsmfpv3INluElMI5gGqSuFdxL+3etw5P9/XhcbtGqCXJIdRG6PdU651fIDsoITmHF/dM9 6y/W+EtAhEx6W8LbjHd/ZMLjsRzXjce+yqSDECKShZoxAhCz25v+5+tf2hjqcfwtwPe5NM TjGdHejX3UpRmnD0E+vA4JBvcHqMnez5tJw+RkInf0nsjaGcQP0E3h3BBaFw8QTgpDmvgn /ShAggL79BcbtK9jQxe477fM7JZ2xROy/chDCZMCgjzVCxr0JagEiayiUTcL2SJ8aT4xzP FbxXAiVyAbzr4gudkjwntuQs3dTf3qoOoVHsmMQ2bLjNPxTBmWN8uvyUo5blLg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gnu.org header.s=fencepost-gnu-org header.b="ipczeY/+"; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1697298531; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=4TfhYBmQ19fO7nm5g1x7oU6aafIi0pGX+oYJn+uoHD0=; b=Wpa+SOhpAaRxj3pjbeHblWrFDSsozx/5l3+tEXWee1kRpsvJI8UMO0sN7E1MdxckJVC1gX hSDMNJJsu43lzvjsfd9doCXl+mgEPSLZ88hIuzVTyLTWqvmqREuaiPpd6qqEKc8jaYt00X oR3ZUAYSULw5YQiTqa8nWCVKEDZFAeIb7I8HoInvyTVVjr+kr96ddGmHMIUBgvuVPCF/qF dPTmXsIu6ZtG6Fa6ZW15XKQZHBC6LlIgNnqmwg+WowmLZ4SA0/kV8QdaaJj+tn86Ig4mom aIZMujeKb55LLDEalSaxo/QSlegzRpJoeX0fl5Urmm04OKp++yoH0oWTJ0KkZw== Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qrgsb-0000mr-BG; Sat, 14 Oct 2023 11:48:41 -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 1qrgsY-0000k1-90 for guix-patches@gnu.org; Sat, 14 Oct 2023 11:48:38 -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 1qrgsY-0007mV-1Q for guix-patches@gnu.org; Sat, 14 Oct 2023 11:48:38 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qrgsv-0008Rv-MB for guix-patches@gnu.org; Sat, 14 Oct 2023 11:49:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42338] [PATCH v3 1/7] guix: import: Add composer importer. Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 14 Oct 2023 15:49:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42338 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Nicolas Graves Cc: Josselin Poiret , Tobias Geerinckx-Rice , Simon Tournier , Mathieu Othacehe , 42338@debbugs.gnu.org, Ricardo Wurmus , Christopher Baines Received: via spool by 42338-submit@debbugs.gnu.org id=B42338.169729853632446 (code B ref 42338); Sat, 14 Oct 2023 15:49:01 +0000 Received: (at 42338) by debbugs.gnu.org; 14 Oct 2023 15:48:56 +0000 Received: from localhost ([127.0.0.1]:50244 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qrgsp-0008RC-P5 for submit@debbugs.gnu.org; Sat, 14 Oct 2023 11:48:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51146) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qrgsm-0008QG-Rf for 42338@debbugs.gnu.org; Sat, 14 Oct 2023 11:48:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qrgsH-0007jp-OQ; Sat, 14 Oct 2023 11:48:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To: From; bh=4TfhYBmQ19fO7nm5g1x7oU6aafIi0pGX+oYJn+uoHD0=; b=ipczeY/+sIuRTaTZ/Os4 88w38bsmQzRVhVG5uMQZOjY4XWpK51S5IFkMDeebRX7mXyud05o+NBSmgvz2cA7sdcfBJUlrpOBKv sE4ZNgfvVwOLD3gYGB7GbYb+Llqzm689PcCe8H5QGaebKDgA1WOaneGWqEOVmNU+KCQcLRNkG3QL0 nk80A2DLZT/lZ6obXZAxMLeShriJoWlafJS8LzrDOnv/2jSGOCbKc5y9dDaHg6AziI4s0Sk/5nKWH xfKVRr+6qGWV03pMEWIJy7/vuv7dUg8DDpRoLQQkeIUv04KZMJbE7OeGjgDtQi8CSsQ8TwFPDKlMS Q5F1wk2UxhBzdw==; From: Ludovic =?UTF-8?Q?Court=C3=A8s?= In-Reply-To: <6abfbb4d4d57642fea6bae5835ff0d365de7e24a.1695724304.git.ngraves@ngraves.fr> (Nicolas Graves's message of "Tue, 26 Sep 2023 12:31:38 +0200") References: <20200713002055.1553f136@tachikoma.lepiller.eu> <6abfbb4d4d57642fea6bae5835ff0d365de7e24a.1695724304.git.ngraves@ngraves.fr> Date: Sat, 14 Oct 2023 17:48:18 +0200 Message-ID: <87edhxfbnh.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable 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: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Migadu-Scanner: mx1.migadu.com X-Migadu-Spam-Score: -5.39 X-Spam-Score: -5.39 X-Migadu-Queue-Id: 8D5383E629 X-TUID: tA5TIAsNSQrC Hi Nicolas, Nicolas Graves skribis: > * guix/import/composer.scm: New file. > * guix/scripts/import/composer.scm: New file. > * guix/tests/composer.scm: New file. > * Makefile.am: Add them. > * guix/scripts/import.scm: Add composer importer. > * doc/guix.texi (Invoking guix import): Mention it. I=E2=80=99m a bit at loss with this patch series because there are two v3 threads, one v4 thread that contains a single patch, and the original versions contained many more patches. I think it=E2=80=99s OK to separate out the =E2=80=9Cgnu: Add php-*=E2=80= =9D patches, it=E2=80=99s probably clearer. However, could you come up with a v5 that includes all the =E2=80=98guix import composer=E2=80=99 changes that we would need t= o apply? How does that sound? I have a couple of comments: > +@item composer > +@cindex Composer > +@cindex PHP > +Import metadat from the @uref{https://getcomposer.org/, Composer} package ^ Typo. > +++ b/guix/import/composer.scm > @@ -0,0 +1,270 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright =C2=A9 2019 Julien Lepiller Maybe add yourself too? > +;; XXX adapted from (guix scripts hash) > +(define (file-hash file select? recursive?) > + ;; Compute the hash of FILE. > + (if recursive? > + (let-values (((port get-hash) (open-sha256-port))) > + (write-file file port #:select? select?) > + (force-output port) > + (get-hash)) > + (call-with-input-file file port-sha256))) > + > +;; XXX taken from (guix scripts hash) > +(define (vcs-file? file stat) These two procedures are now exported from (guix hash), so you can remove them and #:use-module (guix hash) instead. > +(define* (composer-fetch name #:optional version) > + "Return an alist representation of the Composer metadata for the packa= ge NAME, > +or #f on failure." > + (let ((package (json-fetch > + (string-append (%composer-base-url) "/p/" name ".json= ")))) > + (if package > + (let* ((packages (assoc-ref package "packages")) > + (package (or (assoc-ref packages name) package)) > + (versions (filter > + (lambda (version) > + (and (not (string-contains version "dev")) > + (not (string-contains version "beta"))= )) > + (map car package))) > + (version (or (if (null? version) #f version) > + (latest-version versions)))) > + (assoc-ref package version)) Instead of returning an alist, directly return a record. > +(define (php-package? package) > + "Return true if PACKAGE is a PHP package from Packagist." > + (and > + (eq? (build-system-name (package-build-system package)) 'composer) Rather: (eq? (package-build-system package) composer-build-system). (The =E2=80=98name=E2=80=99 field is for debugging purposes only.) > +(define (latest-release package) > + "Return an for the latest release of PACKAGE." > + (let* ((php-name (guix-package->composer-name package)) > + (metadata (composer-fetch php-name)) > + (package (json->composer-package metadata)) > + (version (composer-package-version package)) > + (url (composer-source-url (composer-package-source package)))) > + (upstream-source > + (package (package-name package)) > + (version version) > + (urls (list url))))) Maybe we can do that later, but note that has an =E2=80=98inputs=E2=80=99 field nowadays; if you feel it in, =E2=80=98guix r= efresh -u=E2=80=99 is able to update dependencies in addition to version/hash. (If you leave it for later, please add a TODO.) > +;; Avoid collisions with other tests. > +(%http-server-port 10450) This is now unnecessary: by default a random unused port is chosen and everything=E2=80=99s fine. > +(test-begin "composer") > + > +(test-assert "composer->guix-package" > + ;; Replace network resources with sample data. > + (with-http-server `((200 ,test-json) > + (200 ,test-source)) > + (parameterize ((%composer-base-url (%local-url)) > + (current-http-proxy (%local-url))) > + (match (composer->guix-package "foo/bar") > + (('package > + ('name "php-foo-bar") > + ('version "0.1") For clarity, you can write: (match =E2=80=A6 (`(package (name "php-foo-bar") (version "0.1") =E2=80=A6) =E2=80=A6)) See commit 654fcf9971bb01389d577be07c6ec0f68940c743. > + ('native-inputs > + ('quasiquote > + (("php-phpunit-phpunit" ('unquote 'php-phpunit-phpunit))))) Please change the importer so that it emits inputs without labels: (native-inputs (list php-phpunit-phpunit)) One last thing: consider adding an =E2=80=98etc/news.scm=E2=80=99 entry so = people can learn about the new importer. Thanks in advance! Ludo=E2=80=99.