Skip to content

Commit 757609b

Browse files
authored
Update main.rs
1 parent f539da4 commit 757609b

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

src/main.rs

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,98 @@
1+
use std::process::{Command, ExitStatus};
2+
use std::env;
13

4+
const DNF_PATH: &str = "/usr/lib/HackerOS/dnf";
5+
6+
fn print_help() {
7+
println!("hacker: A simple package management tool");
8+
println!("Usage: hacker <command> [arguments]");
9+
println!("\nAvailable commands:");
10+
println!(" autoremove Remove unneeded packages");
11+
println!(" install <package> Install a package");
12+
println!(" remove <package> Remove a package");
13+
println!(" list List installed packages");
14+
println!(" search <term> Search for packages");
15+
println!(" ? Show this help message");
16+
println!("\nNote: Use 'hacker-update' for updates and upgrades.");
17+
}
18+
19+
fn execute_dnf(args: Vec<&str>) -> Result<ExitStatus, String> {
20+
let output = Command::new(DNF_PATH)
21+
.args(&args)
22+
.status()
23+
.map_err(|e| format!("Failed to execute dnf: {}", e))?;
24+
Ok(output)
25+
}
26+
27+
fn main() {
28+
let args: Vec<String> = env::args().collect();
29+
30+
if args.len() < 2 {
31+
println!("Error: No command provided");
32+
print_help();
33+
std::process::exit(1);
34+
}
35+
36+
let command = &args[1];
37+
38+
match command.as_str() {
39+
"autoremove" => {
40+
match execute_dnf(vec!["autoremove", "-y"]) {
41+
Ok(status) if status.success() => println!("Autoremove completed successfully"),
42+
Ok(_) => println!("Autoremove failed"),
43+
Err(e) => println!("Error: {}", e),
44+
}
45+
}
46+
"install" => {
47+
if args.len() < 3 {
48+
println!("Error: Package name required for install");
49+
std::process::exit(1);
50+
}
51+
let package = &args[2];
52+
match execute_dnf(vec!["install", "-y", package]) {
53+
Ok(status) if status.success() => println!("Package {} installed successfully", package),
54+
Ok(_) => println!("Failed to install package {}", package),
55+
Err(e) => println!("Error: {}", e),
56+
}
57+
}
58+
"remove" => {
59+
if args.len() < 3 {
60+
println!("Error: Package name required for remove");
61+
std::process::exit(1);
62+
}
63+
let package = &args[2];
64+
match execute_dnf(vec!["remove", "-y", package]) {
65+
Ok(status) if status.success() => println!("Package {} removed successfully", package),
66+
Ok(_) => println!("Failed to remove package {}", package),
67+
Err(e) => println!("Error: {}", e),
68+
}
69+
}
70+
"list" => {
71+
match execute_dnf(vec!["list", "installed"]) {
72+
Ok(status) if status.success() => println!("Listed installed packages"),
73+
Ok(_) => println!("Failed to list packages"),
74+
Err(e) => println!("Error: {}", e),
75+
}
76+
}
77+
"search" => {
78+
if args.len() < 3 {
79+
println!("Error: Search term required");
80+
std::process::exit(1);
81+
}
82+
let term = &args[2];
83+
match execute_dnf(vec!["search", term]) {
84+
Ok(status) if status.success() => println!("Search completed"),
85+
Ok(_) => println!("Search failed"),
86+
Err(e) => println!("Error: {}", e),
87+
}
88+
}
89+
"?" => {
90+
print_help();
91+
}
92+
_ => {
93+
println!("Error: Unknown command '{}'", command);
94+
print_help();
95+
std::process::exit(1);
96+
}
97+
}
98+
}

0 commit comments

Comments
 (0)