2024-12-07 17:15:52 +01:00
|
|
|
use crate::shell::Data;
|
2024-11-27 20:38:37 +01:00
|
|
|
use std::io::stderr;
|
|
|
|
|
use std::process::Command;
|
|
|
|
|
use std::process::Stdio;
|
|
|
|
|
|
2024-12-07 17:14:47 +01:00
|
|
|
pub fn get_package_manager(data: &mut Data) -> Option<String> {
|
2024-12-06 23:37:28 +01:00
|
|
|
let package_managers = vec!["pacman"];
|
2024-11-27 20:38:37 +01:00
|
|
|
|
|
|
|
|
for package_manager in package_managers {
|
2024-12-07 17:14:47 +01:00
|
|
|
if data.has_executable(package_manager) {
|
2024-11-27 20:38:37 +01:00
|
|
|
return Some(package_manager.to_string());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-07 21:48:54 +01:00
|
|
|
pub fn get_packages(data: &mut Data, package_manager: &str, executable: &str) -> Option<Vec<String>> {
|
|
|
|
|
let shell = &data.shell.clone();
|
2024-11-27 20:38:37 +01:00
|
|
|
match package_manager {
|
|
|
|
|
"pacman" => {
|
2024-12-07 21:48:54 +01:00
|
|
|
let result = if data.has_executable("pkgfile") {
|
|
|
|
|
Command::new(shell)
|
|
|
|
|
.arg("-c")
|
|
|
|
|
.arg(format!("pkgfile -b {}", executable))
|
|
|
|
|
.output()
|
|
|
|
|
.expect("failed to execute process")
|
|
|
|
|
} else {
|
|
|
|
|
Command::new(shell)
|
|
|
|
|
.arg("-c")
|
|
|
|
|
.arg(format!("pacman -Fq /usr/bin/{}", executable))
|
|
|
|
|
.output()
|
|
|
|
|
.expect("failed to execute process")
|
|
|
|
|
};
|
2024-11-27 20:38:37 +01:00
|
|
|
if result.status.success() {
|
|
|
|
|
let output = String::from_utf8_lossy(&result.stdout)
|
|
|
|
|
.lines()
|
|
|
|
|
.map(|line| line.split_whitespace().next().unwrap().to_string())
|
|
|
|
|
.collect();
|
|
|
|
|
Some(output)
|
|
|
|
|
} else {
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
_ => unreachable!("Unsupported package manager"),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn install_package(shell: &str, package_manager: &str, package: &str) -> bool {
|
|
|
|
|
match package_manager {
|
|
|
|
|
"pacman" => Command::new(shell)
|
|
|
|
|
.arg("-c")
|
|
|
|
|
.arg(format!("sudo pacman -S {}", package))
|
|
|
|
|
.stdout(stderr())
|
|
|
|
|
.stderr(Stdio::inherit())
|
|
|
|
|
.spawn()
|
|
|
|
|
.expect("failed to execute process")
|
|
|
|
|
.wait()
|
|
|
|
|
.unwrap()
|
|
|
|
|
.success(),
|
|
|
|
|
_ => unreachable!("Unsupported package manager"),
|
|
|
|
|
}
|
|
|
|
|
}
|