From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id mZKOLw5AnV9DeQAA0tVLHw (envelope-from ) for ; Sat, 31 Oct 2020 10:44:30 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id OVzTKg5AnV+magAAB5/wlQ (envelope-from ) for ; Sat, 31 Oct 2020 10:44:30 +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 3B86F940148 for ; Sat, 31 Oct 2020 10:44:30 +0000 (UTC) Received: from localhost ([::1]:36368 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kYoN2-0002If-5i for larch@yhetil.org; Sat, 31 Oct 2020 06:44:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kYoMd-0002HN-3L for bug-guix@gnu.org; Sat, 31 Oct 2020 06:44:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:49055) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kYoMc-0002eD-JC for bug-guix@gnu.org; Sat, 31 Oct 2020 06:44:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kYoMc-0007J7-H2 for bug-guix@gnu.org; Sat, 31 Oct 2020 06:44:02 -0400 X-Loop: help-debbugs@gnu.org Subject: bug#43893: [PATCH v3] maint: update-guix-package: Prevent accidentally breaking guix pull. Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Sat, 31 Oct 2020 10:44:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43893 X-GNU-PR-Package: guix X-GNU-PR-Keywords: patch To: Maxim Cournoyer Received: via spool by 43893-submit@debbugs.gnu.org id=B43893.160414098828015 (code B ref 43893); Sat, 31 Oct 2020 10:44:02 +0000 Received: (at 43893) by debbugs.gnu.org; 31 Oct 2020 10:43:08 +0000 Received: from localhost ([127.0.0.1]:60601 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kYoLk-0007Hn-7K for submit@debbugs.gnu.org; Sat, 31 Oct 2020 06:43:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52730) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kYoLi-0007HJ-Dp for 43893@debbugs.gnu.org; Sat, 31 Oct 2020 06:43:06 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36379) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kYoLc-0002LZ-MS; Sat, 31 Oct 2020 06:43:00 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=56852 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kYoLc-0005T3-06; Sat, 31 Oct 2020 06:43:00 -0400 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= References: <87imbedsko.fsf@gnu.org> <20201014031705.4516-1-maxim.cournoyer@gmail.com> <87lfg0bo9m.fsf@gnu.org> <87v9f44852.fsf@gmail.com> <875z749czt.fsf@gnu.org> <87eelpd0af.fsf@gmail.com> <87k0vhm1fg.fsf@gnu.org> <87d0172adj.fsf@gmail.com> <87k0vefjgv.fsf@gnu.org> <874kmifhn2.fsf@gnu.org> <87d00zyrom.fsf@gmail.com> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 10 Brumaire an 229 de la =?UTF-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Sat, 31 Oct 2020 11:42:58 +0100 In-Reply-To: <87d00zyrom.fsf@gmail.com> (Maxim Cournoyer's message of "Fri, 30 Oct 2020 23:56:09 -0400") Message-ID: <871rhevfpp.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -3.3 (---) X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 43893@debbugs.gnu.org Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: "bug-Guix" X-Scanner: ns3122888.ip-94-23-21.eu Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of bug-guix-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=bug-guix-bounces@gnu.org X-Spam-Score: -1.51 X-TUID: 171c5/AxABbf Hi Maxim, Maxim Cournoyer skribis: >> +(define (assert-clean-checkout repository) >> + "Error out if the working directory at REPOSITORY contains local >> +modifications." >> + (define description >> + (let ((format-options (make-describe-format-options >> + #:dirty-suffix "-dirty"))) >> + (describe-format (describe-workdir repository) format-options))) >> + >> + (when (string-suffix? "-dirty" description) >> + (leave (G_ "attempt to update 'guix' package from a dirty tree (~a)= ~%") >> + description)) >> + >> + (info (G_ "updating 'guix' package to '~a'~%") description)) > > Unfortunately this doesn't catch the case where git has explicitly been > told to '--skip-worktree' on a path or file (the original cause of this > bug report). See > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D43893#11. Any such issue is caught when one eventually runs =E2=80=98guix build guix= =E2=80=99 (wrong commit ID, wrong hash, etc.). But you=E2=80=99re right that the above test isn=E2=80=99t fool-proof: it= =E2=80=99s just a way to catch this common mistake early and report it nicely. >> (define (main . args) >> (match args >> ((commit version) >> @@ -113,32 +153,20 @@ COMMIT." >> (hash (query-path-hash store source)) >> (location (package-definition-location)) >> (old-hash (content-hash-value >> - (origin-hash (package-source guix))))) >> + (origin-hash (package-source guix))))) >> + >> + (unless (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT") >> + (let ((repository (repository-open "."))) >> + (assert-clean-checkout repository) >> + (repository-close! repository))) >> + >> (edit-expression location >> (update-definition commit hash >> #:old-hash old-hash >> #:version version)) > >> - ;; Re-add SOURCE to the store, but this time under the real na= me used >> - ;; in the 'origin'. This allows us to build the package witho= ut >> - ;; having to make a real checkout; thus, it also works when wo= rking >> - ;; on a private branch. >> - (reload-module >> - (resolve-module '(gnu packages package-management))) >> - >> - (let* ((source (add-to-store store >> - (origin-file-name (package-source= guix)) >> - #t "sha256" source)) >> - (root (store-path-package-name source))) >> - >> - ;; Add an indirect GC root for SOURCE in the current directo= ry. >> - (false-if-exception (delete-file root)) >> - (symlink source root) >> - (add-indirect-root store >> - (string-append (getcwd) "/" root)) >> - >> - (format #t "source code for commit ~a: ~a (GC root: ~a)~%" >> - commit source root))))) >> + (when (getenv "GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT") >> + (keep-source-in-store store source))))) > > That environment variable would now do more than it advertises. I'd > prefer to keep the behavior consistent in both modes, unless there's a > very good reason not too? Adding the source to the store, under the right name, with a GC root, is a prerequisite for use cases like =E2=80=98make release=E2=80=99: there you= not only want to update the package definition to refer to your private commit and corresponding hash, you also want to be able to build it. If the source isn=E2=80=99t already in the store, =E2=80=98guix build guix=E2=80= =99 tries to look it up on Savannah, which fails. Conversely, when GUIX_ALLOW_ME_TO_USE_PRIVATE_COMMIT is unset, we don=E2=80= =99t add the source to the store: that way, =E2=80=98guix build guix=E2=80=99 is= forced to clone from Savannah, which fails if for some reason the commit or hash is incorrect. This catches the kinds of mistakes that we previously made, where we sometimes unwillingly ended up updating to the wrong commit/hash. I hope that makes sense. Thanks for your time! Ludo=E2=80=99.