From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id yPYgEZcSvGFudQEAgWs5BA (envelope-from ) for ; Fri, 17 Dec 2021 05:31:19 +0100 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id eBrUDJcSvGFxXgAAB5/wlQ (envelope-from ) for ; Fri, 17 Dec 2021 04:31:19 +0000 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 EC7111DAAD for ; Fri, 17 Dec 2021 05:31:14 +0100 (CET) Received: from localhost ([::1]:41326 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1my4tm-0003mj-51 for larch@yhetil.org; Thu, 16 Dec 2021 23:31:14 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1my4tb-0003iz-4Z for guix-patches@gnu.org; Thu, 16 Dec 2021 23:31:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:54262) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1my4ta-0000VY-Q6 for guix-patches@gnu.org; Thu, 16 Dec 2021 23:31:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1my4ta-0000i6-IG for guix-patches@gnu.org; Thu, 16 Dec 2021 23:31:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#51838] [PATCH v5 06/45] guix: node-build-system: Refactor patch-dependencies phase. Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 17 Dec 2021 04:31:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 51838 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Philip McGrath , 51838@debbugs.gnu.org Cc: Timothy Sample , Pierre Langlois , Jelle Licht Received: via spool by 51838-submit@debbugs.gnu.org id=B51838.16397154102649 (code B ref 51838); Fri, 17 Dec 2021 04:31:02 +0000 Received: (at 51838) by debbugs.gnu.org; 17 Dec 2021 04:30:10 +0000 Received: from localhost ([127.0.0.1]:37575 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1my4sk-0000gf-DE for submit@debbugs.gnu.org; Thu, 16 Dec 2021 23:30:10 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:39527) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1my4sh-0000f8-Fv for 51838@debbugs.gnu.org; Thu, 16 Dec 2021 23:30:09 -0500 Received: by mail-wr1-f67.google.com with SMTP id a18so1673074wrn.6 for <51838@debbugs.gnu.org>; Thu, 16 Dec 2021 20:30:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=5FmmcL2PZNth21hYIhPETgfc2ulW01FeyEfRMWikDLM=; b=Ypvs7p9ChQrIsMRW453XKfBI0ndfo8jyT0RggxP8Ht6qvgsk1brnCfGDhjyZghHqfI EkpFrch1/gvyUmT864pKWIrOyHbA/eTYbTwBSXkWJh6q85zn8b7/tLke8redIm8DqdK7 WrrtspPFaKkV3ZDK3ZdK1cT8i4bab9r35rHkuMajiLQy1gOOaNyVmwEadTHOIX/0yD1t 0ctQcQzc64npHcyfaPbrsMBkPUJsxOCcn5/fkIfdJPgZt7aeVYiAoG5IMDOQL/IPz+K9 b2hRWOqcTOcQZXDosl1IqjGefH7Ygm+V0+ykN+ys3HW5XMyc0GbnW3oDwdBm30pyNTER 8e/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=5FmmcL2PZNth21hYIhPETgfc2ulW01FeyEfRMWikDLM=; b=umQnCx3Y/3SCu8NHLQwRp+ivNJ/pBA72GG4xsA6/ttB1qccP+DZasJZxdUdpdBWgdu xDiC83QvVfQgc/bH0bSVUsYIe+sspJ7WmRYCeAMU3cUXSe4Zon7AMEkCLgv2nXnzpS6P 4AuMv0+iybGEyAWyxChWkAErhTTGfB2iB44j3aRJkLZA0GElJaCt26tvvVJ7kujMjrAk l50dcCCldsVfXdMFQGpDHmN7LZAaN+k3XIufg9UKORa6zW08mYlT9XCMZcXU8qEJKBfw Lo9cA/4x7/k1Fh73O18eAxlbF6TdGkXqktglu5brR3KwrYScXzIekCVC9bW65MyD8m7b ICRg== X-Gm-Message-State: AOAM531CJLBTuLRzqeBr1SUNldlcwyyXasj3hCgtW7sgbat7uoutuS56 y/zlkBglpIjaht41r6DRwLo= X-Google-Smtp-Source: ABdhPJyDkboRwJs/Bd/x7Q+17dtgU8niFH+k+NYCovyPjyPPkKKivqlTLwj7cZHh/tZ7Oyiv5oEz/Q== X-Received: by 2002:adf:ed84:: with SMTP id c4mr857194wro.275.1639715401611; Thu, 16 Dec 2021 20:30:01 -0800 (PST) Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at. [85.127.52.93]) by smtp.gmail.com with ESMTPSA id f3sm6244706wrm.96.2021.12.16.20.30.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Dec 2021 20:30:00 -0800 (PST) Message-ID: <17f63a58ea9b462e67847f9c7698a119e3915a08.camel@gmail.com> From: Liliana Marie Prikler Date: Fri, 17 Dec 2021 05:29:54 +0100 In-Reply-To: <20211217020325.520821-7-philip@philipmcgrath.com> References: <20211213060107.129223-1-philip@philipmcgrath.com> <20211217020325.520821-1-philip@philipmcgrath.com> <20211217020325.520821-7-philip@philipmcgrath.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1639715475; 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=5FmmcL2PZNth21hYIhPETgfc2ulW01FeyEfRMWikDLM=; b=iXi6+vS2UGWhkLCwVMAs4JrPPPHUlLa+KbXr9NpSBC2diJStXbZlZc1gXBtlROGa8iQ1dz vaohG4Ae57pdhTYdTGqdtZ4N0KF8zKRxkdQ6Q0t7ZvlrA0YeUyF9HVDaXBDl3uiHe5QcJM KJFKHU2x4Css8I0AvVev3SyY+pOBRUEK5N6K5al6npLSdfxPA8gUzp4Oi+Nvr2glQFY91Y 0WqZWwB4p1B1lhwqaqsZ5bUJdgWxfEaOjrx0qjyE8ZRXdqeRyfti1l4xCaMj+b3lxbF53U VlqXwV307LwQOuEBYpINaH0JgIdbGkoFDM6qkJARj1N1L5OQZULC3IKDshG2oQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1639715475; a=rsa-sha256; cv=none; b=UQ7RLHzuGbZiH6+7bLdbWprlxXJNOkP6etBRv7Vz4Uxv5jQi5zmH+JNpsW0ESFseLvUfEz Gx00KDaNOhU7gdJ48VpPkji0PESffdHtXEvwqsYoh+H9fBpjNpNOPLiHf7W36N7eUE5+mH WClpl1KyG7rdM+qoMBP0c66C4tGpY+QrWgHgaVFx+5iDDPGhZwmmlrhek3Et6luCqx5au1 Ux0fEdy4f+zwFLAOgMPHgMRicnaI065t/+ek6vdDfti4k2AmdF1GH0Ir/9ZNdHIsu+Ldn1 jfcovSAFWlNVLoG6XexbkrdikGoA9t/k5Wbx09xdoZ5Spg5PUYuNHTp/3KAxDg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=Ypvs7p9C; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); 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" X-Migadu-Spam-Score: -3.49 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=Ypvs7p9C; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); 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" X-Migadu-Queue-Id: EC7111DAAD X-Spam-Score: -3.49 X-Migadu-Scanner: scn0.migadu.com X-TUID: XrfcVMfKyvx7 Hi, Am Donnerstag, dem 16.12.2021 um 21:02 -0500 schrieb Philip McGrath: > * guix/build/node-build-system.scm (patch-dependencies): Strictly > follow the linearity rules for `assoc-set!` and friends. > Clarify the types of the arguments to and return value from the > internal helper function `resolve-dependencies`. > [...] > -  (define (resolve-dependencies package-meta meta-key) > -    (fold (lambda (key+value acc) > -            (match key+value > -              ('@ acc) > -              ((key . value) (acons key (hash-ref index key value) > acc)))) > -          '() > -          (or (assoc-ref package-meta meta-key) '()))) > +  (define (resolve-dependencies meta-alist meta-key) > +    ;; Given: > +    ;;  - The alist from "package.json", with the '@ unwrapped > +    ;;  - A string key, like "dependencies" > +    ;; Returns: an alist (without a wrapping '@) like the entry in > +    ;; meta-alist for meta-key, but with dependencies supplied > +    ;; by Guix packages mapped to the absolute store paths to use. > +    (match (assoc-ref meta-alist meta-key) > +      (#f > +       '()) > +      (('@ . orig-deps) > +       (fold (match-lambda* > +               (((key . value) acc) > +                (acons key (hash-ref index key value) acc))) > +             '() > +             orig-deps)))) >   >    (with-atomic-file-replacement "package.json" >      (lambda (in out) > -      (let ((package-meta (read-json in))) > -        (assoc-set! package-meta "dependencies" > -                    (append > -                     '(@) > -                     (resolve-dependencies package-meta > "dependencies") > -                     (resolve-dependencies package-meta > "peerDependencies"))) > -        (assoc-set! package-meta "devDependencies" > -                    (append > -                     '(@) > -                     (resolve-dependencies package-meta > "devDependencies"))) > +      ;; It is unsafe to rely on 'assoc-set!' to update an > +      ;; existing assosciation list variable: > +      ;; see 'info "(guile)Adding or Setting Alist Entries"'. > +      (let* ((package-meta (read-json in)) > +             (alist (match package-meta > +                      ((@ . alist) alist))) > +             (alist > +              (assoc-set! > +               alist "dependencies" > +               (append > +                '(@) > +                (resolve-dependencies alist "dependencies") > +                (resolve-dependencies alist "peerDependencies")))) > +             (alist > +              (assoc-set! > +               alist "devDependencies" > +               (append > +                '(@) > +                (resolve-dependencies alist "devDependencies")))) > +             (package-meta (cons '@ alist))) >          (write-json package-meta out)))) >    #t) The Guix codebase is generally not the place to play around with destructive semantics. If you can avoid assoc-set!, I think you ought to, especially if it helps making a two-step process into a single-step one. Anything I'm missing here?