diff --git a/Makefile b/Makefile index fe3b7da..38e712f 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ test: $(BINDIR)/$(NAME) clean: rm $(ODIR)/*.o -clear: clean +clear: rm $(BINDIR)/$(NAME) install: $(BINDIR)/$(NAME) diff --git a/commands/apt_fetch b/commands/apt_fetch index b4e3286..8d037c1 100644 --- a/commands/apt_fetch +++ b/commands/apt_fetch @@ -1,2 +1,2 @@ -sudo apt update >/dev/null 2>&1 || exit +sudo apt update >/dev/null || return $? apt list --upgradable 2>/dev/null | tail -n +2 | awk -F "/" '{print $1" "$2}' | tr -d ']' | awk '{print $1" "$7" -> "$3}' diff --git a/commands/pacman_fetch b/commands/pacman_fetch index b2969a3..5d5ca9a 100644 --- a/commands/pacman_fetch +++ b/commands/pacman_fetch @@ -2,5 +2,6 @@ CHECKUPDATES_DB="${TMPDIR:-/tmp}/checkup-db-${USER}/" DBPath="$(pacman-conf DBPath)" mkdir -p "$CHECKUPDATES_DB" ln -sf "${DBPath}/local" "$CHECKUPDATES_DB" > /dev/null 2>&1 -fakeroot pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null >/dev/null 2>&1 +fakeroot pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null >/dev/null || return $? pacman -Qu --dbpath "$CHECKUPDATES_DB/" 2> /dev/null | grep -v '\[.*\]' +return 0 diff --git a/include/commands.h b/include/commands.h index f810b06..da5fdaf 100644 --- a/include/commands.h +++ b/include/commands.h @@ -2,8 +2,8 @@ #define COMMANDS_H // pacman -#define PACMAN_FETCH_COMMAND "CHECKUPDATES_DB=\"${TMPDIR:-/tmp}/checkup-db-${USER}/\"\nDBPath=\"$(pacman-conf DBPath)\"\nmkdir -p \"$CHECKUPDATES_DB\"\nln -sf \"${DBPath}/local\" \"$CHECKUPDATES_DB\" > /dev/null 2>&1\nfakeroot pacman -Sy --dbpath \"$CHECKUPDATES_DB\" --logfile /dev/null >/dev/null 2>&1\npacman -Qu --dbpath \"$CHECKUPDATES_DB/\" 2> /dev/null | grep -v '\\[.*\\]'" -#define AUR_FETCH_COMMAND "yay -Qau 2>/dev/null" +#define PACMAN_FETCH_COMMAND "CHECKUPDATES_DB=\"${TMPDIR:-/tmp}/checkup-db-${USER}/\"\nDBPath=\"$(pacman-conf DBPath)\"\nmkdir -p \"$CHECKUPDATES_DB\"\nln -sf \"${DBPath}/local\" \"$CHECKUPDATES_DB\" > /dev/null 2>&1\nfakeroot pacman -Sy --dbpath \"$CHECKUPDATES_DB\" --logfile /dev/null >/dev/null || return $?\npacman -Qu --dbpath \"$CHECKUPDATES_DB/\" 2> /dev/null | grep -v '\\[.*\\]'\nreturn 0" +#define AUR_FETCH_COMMAND "yay -Qau" #define PACMAN_UPDATE_COMMAND "sudo pacman -Syu" #define PACMAN_UPDATE_COMMAND_NOCONFIRM "sudo pacman -Syu --noconfirm" @@ -17,7 +17,7 @@ #define PACMAN_LOCAL_SIZE_CUT_COMMAND " |grep 'Installed Size'|cut -d':' -f2|tr -d ' '|cut -d'i' -f1 | tr -d 'B'|numfmt --from=iec|tr -d '\n'" // apt/dpkg -#define APT_FETCH_COMMAND "sudo apt update >/dev/null 2>&1 || exit\napt list --upgradable 2>/dev/null | tail -n +2 | awk -F \"/\" '{print $1\" \"$2}' | tr -d ']' | awk '{print $1\" \"$7\" -> \"$3}'" +#define APT_FETCH_COMMAND "sudo apt update >/dev/null || return $?\napt list --upgradable 2>/dev/null | tail -n +2 | awk -F \"/\" '{print $1\" \"$2}' | tr -d ']' | awk '{print $1\" \"$7\" -> \"$3}'" #define APT_UPDATE_COMMAND "sudo apt upgrade" #define APT_UPDATE_COMMAND_NOCONFIRM "echo y | sudo apt upgrade" diff --git a/include/fetch.hpp b/include/fetch.hpp index 74ee8df..19a140b 100644 --- a/include/fetch.hpp +++ b/include/fetch.hpp @@ -4,8 +4,8 @@ #include "repos.hpp" //functions -void fetch_update(repo_update* r, const std::string& name, const std::string& command); +int fetch_update(repo_update* r, const std::string& name, const std::string& command); -void import_sizes(repo_update* ru, const char* ext_info_command, const char* loc_info_command, const char* ext_cut_command, const char* loc_cut_command); +int import_sizes(repo_update* ru, const char* ext_info_command, const char* loc_info_command, const char* ext_cut_command, const char* loc_cut_command); #endif //FETCH_HPP diff --git a/include/package_man.hpp b/include/package_man.hpp index e8b650f..4802d4b 100644 --- a/include/package_man.hpp +++ b/include/package_man.hpp @@ -12,8 +12,8 @@ extern package_manager cur_pkgman; // functions bool exec_find(const std::string& name); -void pacman_process(bool yay); +int pacman_process(bool yay); -void apt_process(); +int apt_process(); #endif //PACKAGE_MAN_HPP diff --git a/src/fetch.cpp b/src/fetch.cpp index 1645933..5bd600c 100644 --- a/src/fetch.cpp +++ b/src/fetch.cpp @@ -10,54 +10,57 @@ #include "commands.h" //functions -void fetch_update(repo_update* r, const std::string& name, const std::string& command) +int fetch_update(repo_update* r, const std::string& name, const std::string& command) { - r->packages.clear(); - r->name=name; - r->name_max_length=0; - r->vcur_max_length=0; - r->vnew_max_length=0; - std::string str=ztd::sh(command); + r->packages.clear(); + r->name=name; + r->name_max_length=0; + r->vcur_max_length=0; + r->vnew_max_length=0; + std::pair cp = ztd::shp(command); + if(cp.second != 0) + return cp.second; + std::string str=cp.first; - unsigned long int i=0,j=0; - while(i r->name_max_length) - r->name_max_length = pkg.name.size(); - //end name + unsigned long int i=0,j=0; + while(i r->vcur_max_length) - r->vcur_max_length = pkg.current_version.size(); - //end current version + pkg.name = str.substr(j,i-j); + if(pkg.name.size() > r->name_max_length) + r->name_max_length = pkg.name.size(); + //end name + i++; + //current version + j=i; + while( str[i]!=' ' ) i++; - //skip arrow - while( str[i]!=' ' ) - i++; - //end arrow + pkg.current_version = str.substr(j,i-j); + if(pkg.current_version.size() > r->vcur_max_length) + r->vcur_max_length = pkg.current_version.size(); + //end current version + i++; + //skip arrow + while( str[i]!=' ' ) i++; - //new version - j=i; - while( str[i]!='\n' ) - i++; - pkg.new_version = str.substr(j,i-j); - if(pkg.new_version.size() > r->vnew_max_length) - r->vnew_max_length = pkg.new_version.size(); - //end new version + //end arrow + i++; + //new version + j=i; + while( str[i]!='\n' ) i++; - j=i; - r->packages.push_back(pkg); - } - + pkg.new_version = str.substr(j,i-j); + if(pkg.new_version.size() > r->vnew_max_length) + r->vnew_max_length = pkg.new_version.size(); + //end new version + i++; + j=i; + r->packages.push_back(pkg); + } + return 0; } @@ -84,7 +87,7 @@ void get_loc_size(package_update* pkg, const char* info_command, const char* cut pkg->current_install_size = 0; } -void import_sizes(repo_update* ru, const char* ext_info_command, const char* loc_info_command, const char* ext_cut_command, const char* loc_cut_command) +int import_sizes(repo_update* ru, const char* ext_info_command, const char* loc_info_command, const char* ext_cut_command, const char* loc_cut_command) { const unsigned int n=ru->packages.size(); #pragma omp parallel for @@ -105,4 +108,5 @@ void import_sizes(repo_update* ru, const char* ext_info_command, const char* loc ru->current_install_size += pkg.current_install_size; } ru->net_size = (long int) ru->new_install_size - (long int) ru->current_install_size; + return 0; } diff --git a/src/main.cpp b/src/main.cpp index 928917a..4b8066e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,11 +5,6 @@ #include "options.hpp" #include "package_man.hpp" -long unsigned int new_download_size=0; -long unsigned int new_install_size=0; -long unsigned int current_install_size=0; -long int net_size=0; - int main(int argc, char* argv[]) { //option process start @@ -26,7 +21,7 @@ int main(int argc, char* argv[]) return 1; } - if( !combine_target ) //no target -> all + if( !combine_target ) //no target -> all targets { opt_repo = true; opt_aur = true; @@ -36,7 +31,7 @@ int main(int argc, char* argv[]) opt_pall = true; } - if ( opt_pall ) //all -> list + sizes + if ( opt_pall ) //pall -> list + sizes { opt_plist=true; opt_psizes=true; @@ -77,12 +72,12 @@ int main(int argc, char* argv[]) switch(cur_pkgman) { case pacman : - pacman_process(exec_find("yay")); break; + return pacman_process(exec_find("yay")); break; case apt : - apt_process(); break; - default : std::cerr << "Unsupported package manager\n"; break; + return apt_process(); break; + default : + std::cerr << "Unsupported package manager\n"; + return 1; + break; } - - - return 0; } diff --git a/src/package_man.cpp b/src/package_man.cpp index 8ed26b5..c01c3bb 100644 --- a/src/package_man.cpp +++ b/src/package_man.cpp @@ -34,12 +34,14 @@ void repo_print_process(repo_update& ru, ztd::color cl, bool print_size=true) } } -void pacman_process(bool yay) +int pacman_process(bool yay) { + int r=0, r2=0; + if(!exec_find("pacman")) { std::cerr << "pacman not found\n"; - return; + return 1; } //fetch if(combine_fetch) @@ -49,14 +51,18 @@ void pacman_process(bool yay) #pragma omp section { if(opt_repo) - fetch_update(&repo, "REPO", PACMAN_FETCH_COMMAND); + r = fetch_update(&repo, "REPO", PACMAN_FETCH_COMMAND); } #pragma omp section { if(opt_aur && yay) - fetch_update(&aur, "AUR", AUR_FETCH_COMMAND); + r2 = fetch_update(&aur, "AUR", AUR_FETCH_COMMAND); } } + if(r!=0) + return r; + if(r2!=0) + return r2; } //process @@ -65,8 +71,10 @@ void pacman_process(bool yay) //size fetch if( combine_size ) { - import_sizes(&repo, PACMAN_EXT_INFO_COMMAND, PACMAN_LOCAL_INFO_COMMAND, PACMAN_EXT_SIZE_CUT_COMMAND, PACMAN_LOCAL_SIZE_CUT_COMMAND); + r = import_sizes(&repo, PACMAN_EXT_INFO_COMMAND, PACMAN_LOCAL_INFO_COMMAND, PACMAN_EXT_SIZE_CUT_COMMAND, PACMAN_LOCAL_SIZE_CUT_COMMAND); } + if(r!=0) + return r; repo_print_process(repo, ztd::color::b_white); @@ -79,9 +87,12 @@ void pacman_process(bool yay) { signal(SIGINT, SIG_IGN); if(opt_noconfirm) - system(PACMAN_UPDATE_COMMAND_NOCONFIRM); + r = ztd::shr(PACMAN_UPDATE_COMMAND_NOCONFIRM); else - system(PACMAN_UPDATE_COMMAND); + r = ztd::shr(PACMAN_UPDATE_COMMAND); + + if(r!=0) + return r; } @@ -99,11 +110,15 @@ void pacman_process(bool yay) { signal(SIGINT, SIG_IGN); if(opt_noconfirm) - system(AUR_UPDATE_COMMAND_NOCONFIRM); + r = ztd::shr(AUR_UPDATE_COMMAND_NOCONFIRM, true); else - system(AUR_UPDATE_COMMAND); + r = ztd::shr(AUR_UPDATE_COMMAND, true); + + if(r!=0) + return r; } } + return 0; } std::string apt_getrepo() @@ -120,31 +135,39 @@ std::string apt_getrepo() return "UNKNOWN"; } -void apt_process() +int apt_process() { + int r=0; + if(!exec_find("apt")) { std::cerr << "apt not found\n"; - return; + return 1; } if(!exec_find("apt-cache")) { std::cerr << "apt-cache not found\n"; - return; + return 1; } if(!exec_find("dpkg")) { std::cerr << "dpkg not found\n"; - return; + return 1; } - if(combine_fetch) + + if( combine_fetch ) { - fetch_update(&repo, apt_getrepo(), APT_FETCH_COMMAND); + r = fetch_update(&repo, apt_getrepo(), APT_FETCH_COMMAND); } + if(r!=0) + return r; + if( combine_size ) { - import_sizes(&repo, APT_EXT_INFO_COMMAND, APT_LOCAL_INFO_COMMAND, APT_EXT_SIZE_CUT_COMMAND, APT_LOCAL_SIZE_CUT_COMMAND); + r = import_sizes(&repo, APT_EXT_INFO_COMMAND, APT_LOCAL_INFO_COMMAND, APT_EXT_SIZE_CUT_COMMAND, APT_LOCAL_SIZE_CUT_COMMAND); } + if(r!=0) + return r; repo_print_process(repo, ztd::color::b_white); @@ -157,8 +180,12 @@ void apt_process() { signal(SIGINT, SIG_IGN); if(opt_noconfirm) - system(APT_UPDATE_COMMAND_NOCONFIRM); + r = ztd::shr(APT_UPDATE_COMMAND_NOCONFIRM, true); else - system(APT_UPDATE_COMMAND); + r = ztd::shr(APT_UPDATE_COMMAND, true); + + if(r!=0) + return r; } + return 0; }