diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pacman/remove.c | 33 | ||||
-rw-r--r-- | src/pacman/sync.c | 3 |
2 files changed, 32 insertions, 4 deletions
diff --git a/src/pacman/remove.c b/src/pacman/remove.c index 82d1c384..fb02e242 100644 --- a/src/pacman/remove.c +++ b/src/pacman/remove.c @@ -31,6 +31,36 @@ #include "util.h" #include "conf.h" +static int remove_target(char *target) +{ + pmpkg_t *info; + pmdb_t *db_local = alpm_option_get_localdb(); + alpm_list_t *p; + + if((info = alpm_db_get_pkg(db_local, target)) != NULL) { + if(alpm_remove_pkg(info) == -1) { + pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n", target, alpm_strerrorlast()); + return(-1); + } + return(0); + } + + /* fallback to group */ + pmgrp_t *grp = alpm_db_readgrp(db_local, target); + if(grp == NULL) { + pm_fprintf(stderr, PM_LOG_ERROR, "'%s': target not found\n", target); + return(-1); + } + for(p = alpm_grp_get_pkgs(grp); p; p = alpm_list_next(p)) { + pmpkg_t *pkg = alpm_list_getdata(p); + if(alpm_remove_pkg(pkg) == -1) { + pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n", target, alpm_strerrorlast()); + return(-1); + } + } + return(0); +} + /** * @brief Remove a specified list of packages. * @@ -62,8 +92,7 @@ int pacman_remove(alpm_list_t *targets) } else { targ = target; } - if(alpm_remove_target(targ) == -1) { - pm_fprintf(stderr, PM_LOG_ERROR, "'%s': %s\n", targ, alpm_strerrorlast()); + if(remove_target(targ) == -1) { retval = 1; goto cleanup; } diff --git a/src/pacman/sync.c b/src/pacman/sync.c index deda77d4..63e5766e 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -636,8 +636,7 @@ static int process_group(alpm_list_t *dbs, char *group) printf(_(":: There are %d members in group %s:\n"), count, group); select_display(pkgs); - select_question(count, - _("Which ones do you want to install?")); + select_question(count); char *array = malloc(count); memset(array, 1, count); int n = 0; |