From patchwork Mon Feb 6 14:13:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 46692 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 1FBD527BBED; Mon, 6 Feb 2023 14:15:21 +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=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,PDS_BTC_ID,RCVD_IN_MSPIKE_H2, SPF_HELO_PASS,URIBL_BLOCKED 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 F295F27BBE9 for ; Mon, 6 Feb 2023 14:15:18 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pP2Gw-0008Mi-JO; Mon, 06 Feb 2023 09:15:06 -0500 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 1pP2Gt-0008Ek-VK for guix-patches@gnu.org; Mon, 06 Feb 2023 09:15:04 -0500 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pP2Gs-0003Q3-K7 for guix-patches@gnu.org; Mon, 06 Feb 2023 09:15:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pP2Gs-0000i5-Ei for guix-patches@gnu.org; Mon, 06 Feb 2023 09:15:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#61322] [PATCH] status: Print a hint when a 'package-cache' hook fails to build. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 06 Feb 2023 14:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 61322 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 61322@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.16756928692651 (code B ref -1); Mon, 06 Feb 2023 14:15:02 +0000 Received: (at submit) by debbugs.gnu.org; 6 Feb 2023 14:14:29 +0000 Received: from localhost ([127.0.0.1]:47675 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pP2GK-0000ge-MG for submit@debbugs.gnu.org; Mon, 06 Feb 2023 09:14:29 -0500 Received: from lists.gnu.org ([209.51.188.17]:48256) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pP2G2-0000fz-MA for submit@debbugs.gnu.org; Mon, 06 Feb 2023 09:14:26 -0500 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 1pP2G0-0002iq-Qw for guix-patches@gnu.org; Mon, 06 Feb 2023 09:14:09 -0500 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 1pP2G0-0003Cg-Fe; Mon, 06 Feb 2023 09:14:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:Date:Subject:To:From:in-reply-to: references; bh=38Bu38fV1pm1uCFD9aR5A453FkBJ+PTD2q18+rQROls=; b=oPFsgLcphRcP6U org5tj3ZNxuKdABSR5pugLU7EW79whRlb08C6tUveiDGTORRTPCcFGG1KxvaqkSXwai5ZnFH4Tk4a G7XGv8xCqMF7zFTvWiiwdWOWLxxI1EO+dyWZNq9fbBKcZnOGtWfPreuDvx2UUPeQZsP3d8gvePOt9 tXOHNYoNs1I15VB7dWc4H2+VJIiZLnIrfietXC0Wy08ELsZyYF6xc5TrCYcmvbrATCjNKx01N+GnL 5TLHtNBhIE3y0JCOgKBG5RJ1WliqG0Hv5VpfLIs4mKuVRPPZP02WdlL9aaQBGmt7CVSVjExqbz9VK +RI6bQemxPS8HvfGfsVw==; Received: from [188.44.78.207] (helo=gnu.org) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pP2Fz-00050s-PI; Mon, 06 Feb 2023 09:14:08 -0500 From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Mon, 6 Feb 2023 15:13:52 +0100 Message-Id: <20230206141352.29287-1-ludo@gnu.org> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 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+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * guix/channels.scm (package-cache-file): Add 'channels' to the #:properties list. * guix/status.scm (print-build-event): Upon failure, display a hint when the derivation is a 'package-cache' hook. --- guix/channels.scm | 9 +++++++-- guix/status.scm | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) Hello! This patch mitigates a longstanding user interface issue. When pulling from a channel set where one of them has an issue, such as a reference to an unbound variable, you get something rather unhelpful like this: --8<---------------cut here---------------start------------->8--- $ guix pull -C ~/.config/guix/hpc-channels.scm -p /tmp/chantest Updating channel 'guix-hpc' from Git repository at 'https://gitlab.inria.fr/guix-hpc/guix-hpc.git'... Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'... Authenticating channel 'guix', commits 9edb3f6 to a582d86 (64 new commits)... Building from these channels: guix https://git.savannah.gnu.org/git/guix.git a582d86 guix-hpc https://gitlab.inria.fr/guix-hpc/guix-hpc.git 0e522d1 [...] guix-daemon 399B 205KiB/s 00:00 [##################] 100.0% guix-a582d8634 14KiB 1.2MiB/s 00:00 [##################] 100.0% building /gnu/store/c4racwl5ns6vpyjsx1ad3fxh9n48g0pl-guix-hpc.drv... building CA certificate bundle... listing Emacs sub-directories... building fonts directory... building directory of Info manuals... building profile with 2 packages... building /gnu/store/p2a500wi4nvznq85sf08jych48lpfijl-inferior-script.scm.drv... building package cache... \builder for `/gnu/store/pm5crwjcclblmdh8y15jk6i5wxml6j9g-guix-package-cache.drv' failed to produce output path `/gnu/store/12x6ka57amgv28rdnkc2wsq3hs8gr6gw-guix-package-cache' build of /gnu/store/pm5crwjcclblmdh8y15jk6i5wxml6j9g-guix-package-cache.drv failed View build log at '/var/log/guix/drvs/pm/5crwjcclblmdh8y15jk6i5wxml6j9g-guix-package-cache.drv.gz'. cannot build derivation `/gnu/store/06d4wla2l7qqldcaxif2qzgpsk377hvr-profile.drv': 1 dependencies couldn't be built guix pull: error: build of `/gnu/store/06d4wla2l7qqldcaxif2qzgpsk377hvr-profile.drv' failed --8<---------------cut here---------------end--------------->8--- In this case the relevant bit in the build log is: --8<---------------cut here---------------start------------->8--- In inria/hiepacs.scm: 879:41 3 (inputs #) In ice-9/boot-9.scm: 1685:16 2 (raise-exception _ #:continuable? _) 1780:13 1 (_ #<&compound-exception components: (#<&undefined-vari?>) In unknown file: 0 (backtrace #) (exception unbound-variable (value #f) (value "Unbound variable: ~S") (value (python2-numpy)) (value #f)) --8<---------------cut here---------------end--------------->8--- We probably cannot reliably “extract” the actual error from the build log, but we can at least hint in the right direction. This is what this patch does. Now you would get: --8<---------------cut here---------------start------------->8--- build of /gnu/store/dib9aa6g0zn3cvv7hvfrby7cnmpyrw2m-guix-package-cache.drv failed hint: This usually indicates a bug in one of the channels you are pulling from, or some incompatibility among them. You can check the build log and report the issue to the channel developers. The channels you are pulling from are: guix guix-hpc. View build log at '/var/log/guix/drvs/di/b9aa6g0zn3cvv7hvfrby7cnmpyrw2m-guix-package-cache.drv.gz'. cannot build derivation `/gnu/store/y11nksh5lhyj09zqszlg9pvg89wzpv5p-profile.drv': 1 dependencies couldn't be built guix build: error: build of `/gnu/store/y11nksh5lhyj09zqszlg9pvg89wzpv5p-profile.drv' failed --8<---------------cut here---------------end--------------->8--- Thoughts? Ludo’. base-commit: 25947bbc3217306742694304fa9b6499f0126c7a diff --git a/guix/channels.scm b/guix/channels.scm index 40cbc4bb3a..d44e7a0a3a 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -952,6 +952,10 @@ (define build (backtrace)))) (mkdir #$output)))) + (define channels + (map (compose string->symbol manifest-entry-name) + (manifest-entries manifest))) + (gexp->derivation-in-inferior "guix-package-cache" build profile @@ -960,8 +964,9 @@ (define build ;; instead of failing. #:silent-failure? #t - #:properties '((type . profile-hook) - (hook . package-cache)) + #:properties `((type . profile-hook) + (hook . package-cache) + (channels . ,channels)) #:local-build? #t))) (define %channel-profile-hooks diff --git a/guix/status.scm b/guix/status.scm index 2c69f49fb5..5580c80ea9 100644 --- a/guix/status.scm +++ b/guix/status.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017-2022 Ludovic Courtès +;;; Copyright © 2017-2023 Ludovic Courtès ;;; Copyright © 2018, 2019 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. @@ -22,6 +22,7 @@ (define-module (guix status) #:use-module (guix i18n) #:use-module (guix colors) #:use-module (guix progress) + #:autoload (guix ui) (display-hint) #:autoload (guix build syscalls) (terminal-columns) #:autoload (guix build download) (nar-uri-abbreviation) #:use-module (guix store) @@ -526,6 +527,21 @@ (define erase-current-line* (erase-current-line*) ;erase spinner or progress bar (format port (failure (G_ "build of ~a failed")) drv) (newline port) + (let ((properties (and=> (false-if-exception + (read-derivation-from-file drv)) + derivation-properties))) + (when (and (pair? properties) + (eq? (assq-ref properties 'type) 'profile-hook) + (eq? (assq-ref properties 'hook) 'package-cache)) + (display-hint (format #f (G_ "This usually indicates a bug in one of +the channels you are pulling from, or some incompatibility among them. You +can check the build log and report the issue to the channel developers. + +The channels you are pulling from are: ~a.") + (string-join + (map symbol->string + (or (assq-ref properties 'channels) + '(guix)))))))) (match (derivation-log-file drv) (#f (format port (failure (G_ "Could not find build log for '~a'."))