Skip to content

Commit 15831a0

Browse files
authored
Update main.rs
1 parent 48a34fa commit 15831a0

File tree

1 file changed

+31
-40
lines changed

1 file changed

+31
-40
lines changed

src/main.rs

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ use std::io::{self, Write};
66
use std::thread;
77
use std::time::Duration;
88

9-
const APT_PATH: &str = "/usr/lib/HackerOS/apt";
9+
const DNF_PATH: &str = "/usr/lib/HackerOS/dnf";
1010
const VERSION: &str = "1.0.2";
1111

1212
fn print_help() {
1313
println!("{}", "HackerOS Package Manager".bold().green());
1414
println!("Version: {}", VERSION);
15-
println!("{}", "A simple and fast package management tool for Debian".italic());
15+
println!("{}", "A simple and fast package management tool for Fedora".italic());
1616
println!("\n{}", "Usage:".bold());
17-
println!(" hacker <command> [arguments]");
17+
println!(" hacker <command> [arguments]");
1818
println!("\n{}", "Available Commands:".bold());
1919
let commands = [
2020
("autoremove", "Remove unneeded packages"),
@@ -25,7 +25,6 @@ fn print_help() {
2525
("list-available", "List all available packages"),
2626
("list-upgradable", "List packages that can be upgraded"),
2727
("search", "Search for packages"),
28-
("clean", "Clean package cache"),
2928
("show", "Show package information"),
3029
("hold", "Prevent a package from being upgraded"),
3130
("unhold", "Allow a package to be upgraded"),
@@ -35,11 +34,11 @@ fn print_help() {
3534
("?", "Show this help message"),
3635
];
3736
for (cmd, desc) in commands.iter() {
38-
println!(" {:<16} {}", cmd.bold().cyan(), desc);
37+
println!(" {:<16} {}", cmd.bold().cyan(), desc);
3938
}
4039
println!("\n{}", "Note:".bold());
41-
println!(" Use 'hacker-update' for system updates and upgrades.");
42-
println!(" Run commands with '--help' for detailed usage (e.g., 'hacker install --help').");
40+
println!(" Use 'hacker-update' for system updates and upgrades.");
41+
println!(" Run commands with '--help' for detailed usage (e.g., 'hacker install --help').");
4342
}
4443

4544
fn print_progress(message: &str) {
@@ -53,23 +52,23 @@ fn print_progress(message: &str) {
5352
println!();
5453
}
5554

56-
fn execute_apt(args: Vec<&str>, use_sudo: bool) -> Result<ExitStatus, String> {
55+
fn execute_dnf(args: Vec<&str>, use_sudo: bool) -> Result<ExitStatus, String> {
5756
let mut command = if use_sudo {
5857
let mut cmd = Command::new("sudo");
59-
cmd.arg(APT_PATH);
58+
cmd.arg(DNF_PATH);
6059
cmd
6160
} else {
62-
Command::new(APT_PATH)
61+
Command::new(DNF_PATH)
6362
};
6463
let output = command
6564
.args(&args)
6665
.status()
67-
.map_err(|e| format!("Failed to execute apt: {}", e))?;
66+
.map_err(|e| format!("Failed to execute dnf: {}", e))?;
6867
Ok(output)
6968
}
7069

7170
fn can_run_without_sudo() -> bool {
72-
if let Ok(metadata) = std::fs::metadata(APT_PATH) {
71+
if let Ok(metadata) = std::fs::metadata(DNF_PATH) {
7372
let permissions = metadata.permissions();
7473
let mode = permissions.mode();
7574
(mode & 0o111) != 0 && (mode & 0o600) != 0
@@ -92,7 +91,7 @@ fn main() {
9291
match command.as_str() {
9392
"autoremove" => {
9493
print_progress("Running autoremove");
95-
match execute_apt(vec!["autoremove", "-y"], use_sudo) {
94+
match execute_dnf(vec!["autoremove", "-y"], use_sudo) {
9695
Ok(status) if status.success() => println!("{}", "Autoremove completed successfully".green()),
9796
Ok(_) => println!("{}", "Autoremove failed".red()),
9897
Err(e) => println!("{} {}", "Error:".red(), e),
@@ -105,10 +104,10 @@ fn main() {
105104
std::process::exit(1);
106105
}
107106
let packages = &args[2..];
108-
let mut apt_args = vec!["install", "-y"];
109-
apt_args.extend(packages.iter().map(|s| s.as_str()));
107+
let mut dnf_args = vec!["install", "-y"];
108+
dnf_args.extend(packages.iter().map(|s| s.as_str()));
110109
print_progress(&format!("Installing {} ", packages.join(" ")));
111-
match execute_apt(apt_args, use_sudo) {
110+
match execute_dnf(dnf_args, use_sudo) {
112111
Ok(status) if status.success() => println!("{}", format!("Package(s) {} installed successfully", packages.join(" ")).green()),
113112
Ok(_) => println!("{}", format!("Failed to install package(s) {}", packages.join(" ")).red()),
114113
Err(e) => println!("{} {}", "Error:".red(), e),
@@ -121,10 +120,10 @@ fn main() {
121120
std::process::exit(1);
122121
}
123122
let packages = &args[2..];
124-
let mut apt_args = vec!["remove", "-y"];
125-
apt_args.extend(packages.iter().map(|s| s.as_str()));
123+
let mut dnf_args = vec!["remove", "-y"];
124+
dnf_args.extend(packages.iter().map(|s| s.as_str()));
126125
print_progress(&format!("Removing {} ", packages.join(" ")));
127-
match execute_apt(apt_args, use_sudo) {
126+
match execute_dnf(dnf_args, use_sudo) {
128127
Ok(status) if status.success() => println!("{}", format!("Package(s) {} removed successfully", packages.join(" ")).green()),
129128
Ok(_) => println!("{}", format!("Failed to remove package(s) {}", packages.join(" ")).red()),
130129
Err(e) => println!("{} {}", "Error:".red(), e),
@@ -137,34 +136,34 @@ fn main() {
137136
std::process::exit(1);
138137
}
139138
let packages = &args[2..];
140-
let mut apt_args = vec!["purge", "-y"];
141-
apt_args.extend(packages.iter().map(|s| s.as_str()));
139+
let mut dnf_args = vec!["remove", "--remove-leaves", "-y"];
140+
dnf_args.extend(packages.iter().map(|s| s.as_str()));
142141
print_progress(&format!("Purging {} ", packages.join(" ")));
143-
match execute_apt(apt_args, use_sudo) {
142+
match execute_dnf(dnf_args, use_sudo) {
144143
Ok(status) if status.success() => println!("{}", format!("Package(s) {} purged successfully", packages.join(" ")).green()),
145144
Ok(_) => println!("{}", format!("Failed to purge package(s) {}", packages.join(" ")).red()),
146145
Err(e) => println!("{} {}", "Error:".red(), e),
147146
}
148147
}
149148
"list" => {
150149
print_progress("Listing installed packages");
151-
match execute_apt(vec!["list", "--installed"], use_sudo) {
150+
match execute_dnf(vec!["list", "installed"], use_sudo) {
152151
Ok(status) if status.success() => println!("{}", "Listed installed packages".green()),
153152
Ok(_) => println!("{}", "Failed to list packages".red()),
154153
Err(e) => println!("{} {}", "Error:".red(), e),
155154
}
156155
}
157156
"list-available" => {
158157
print_progress("Listing available packages");
159-
match execute_apt(vec!["list"], use_sudo) {
158+
match execute_dnf(vec!["list", "available"], use_sudo) {
160159
Ok(status) if status.success() => println!("{}", "Listed available packages".green()),
161160
Ok(_) => println!("{}", "Failed to list available packages".red()),
162161
Err(e) => println!("{} {}", "Error:".red(), e),
163162
}
164163
}
165164
"list-upgradable" => {
166165
print_progress("Listing upgradable packages");
167-
match execute_apt(vec!["list", "--upgradable"], use_sudo) {
166+
match execute_dnf(vec!["list", "upgrades"], use_sudo) {
168167
Ok(status) if status.success() => println!("{}", "Listed upgradable packages".green()),
169168
Ok(_) => println!("{}", "Failed to list upgradable packages".red()),
170169
Err(e) => println!("{} {}", "Error:".red(), e),
@@ -178,20 +177,12 @@ fn main() {
178177
}
179178
let term = &args[2];
180179
print_progress(&format!("Searching for {}", term));
181-
match execute_apt(vec!["search", term], use_sudo) {
180+
match execute_dnf(vec!["search", term], use_sudo) {
182181
Ok(status) if status.success() => println!("{}", "Search completed".green()),
183182
Ok(_) => println!("{}", "Search failed".red()),
184183
Err(e) => println!("{} {}", "Error:".red(), e),
185184
}
186185
}
187-
"clean" => {
188-
print_progress("Cleaning package cache");
189-
match execute_apt(vec!["clean"], use_sudo) {
190-
Ok(status) if status.success() => println!("{}", "Package cache cleaned successfully".green()),
191-
Ok(_) => println!("{}", "Failed to clean package cache".red()),
192-
Err(e) => println!("{} {}", "Error:".red(), e),
193-
}
194-
}
195186
"show" => {
196187
if args.len() < 3 {
197188
println!("{}", "Error: Package name required for show".red());
@@ -200,7 +191,7 @@ fn main() {
200191
}
201192
let package = &args[2];
202193
print_progress(&format!("Showing info for {}", package));
203-
match execute_apt(vec!["show", package], use_sudo) {
194+
match execute_dnf(vec!["info", package], use_sudo) {
204195
Ok(status) if status.success() => println!("{}", "Package information displayed".green()),
205196
Ok(_) => println!("{}", "Failed to display package information".red()),
206197
Err(e) => println!("{} {}", "Error:".red(), e),
@@ -214,7 +205,7 @@ fn main() {
214205
}
215206
let package = &args[2];
216207
print_progress(&format!("Holding package {}", package));
217-
match execute_apt(vec!["hold", package], use_sudo) {
208+
match execute_dnf(vec!["mark", "install", package], use_sudo) {
218209
Ok(status) if status.success() => println!("{}", format!("Package {} set to hold", package).green()),
219210
Ok(_) => println!("{}", format!("Failed to hold package {}", package).red()),
220211
Err(e) => println!("{} {}", "Error:".red(), e),
@@ -228,23 +219,23 @@ fn main() {
228219
}
229220
let package = &args[2];
230221
print_progress(&format!("Unholding package {}", package));
231-
match execute_apt(vec!["unhold", package], use_sudo) {
222+
match execute_dnf(vec!["mark", "remove", package], use_sudo) {
232223
Ok(status) if status.success() => println!("{}", format!("Package {} set to unhold", package).green()),
233224
Ok(_) => println!("{}", format!("Failed to unhold package {}", package).red()),
234225
Err(e) => println!("{} {}", "Error:".red(), e),
235226
}
236227
}
237228
"repolist" => {
238229
print_progress("Refreshing repository list");
239-
match execute_apt(vec!["-o", "Debug::pkgProblemResolver=yes", "update"], use_sudo) {
240-
Ok(status) if status.success() => println!("{}", "Repository list refreshed (use 'less /etc/apt/sources.list' for details)".green()),
230+
match execute_dnf(vec!["repolist"], use_sudo) {
231+
Ok(status) if status.success() => println!("{}", "Repository list refreshed".green()),
241232
Ok(_) => println!("{}", "Failed to refresh repository list".red()),
242233
Err(e) => println!("{} {}", "Error:".red(), e),
243234
}
244235
}
245236
"check" => {
246237
print_progress("Checking for broken dependencies");
247-
match execute_apt(vec!["check"], use_sudo) {
238+
match execute_dnf(vec!["check"], use_sudo) {
248239
Ok(status) if status.success() => println!("{}", "Dependency check completed successfully".green()),
249240
Ok(_) => println!("{}", "Dependency check found issues".red()),
250241
Err(e) => println!("{} {}", "Error:".red(), e),

0 commit comments

Comments
 (0)