From patchwork Wed Mar 9 22:56:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Roevens X-Patchwork-Id: 5327 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) client-signature ECDSA (P-384)) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 4KDSJS0xvLz3xq8 for ; Wed, 9 Mar 2022 22:57:28 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) client-signature ECDSA (P-384)) (Client CN "mail02.haj.ipfire.org", Issuer "R3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4KDSJM1vYqz2RJ; Wed, 9 Mar 2022 22:57:23 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4KDSJM0djNz2yj9; Wed, 9 Mar 2022 22:57:23 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4KDSJL1Cg0z2xWt for ; Wed, 9 Mar 2022 22:57:22 +0000 (UTC) Received: from knopi.disroot.org (knopi.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mail01.ipfire.org (Postfix) with ESMTPS id 4KDSJJ2Y0Pz1DM for ; Wed, 9 Mar 2022 22:57:20 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 8DF40400A8 for ; Wed, 9 Mar 2022 23:57:19 +0100 (CET) X-Virus-Scanned: SPAM Filter at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Gf6ttnKVMqtA for ; Wed, 9 Mar 2022 23:57:18 +0100 (CET) Received: from chojin.sicho.home (amaterasu.sicho.home [192.168.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (no client certificate requested) (Authenticated sender) by hachiman (MailScanner Milter) with SMTP id BD76C1B98F; Wed, 9 Mar 2022 23:57:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1646866637; bh=EbFOVEGvcLkWqrFQSQj4F9DH2ya/HjA61c43PUXADDM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=X5KtcYGHnqR4NMyNBJfVQQlkkd7y/tCmrRkDi/O2GflEjbzAftMZTxZLTeGLuJRwe y1wUdoS4jGinPOMcweiZ/L5/fypThK44ekhRuj25LDEn848yUITvAnp7nOiyJAZuQm wdYTi2MRMuAHnXR70tkzbmFMN6AFN6me1Fv9VElbWwwjosO6J5A69OQszBGwvCMx1v P3sXV8kgpCDwl0rRRD1aoRrDBG5LN5YJ7+qfZtiBwlF0/FV2Sl/Za7SI2Pax/LTSLZ XxCH5ONJYT/Ur1PMhMfbdrhnlh2Af83TV2WvyfLgdod+i/amen9JQtI1ZLnsQi8HjP SZGli1wpm07BA== From: Robin Roevens To: development@lists.ipfire.org Subject: [PATCH 9/9] pakfire: Redesign update output and workflow Date: Wed, 9 Mar 2022 23:56:55 +0100 Message-Id: <20220309225655.4472-10-robin.roevens@disroot.org> In-Reply-To: <20220309225655.4472-1-robin.roevens@disroot.org> References: <20220309225655.4472-1-robin.roevens@disroot.org> Mime-Version: 1.0 X-sicho-MailScanner-ID: BD76C1B98F.A8A80 X-sicho-MailScanner: Found to be clean X-sicho-MailScanner-From: robin.roevens@disroot.org X-sicho-MailScanner-Watermark: 1647471431.46625@Z4GJohCXoiZQ57FQG6iTgQ ARC-Seal: i=1; s=202003rsa; d=lists.ipfire.org; t=1646866640; a=rsa-sha256; cv=none; b=exX84jp3maIAKbNltU2pnHMTUEO4lwqpeolXMLI63R+M1hXXs0Eq6+Ayn6ras/XOxMpwZT JdW64kapMtnXhsmHTJwEl2b083M2GG60ItDHho6CLyrDWAYu6lT8Uf0fTLorwe+z6Gb7Ot uZWui2rbkUO1U5DASqyo9VqLpj52e4iADO2sCpvsfKvnxPN9aLcGsNVUx13tAddByInZKo loh6nnkW9FJkW1Jr12hbEpJpjmmvhF0uzNH9mYrcKzlr+j6hyW5RIURZVuDGHaYuSxaknK w5Et/wqJBQL9vOKKT4eUzjgXttr/is0dRtkVzuTSVEEpJcsVBpfl9Z8JCsJdVA== ARC-Authentication-Results: i=1; mail01.ipfire.org; dkim=pass header.d=disroot.org header.s=mail header.b=X5KtcYGH; dmarc=pass (policy=quarantine) header.from=disroot.org; spf=pass (mail01.ipfire.org: domain of robin.roevens@disroot.org designates 178.21.23.139 as permitted sender) smtp.mailfrom=robin.roevens@disroot.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=lists.ipfire.org; s=202003rsa; t=1646866640; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jKRq010RhaJl/rgcLH6HZ3shcQ40uFSvt0HJAmIm0S4=; b=RR5X7XVU8Wgy9gHSBL05zCXGK0bL7G4eP8blEy6qEk4CbRpp8TPHMcO5OQpr5uEwOWqkU+ HtRAVrdNewvOIrgDKzeVRc0k4qxvyvRqmddd9b5atn/bFwc+r/r/ckD2wqMMCTEPuX8T/V WXsPTccRDULRHvxGAjqyxR1pqb0MRPf756Z/x/DDA2UWSjaTGu5Y0b8+LJpXk2uz6L7uAs 6YVdgKAdGtsLBGe4Sc5i5gR0JuW2Saqc20XawizWgjyO9olGPgoq/dFKJP5dbugGFsOWcx udPrztzFODNUaDuAJ1dg9gDPyYCAqQZMa1Q4RciRV7JEfxA6GM7J6s+yCSr13Q== Authentication-Results: mail01.ipfire.org; dkim=pass header.d=disroot.org header.s=mail header.b=X5KtcYGH; dmarc=pass (policy=quarantine) header.from=disroot.org; spf=pass (mail01.ipfire.org: domain of robin.roevens@disroot.org designates 178.21.23.139 as permitted sender) smtp.mailfrom=robin.roevens@disroot.org X-Rspamd-Server: mail01.haj.ipfire.org X-Spamd-Result: default: False [-4.82 / 11.00]; BAYES_HAM(-3.00)[99.99%]; IP_REPUTATION_HAM(-1.15)[asn: 50673(-0.33), country: NL(-0.01), ip: 178.21.23.139(-0.82)]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM(-0.98)[-0.982]; SPF_REPUTATION_HAM(-0.68)[-0.67693222528735]; DMARC_POLICY_ALLOW(-0.50)[disroot.org,quarantine]; MV_CASE(0.50)[]; R_MISSING_CHARSET(0.50)[]; R_SPF_ALLOW(-0.20)[+a]; R_DKIM_ALLOW(-0.20)[disroot.org:s=mail]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; ASN(0.00)[asn:50673, ipnet:178.21.23.0/24, country:NL]; FROM_EQ_ENVFROM(0.00)[]; ARC_SIGNED(0.00)[lists.ipfire.org:s=202003rsa:i=1]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; PREVIOUSLY_DELIVERED(0.00)[development@lists.ipfire.org]; DKIM_TRACE(0.00)[disroot.org:+]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[] X-Rspamd-Queue-Id: 4KDSJJ2Y0Pz1DM X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: IPFire development talk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: development-bounces@lists.ipfire.org Sender: "Development" - Revamped 'pakfire update' more in the style of 'pakfire install' for a more consistent look and feel. - Add core update details to output - Add new dependencies to install to output - First collect all upgrade info, then perform core update together with available package updates and after user confirmation (without -y). Signed-off-by: Robin Roevens --- src/pakfire/pakfire | 79 +++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 28 deletions(-) diff --git a/src/pakfire/pakfire b/src/pakfire/pakfire index 9935481a5..0a144c517 100644 --- a/src/pakfire/pakfire +++ b/src/pakfire/pakfire @@ -258,51 +258,76 @@ &Pakfire::getcoredb("$force"); } elsif ("$ARGV[0]" eq "upgrade") { - my $use_color = ""; - my $reset_color = ""; - - if ("$Pakfire::enable_colors" eq "1") { - $reset_color = "$Pakfire::color{'normal'}"; - $use_color = "$Pakfire::color{'lightpurple'}"; - } - &Pakfire::message("CORE INFO: Checking for Core updates..."); - ### Make sure that the core db is not outdated. &Pakfire::getcoredb("noforce"); - my %coredb = &Pakfire::coredbinfo(); - if (defined $coredb{'AvailableRelease'}) { - &Pakfire::upgradecore(); - } else { - &Pakfire::message("CORE WARN: No new Core upgrades available. You are on release ".$coredb{'Release'}); - } + my %coredb = &Pakfire::coredbinfo(); + &Pakfire::message("CORE WARN: No new Core upgrades available. You are on release ".$coredb{'Release'}) unless (defined $coredb{'AvailableRelease'}); &Pakfire::message("PAKFIRE INFO: Checking for package updates..."); ### Make sure that the package list is not outdated. &Pakfire::dbgetlist("noforce"); my @deps = (); - if (my %upgradepaks = &Pakfire::dblist("upgrade")) { - # Resolve the dependencies of the to be upgraded packages - @deps = &Pakfire::resolvedeps_recursive(keys %upgradepaks); + my %upgradepaks = &Pakfire::dblist("upgrade"); - foreach $pak (sort keys %upgradepaks) { - print "${use_color}Update: $pak\nVersion: $upgradepaks{$pak}{'ProgVersion'} -> $upgradepaks{$pak}{'AvailableProgVersion'}\n"; - print "Release: $upgradepaks{$pak}{'Release'} -> $upgradepaks{$pak}{'AvailableRelease'}${reset_color}\n"; - } + # Resolve the dependencies of the to be upgraded packages + @deps = &Pakfire::resolvedeps_recursive(keys %upgradepaks) if (%upgradepaks); + &Pakfire::message("PAKFIRE WARN: No new package upgrades available.") unless (@deps); + + if (defined $coredb{'AvailableRelease'} || %upgradepaks) { + &Pakfire::message(""); &Pakfire::message(""); - &Pakfire::message("PAKFIRE UPGR: We are going to install all packages listed above."); + &Pakfire::message("PAKFIRE INFO: Upgrade summary:"); + &Pakfire::message(""); + + if (defined $coredb{'AvailableRelease'}) { + &Pakfire::message("CORE INFO: Core-Update $coredb{'CoreVersion'} to install:"); + &Pakfire::message("CORE UPGR: Release: $coredb{'Release'} -> $coredb{'AvailableRelease'}"); + &Pakfire::message(""); + } + + if (@deps) { + &Pakfire::message("PAKFIRE INFO: New dependencies to install:"); + my $totalsize = 0; + foreach $pak (@deps) { + unless (defined $upgradepaks{$pak} || &Pakfire::isinstalled($pak) == 0) { + my $size = &Pakfire::getsize("$pak"); + $totalsize += $size; + $size = &Pakfire::beautifysize($size); + &Pakfire::message("PAKFIRE INFO: $pak \t - $size"); + } + } + $totalsize = &Pakfire::beautifysize($totalsize); + &Pakfire::message(""); + &Pakfire::message("PAKFIRE INFO: Total size: \t ~ $totalsize"); + &Pakfire::message(""); + } + + if (%upgradepaks) { + &Pakfire::message("PAKFIRE INFO: Packages to upgrade:"); + foreach $pak (sort keys %upgradepaks) { + &Pakfire::message("PAKFIRE UPGR: $pak\t$upgradepaks{$pak}{'ProgVersion'}-$upgradepaks{$pak}{'Release'} -> $upgradepaks{$pak}{'AvailableProgVersion'}-$upgradepaks{$pak}{'AvailableRelease'}"); + } + &Pakfire::message(""); + } + if ($interactive) { - &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); + &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); my $ret = ; chomp($ret); &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); if ( $ret ne "y" ) { - &Pakfire::message("PAKFIRE ERROR: Installation aborted."); - exit 1; + &Pakfire::message("PAKFIRE ERROR: Installation aborted."); + exit 1; } } + + # Perform core update + if (defined $coredb{'AvailableRelease'}) { + &Pakfire::upgradecore(); + } # Download packages foreach $pak (sort keys %upgradepaks) { @@ -323,8 +348,6 @@ foreach $pak (sort keys %upgradepaks) { &Pakfire::upgradepak("$pak"); } - } else { - &Pakfire::message("PAKFIRE WARN: No new package upgrades available."); } } elsif ("$ARGV[0]" eq "list") {