From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id E9AAC66A28 for ; Tue, 28 Jul 2020 10:59:25 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id DC04522501 for ; Tue, 28 Jul 2020 10:59:25 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 56678224D6 for ; Tue, 28 Jul 2020 10:59:23 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 1E227433CD for ; Tue, 28 Jul 2020 10:59:23 +0200 (CEST) From: Stefan Reiter To: pbs-devel@lists.proxmox.com Date: Tue, 28 Jul 2020 10:58:43 +0200 Message-Id: <20200728085846.28816-2-s.reiter@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200728085846.28816-1-s.reiter@proxmox.com> References: <20200728085846.28816-1-s.reiter@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.054 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [apt.rs] Subject: [pbs-devel] [RFC proxmox-backup 1/4] apt: allow filter to select different package version X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Jul 2020 08:59:26 -0000 To get package details for a specific version instead of only the candidate. Signed-off-by: Stefan Reiter --- src/api2/node/apt.rs | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/api2/node/apt.rs b/src/api2/node/apt.rs index 37bf48d4..f2c4ae7b 100644 --- a/src/api2/node/apt.rs +++ b/src/api2/node/apt.rs @@ -71,7 +71,7 @@ fn get_changelog_url( bail!("unknown origin ({}) or component ({})", origin, component) } -fn list_installed_apt_packages bool>(filter: F) +fn list_installed_apt_packages bool>(filter: F) -> Vec { let mut ret = Vec::new(); @@ -99,8 +99,12 @@ fn list_installed_apt_packages bool>(filter: F) None => current_version.clone() }; - let package = view.name(); - if filter(&package, ¤t_version, &candidate_version) { + // get additional information via nested APT 'iterators' + let mut view_iter = view.versions(); + while let Some(ver) = view_iter.next() { + + let package = view.name(); + let version = ver.version(); let mut origin_res = "unknown".to_owned(); let mut section_res = "unknown".to_owned(); let mut priority_res = "unknown".to_owned(); @@ -108,9 +112,7 @@ fn list_installed_apt_packages bool>(filter: F) let mut short_desc = package.clone(); let mut long_desc = "".to_owned(); - // get additional information via nested APT 'iterators' - let mut view_iter = view.versions(); - while let Some(ver) = view_iter.next() { + if filter(&package, ¤t_version, &candidate_version, &version) { if ver.version() == candidate_version { if let Some(section) = ver.section() { section_res = section; @@ -159,23 +161,21 @@ fn list_installed_apt_packages bool>(filter: F) } } - break; + let info = APTUpdateInfo { + package, + title: short_desc, + arch: view.arch(), + description: long_desc, + change_log_url, + origin: origin_res, + version: candidate_version.clone(), + old_version: current_version.clone(), + priority: priority_res, + section: section_res, + }; + ret.push(info); } } - - let info = APTUpdateInfo { - package, - title: short_desc, - arch: view.arch(), - description: long_desc, - change_log_url, - origin: origin_res, - version: candidate_version, - old_version: current_version, - priority: priority_res, - section: section_res, - }; - ret.push(info); } } @@ -201,7 +201,7 @@ fn list_installed_apt_packages bool>(filter: F) )] /// List available APT updates fn apt_update_available(_param: Value) -> Result { - let ret = list_installed_apt_packages(|_pkg, cur_ver, can_ver| cur_ver != can_ver); + let ret = list_installed_apt_packages(|_pkg, cur_ver, can_ver, act_ver| cur_ver != can_ver && can_ver == act_ver); Ok(json!(ret)) } -- 2.20.1