@@ -6,15 +6,15 @@ use std::io::{self, Write};
66use std:: thread;
77use std:: time:: Duration ;
88
9- const APT_PATH : & str = "/usr/lib/HackerOS/apt " ;
9+ const DNF_PATH : & str = "/usr/lib/HackerOS/dnf " ;
1010const VERSION : & str = "1.0.2" ;
1111
1212fn 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
4544fn 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
7170fn 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