From 1fc8add2c2edacb73b34f6aad1e9dea8dfd5525d Mon Sep 17 00:00:00 2001 From: innocentzero Date: Fri, 1 Mar 2024 22:07:26 +0530 Subject: [PATCH 01/12] feat(fedora): Add fedora as a backend Note- This is currently heavily experimental and not tested thoroughly. Signed-off-by: innocentzero --- .../pacdef_core/src/backend/actual/fedora.rs | 138 ++++++++++++++++++ crates/pacdef_core/src/backend/actual/mod.rs | 2 + crates/pacdef_core/src/backend/mod.rs | 2 + 3 files changed, 142 insertions(+) create mode 100644 crates/pacdef_core/src/backend/actual/fedora.rs diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs new file mode 100644 index 0000000..195032e --- /dev/null +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -0,0 +1,138 @@ +use core::panic; +use std::collections::HashSet; +use std::process::{Command, ExitStatus}; + +use anyhow::{Context, Result}; +use regex::Regex; + +use crate::backend::backend_trait::{Backend, Switches, Text}; +use crate::backend::macros::impl_backend_constants; +use crate::{Group, Package}; + +#[derive(Debug, Clone)] +pub struct Fedora { + pub(crate) packages: HashSet, +} + +const BINARY: Text = "dnf"; +const SECTION: Text = "fedora"; + +const SWITCHES_INFO: Switches = &["list", "--installed"]; +const SWITCHES_INSTALL: Switches = &["install"]; +const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; +const SWITCHES_NOCONFIRM: Switches = &["--assumeyes"]; +const SWITCHES_REMOVE: Switches = &["remove"]; + +const SUPPORTS_AS_DEPENDENCY: bool = true; + +impl Backend for Fedora { + impl_backend_constants!(); + + fn get_all_installed_packages(&self) -> Result> { + let re_str = r"^[0-9A-Za-z_-]*."; + let re = Regex::new(re_str)?; + + let mut cmd = Command::new(self.get_binary()); + cmd.args(self.get_switches_info()); + let output = String::from_utf8(cmd.output()?.stdout)?; + + let packages: HashSet = output + .lines() + .map(|line| { + let result = re + .find( + line.split_whitespace() + .next() + .expect("First word cannot be empty!"), + ) + .expect("Not a valid package name!"); + let mut result = result.as_str().to_string(); + result.pop(); + result.into() + }) + .collect(); + Ok(packages) + } + + fn get_explicitly_installed_packages(&self) -> Result> { + let re_str = r"^(([A-Za-z_]*[0-9]*)-)*"; + let re = Regex::new(re_str)?; + + let mut cmd = Command::new(self.get_binary()); + cmd.args(&["history", "userinstalled"]); + let output = String::from_utf8(cmd.output()?.stdout)?; + + let packages: HashSet = output + .lines() + .skip(1) + .map(|line| { + let word = re.find(line).expect("Not a valid package name"); + let mut word = word.as_str().to_string(); + word.pop(); + let pack = word.rsplit_once('-').map_or(word.clone(), |(pack, term)| { + let mut value = true; + for i in term.chars() { + if !i.is_numeric() { + value = false; + break; + } + } + if !value { + pack.to_string() + "-" + term + } else { + pack.to_string() + } + }); + pack.into() + }) + .collect(); + Ok(packages) + } + + /// Install the specified packages. + fn install_packages(&self, packages: &[Package], noconfirm: bool) -> Result { + let mut cmd = Command::new("sudo"); + cmd.arg(self.get_binary()); + cmd.args(self.get_switches_install()); + + if noconfirm { + cmd.args(self.get_switches_noconfirm()); + } + + for p in packages { + cmd.arg(format!("{p}")); + } + + cmd.status() + .with_context(|| format!("running command {cmd:?}")) + } + + fn remove_packages(&self, packages: &[Package], noconfirm: bool) -> Result { + let mut cmd = Command::new("sudo"); + cmd.arg(self.get_binary()); + cmd.args(self.get_switches_remove()); + + if noconfirm { + cmd.args(self.get_switches_noconfirm()); + } + + for p in packages { + cmd.arg(format!("{p}")); + } + + cmd.status() + .with_context(|| format!("running command [{cmd:?}]")) + } + + fn make_dependency(&self, _: &[Package]) -> Result { + panic!("Not supported by the package manager!") + } +} + +impl Fedora { + pub fn new() -> Self { + Fedora { + packages: HashSet::new(), + } + } +} diff --git a/crates/pacdef_core/src/backend/actual/mod.rs b/crates/pacdef_core/src/backend/actual/mod.rs index ea93f66..a652467 100644 --- a/crates/pacdef_core/src/backend/actual/mod.rs +++ b/crates/pacdef_core/src/backend/actual/mod.rs @@ -2,6 +2,8 @@ pub mod arch; #[cfg(feature = "debian")] pub mod debian; +#[cfg(feature = "fedora")] +pub mod fedora; pub mod flatpak; pub mod python; pub mod rust; diff --git a/crates/pacdef_core/src/backend/mod.rs b/crates/pacdef_core/src/backend/mod.rs index ab67304..cf6d1fc 100644 --- a/crates/pacdef_core/src/backend/mod.rs +++ b/crates/pacdef_core/src/backend/mod.rs @@ -18,6 +18,8 @@ pub enum Backends { #[cfg(feature = "debian")] Debian, Flatpak, + #[cfg(feature = "fedora")] + Fedora, Python, Rust, Rustup, From 24f1dce8666fc12eb0977862480ec6e66f45d2e8 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Sat, 6 Apr 2024 17:51:09 +0530 Subject: [PATCH 02/12] feat(fedora): Use dnf repoquery to query packages Use dnf repoquery to query packages for better interop and more parsable output. Signed-off-by: innocentzero --- .../pacdef_core/src/backend/actual/fedora.rs | 65 +++++-------------- 1 file changed, 16 insertions(+), 49 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index 195032e..e0e37a0 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -3,7 +3,6 @@ use std::collections::HashSet; use std::process::{Command, ExitStatus}; use anyhow::{Context, Result}; -use regex::Regex; use crate::backend::backend_trait::{Backend, Switches, Text}; use crate::backend::macros::impl_backend_constants; @@ -17,7 +16,12 @@ pub struct Fedora { const BINARY: Text = "dnf"; const SECTION: Text = "fedora"; -const SWITCHES_INFO: Switches = &["list", "--installed"]; +const SWITCHES_INFO: Switches = &[ + "repoquery", + "--installed", + "--queryformat", + "%{reponame}/%{name}", +]; const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; const SWITCHES_NOCONFIRM: Switches = &["--assumeyes"]; @@ -29,63 +33,26 @@ impl Backend for Fedora { impl_backend_constants!(); fn get_all_installed_packages(&self) -> Result> { - let re_str = r"^[0-9A-Za-z_-]*."; - let re = Regex::new(re_str)?; - let mut cmd = Command::new(self.get_binary()); cmd.args(self.get_switches_info()); let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output - .lines() - .map(|line| { - let result = re - .find( - line.split_whitespace() - .next() - .expect("First word cannot be empty!"), - ) - .expect("Not a valid package name!"); - let mut result = result.as_str().to_string(); - result.pop(); - result.into() - }) - .collect(); + let packages: HashSet = output.lines().map(|package| package.into()).collect(); Ok(packages) } fn get_explicitly_installed_packages(&self) -> Result> { - let re_str = r"^(([A-Za-z_]*[0-9]*)-)*"; - let re = Regex::new(re_str)?; - let mut cmd = Command::new(self.get_binary()); - cmd.args(&["history", "userinstalled"]); + cmd.args([ + "repoquery", + "--userinstalled", + "--queryformat", + "%{reponame}/%{name}", + ]); + let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output - .lines() - .skip(1) - .map(|line| { - let word = re.find(line).expect("Not a valid package name"); - let mut word = word.as_str().to_string(); - word.pop(); - let pack = word.rsplit_once('-').map_or(word.clone(), |(pack, term)| { - let mut value = true; - for i in term.chars() { - if !i.is_numeric() { - value = false; - break; - } - } - if !value { - pack.to_string() + "-" + term - } else { - pack.to_string() - } - }); - pack.into() - }) - .collect(); + let packages: HashSet = output.lines().map(|package| package.into()).collect(); Ok(packages) } @@ -131,7 +98,7 @@ impl Backend for Fedora { impl Fedora { pub fn new() -> Self { - Fedora { + Self { packages: HashSet::new(), } } From 39999908b04e56fb448d77e9d9b1dce6ac09adcf Mon Sep 17 00:00:00 2001 From: innocentzero Date: Thu, 11 Apr 2024 21:14:49 +0530 Subject: [PATCH 03/12] refact(fedora): Changes in Backend trait Signed-off-by: innocentzero --- crates/pacdef_core/src/backend/actual/fedora.rs | 17 ++++++++--------- crates/pacdef_core/src/backend/actual/mod.rs | 1 - crates/pacdef_core/src/backend/mod.rs | 1 - 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index e0e37a0..d249030 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -1,11 +1,12 @@ use core::panic; use std::collections::HashSet; -use std::process::{Command, ExitStatus}; +use std::process::Command; -use anyhow::{Context, Result}; +use anyhow::Result; use crate::backend::backend_trait::{Backend, Switches, Text}; use crate::backend::macros::impl_backend_constants; +use crate::cmd::run_external_command; use crate::{Group, Package}; #[derive(Debug, Clone)] @@ -57,7 +58,7 @@ impl Backend for Fedora { } /// Install the specified packages. - fn install_packages(&self, packages: &[Package], noconfirm: bool) -> Result { + fn install_packages(&self, packages: &[Package], noconfirm: bool) -> Result<()> { let mut cmd = Command::new("sudo"); cmd.arg(self.get_binary()); cmd.args(self.get_switches_install()); @@ -70,11 +71,10 @@ impl Backend for Fedora { cmd.arg(format!("{p}")); } - cmd.status() - .with_context(|| format!("running command {cmd:?}")) + run_external_command(cmd) } - fn remove_packages(&self, packages: &[Package], noconfirm: bool) -> Result { + fn remove_packages(&self, packages: &[Package], noconfirm: bool) -> Result<()> { let mut cmd = Command::new("sudo"); cmd.arg(self.get_binary()); cmd.args(self.get_switches_remove()); @@ -87,11 +87,10 @@ impl Backend for Fedora { cmd.arg(format!("{p}")); } - cmd.status() - .with_context(|| format!("running command [{cmd:?}]")) + run_external_command(cmd) } - fn make_dependency(&self, _: &[Package]) -> Result { + fn make_dependency(&self, _: &[Package]) -> Result<()> { panic!("Not supported by the package manager!") } } diff --git a/crates/pacdef_core/src/backend/actual/mod.rs b/crates/pacdef_core/src/backend/actual/mod.rs index a652467..1fdc10b 100644 --- a/crates/pacdef_core/src/backend/actual/mod.rs +++ b/crates/pacdef_core/src/backend/actual/mod.rs @@ -2,7 +2,6 @@ pub mod arch; #[cfg(feature = "debian")] pub mod debian; -#[cfg(feature = "fedora")] pub mod fedora; pub mod flatpak; pub mod python; diff --git a/crates/pacdef_core/src/backend/mod.rs b/crates/pacdef_core/src/backend/mod.rs index cf6d1fc..f581785 100644 --- a/crates/pacdef_core/src/backend/mod.rs +++ b/crates/pacdef_core/src/backend/mod.rs @@ -18,7 +18,6 @@ pub enum Backends { #[cfg(feature = "debian")] Debian, Flatpak, - #[cfg(feature = "fedora")] Fedora, Python, Rust, From dc14a43f9097bafae71c8d0f30bf5bee70960304 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Thu, 11 Apr 2024 22:12:17 +0530 Subject: [PATCH 04/12] fix(fedora): Package install, update and query Signed-off-by: innocentzero --- crates/pacdef_core/src/backend/actual/fedora.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index d249030..e8323e2 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -21,7 +21,7 @@ const SWITCHES_INFO: Switches = &[ "repoquery", "--installed", "--queryformat", - "%{reponame}/%{name}", + "%{from_repo}/%{name}", ]; const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; @@ -48,7 +48,7 @@ impl Backend for Fedora { "repoquery", "--userinstalled", "--queryformat", - "%{reponame}/%{name}", + "%{from_repo}/%{name}", ]); let output = String::from_utf8(cmd.output()?.stdout)?; @@ -68,9 +68,15 @@ impl Backend for Fedora { } for p in packages { - cmd.arg(format!("{p}")); + cmd.arg(&p.name); + if let Some(repo) = p.repo.as_ref() { + cmd.args(&["--repo", repo]); + } } + cmd.args(&["--repo", "updates"]); + cmd.args(&["--repo", "fedora"]); + run_external_command(cmd) } @@ -84,9 +90,8 @@ impl Backend for Fedora { } for p in packages { - cmd.arg(format!("{p}")); + cmd.arg(&p.name); } - run_external_command(cmd) } From 2ad5ef4cf5b7bd9f78aaf7a385b254e004d9cb73 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Thu, 11 Apr 2024 22:13:04 +0530 Subject: [PATCH 05/12] refact(fedora): Package creation from output Packages created now strip the repo if it is one of the default one on fedora Signed-off-by: innocentzero --- .../pacdef_core/src/backend/actual/fedora.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index e8323e2..24e30ed 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -38,7 +38,7 @@ impl Backend for Fedora { cmd.args(self.get_switches_info()); let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output.lines().map(|package| package.into()).collect(); + let packages: HashSet = output.lines().map(create_package).collect(); Ok(packages) } @@ -53,7 +53,7 @@ impl Backend for Fedora { let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output.lines().map(|package| package.into()).collect(); + let packages: HashSet = output.lines().map(create_package).collect(); Ok(packages) } @@ -107,3 +107,18 @@ impl Fedora { } } } + +fn create_package(package: &str) -> Package { + if (package.contains("koji") + || package.contains("fedora") + || package.contains("updates") + || package.contains("anaconda") + || package.contains('@')) + && !package.contains("copr") + { + let package = package.split('/').nth(1).expect("Cannot be empty!"); + package.into() + } else { + package.into() + } +} From f8a4671f09b4fd0cae0559187d7461101872469b Mon Sep 17 00:00:00 2001 From: innocentzero Date: Thu, 11 Apr 2024 22:18:14 +0530 Subject: [PATCH 06/12] fix(fedora): Fix linter warnings Signed-off-by: innocentzero --- crates/pacdef_core/src/backend/actual/fedora.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index 24e30ed..9804360 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -70,12 +70,12 @@ impl Backend for Fedora { for p in packages { cmd.arg(&p.name); if let Some(repo) = p.repo.as_ref() { - cmd.args(&["--repo", repo]); + cmd.args(["--repo", repo]); } } - cmd.args(&["--repo", "updates"]); - cmd.args(&["--repo", "fedora"]); + cmd.args(["--repo", "updates"]); + cmd.args(["--repo", "fedora"]); run_external_command(cmd) } From 1ba6b365a3558cff885c6181f16d28862a0c4159 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Thu, 11 Apr 2024 22:48:14 +0530 Subject: [PATCH 07/12] style(fedora): Comments and empty lines Signed-off-by: innocentzero --- crates/pacdef_core/src/backend/actual/fedora.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index 9804360..a14ec83 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -36,9 +36,10 @@ impl Backend for Fedora { fn get_all_installed_packages(&self) -> Result> { let mut cmd = Command::new(self.get_binary()); cmd.args(self.get_switches_info()); - let output = String::from_utf8(cmd.output()?.stdout)?; + let output = String::from_utf8(cmd.output()?.stdout)?; let packages: HashSet = output.lines().map(create_package).collect(); + Ok(packages) } @@ -52,8 +53,8 @@ impl Backend for Fedora { ]); let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output.lines().map(create_package).collect(); + Ok(packages) } @@ -74,6 +75,7 @@ impl Backend for Fedora { } } + // add these two repositories as these are needed for many dependencies cmd.args(["--repo", "updates"]); cmd.args(["--repo", "fedora"]); @@ -92,6 +94,7 @@ impl Backend for Fedora { for p in packages { cmd.arg(&p.name); } + run_external_command(cmd) } From 027a27f7e115551e891b1faa63ba4b1ee8d7e991 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Fri, 12 Apr 2024 17:30:39 +0530 Subject: [PATCH 08/12] style(fedora): Implicit types and module consts Use type inferencing for variables and move default repo filter to a constant. Signed-off-by: innocentzero --- .../pacdef_core/src/backend/actual/fedora.rs | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index a14ec83..dd460c4 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -18,17 +18,21 @@ const BINARY: Text = "dnf"; const SECTION: Text = "fedora"; const SWITCHES_INFO: Switches = &[ - "repoquery", - "--installed", - "--queryformat", - "%{from_repo}/%{name}", -]; +const SWITCHES_INFO: Switches = &["info"]; const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; const SWITCHES_NOCONFIRM: Switches = &["--assumeyes"]; const SWITCHES_REMOVE: Switches = &["remove"]; + "repoquery", + "--installed", + "--queryformat", + "%{from_repo}/%{name}", +]; + const SUPPORTS_AS_DEPENDENCY: bool = true; +/// fill stuff here +const DEFAULT_REPOS: [&str; 5] = ["koji", "fedora", "updates", "anaconda", "@"]; impl Backend for Fedora { impl_backend_constants!(); @@ -38,7 +42,7 @@ impl Backend for Fedora { cmd.args(self.get_switches_info()); let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output.lines().map(create_package).collect(); + let packages = output.lines().map(create_package).collect(); Ok(packages) } @@ -53,7 +57,7 @@ impl Backend for Fedora { ]); let output = String::from_utf8(cmd.output()?.stdout)?; - let packages: HashSet = output.lines().map(create_package).collect(); + let packages = output.lines().map(create_package).collect(); Ok(packages) } @@ -112,13 +116,7 @@ impl Fedora { } fn create_package(package: &str) -> Package { - if (package.contains("koji") - || package.contains("fedora") - || package.contains("updates") - || package.contains("anaconda") - || package.contains('@')) - && !package.contains("copr") - { + if DEFAULT_REPOS.iter().any(|repo| package.contains(repo)) && !package.contains("copr") { let package = package.split('/').nth(1).expect("Cannot be empty!"); package.into() } else { From 4fe2b0597d6c75d46cbeeac85b248950bf5ac644 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Fri, 12 Apr 2024 17:34:04 +0530 Subject: [PATCH 09/12] refact(fedora): Move fetch flags to constants Move the flags required for get_installed_packages and get_user_installed_packages to separate module constants. Signed-off-by: innocentzero --- .../pacdef_core/src/backend/actual/fedora.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index dd460c4..0881e91 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -17,13 +17,21 @@ pub struct Fedora { const BINARY: Text = "dnf"; const SECTION: Text = "fedora"; -const SWITCHES_INFO: Switches = &[ const SWITCHES_INFO: Switches = &["info"]; const SWITCHES_INSTALL: Switches = &["install"]; const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; const SWITCHES_NOCONFIRM: Switches = &["--assumeyes"]; const SWITCHES_REMOVE: Switches = &["remove"]; + +const SWITCHES_FETCH_USER: Switches = &[ + "repoquery", + "--userinstalled", + "--queryformat", + "%{from_repo}/%{name}", +]; + +const SWITCHES_FETCH_GLOBAL: Switches = &[ "repoquery", "--installed", "--queryformat", @@ -39,7 +47,7 @@ impl Backend for Fedora { fn get_all_installed_packages(&self) -> Result> { let mut cmd = Command::new(self.get_binary()); - cmd.args(self.get_switches_info()); + cmd.args(SWITCHES_FETCH_GLOBAL); let output = String::from_utf8(cmd.output()?.stdout)?; let packages = output.lines().map(create_package).collect(); @@ -49,12 +57,7 @@ impl Backend for Fedora { fn get_explicitly_installed_packages(&self) -> Result> { let mut cmd = Command::new(self.get_binary()); - cmd.args([ - "repoquery", - "--userinstalled", - "--queryformat", - "%{from_repo}/%{name}", - ]); + cmd.args(SWITCHES_FETCH_USER); let output = String::from_utf8(cmd.output()?.stdout)?; let packages = output.lines().map(create_package).collect(); From b3263b02a765603e392168d5725b0613126d5836 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Fri, 12 Apr 2024 17:48:28 +0530 Subject: [PATCH 10/12] fix(fedora): AS_DEPENDENCY and package_info Set SUPPORTS_AS_DEPENDENCY and rewrite show_package_info for dnf Signed-off-by: innocentzero --- crates/pacdef_core/src/backend/actual/fedora.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index 0881e91..0074065 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -23,6 +23,7 @@ const SWITCHES_MAKE_DEPENDENCY: Switches = &[]; const SWITCHES_NOCONFIRM: Switches = &["--assumeyes"]; const SWITCHES_REMOVE: Switches = &["remove"]; +const SUPPORTS_AS_DEPENDENCY: bool = false; const SWITCHES_FETCH_USER: Switches = &[ "repoquery", @@ -38,7 +39,6 @@ const SWITCHES_FETCH_GLOBAL: Switches = &[ "%{from_repo}/%{name}", ]; -const SUPPORTS_AS_DEPENDENCY: bool = true; /// fill stuff here const DEFAULT_REPOS: [&str; 5] = ["koji", "fedora", "updates", "anaconda", "@"]; @@ -105,6 +105,14 @@ impl Backend for Fedora { run_external_command(cmd) } + fn show_package_info(&self, package: &Package) -> Result<()> { + let mut cmd = Command::new(self.get_binary()); + cmd.args(self.get_switches_info()); + cmd.arg(&package.name); + + run_external_command(cmd) + } + fn make_dependency(&self, _: &[Package]) -> Result<()> { panic!("Not supported by the package manager!") } From bcefc4969aa4e40d8c5c158a2b7a26d73fc47f37 Mon Sep 17 00:00:00 2001 From: innocentzero Date: Fri, 12 Apr 2024 17:54:48 +0530 Subject: [PATCH 11/12] docs(fedora): Switches and show_package_info Add docstrings for the query switches and show_package_info functions. Signed-off-by: innocentzero --- crates/pacdef_core/src/backend/actual/fedora.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index 0074065..c88915a 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -25,6 +25,8 @@ const SWITCHES_REMOVE: Switches = &["remove"]; const SUPPORTS_AS_DEPENDENCY: bool = false; +/// These switches are responsible for +/// getting the packages explicitly installed by the user const SWITCHES_FETCH_USER: Switches = &[ "repoquery", "--userinstalled", @@ -32,6 +34,8 @@ const SWITCHES_FETCH_USER: Switches = &[ "%{from_repo}/%{name}", ]; +/// These switches are responsible for +/// getting all the packages installed on the system const SWITCHES_FETCH_GLOBAL: Switches = &[ "repoquery", "--installed", @@ -39,7 +43,8 @@ const SWITCHES_FETCH_GLOBAL: Switches = &[ "%{from_repo}/%{name}", ]; -/// fill stuff here +/// These repositories are ignored when storing the packages +/// as these are present by default on any sane fedora system const DEFAULT_REPOS: [&str; 5] = ["koji", "fedora", "updates", "anaconda", "@"]; impl Backend for Fedora { @@ -89,6 +94,7 @@ impl Backend for Fedora { run_external_command(cmd) } + /// Show information from package manager for package. fn remove_packages(&self, packages: &[Package], noconfirm: bool) -> Result<()> { let mut cmd = Command::new("sudo"); cmd.arg(self.get_binary()); From 9c5537e44f05925de2edf0f5c40e59bcf6d50c8d Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Fri, 12 Apr 2024 14:35:28 +0200 Subject: [PATCH 12/12] refact(fedora): remove core::panic --- crates/pacdef_core/src/backend/actual/fedora.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/pacdef_core/src/backend/actual/fedora.rs b/crates/pacdef_core/src/backend/actual/fedora.rs index c88915a..2a7adf1 100644 --- a/crates/pacdef_core/src/backend/actual/fedora.rs +++ b/crates/pacdef_core/src/backend/actual/fedora.rs @@ -1,4 +1,3 @@ -use core::panic; use std::collections::HashSet; use std::process::Command;