From 4dd6c9222879198eaff8da464d9eb0ecf6313954 Mon Sep 17 00:00:00 2001 From: Aaron Griffin Date: Mon, 26 Feb 2007 08:43:02 +0000 Subject: * pacman hidden arguments: removed -Y and -D. -T is the only hidden arg now, to be used in place of -Y. Also, -D was rather silly, as it does mostly what -S does. * Cleaned up pacman_deptest - removed the goofy faketarget stuff (NEEDS testing still) * libalpm function renames --- src/pacman/deptest.c | 129 +++++++-------------------------------------------- 1 file changed, 17 insertions(+), 112 deletions(-) (limited to 'src/pacman/deptest.c') diff --git a/src/pacman/deptest.c b/src/pacman/deptest.c index 04faeaa0..f8bf513d 100644 --- a/src/pacman/deptest.c +++ b/src/pacman/deptest.c @@ -36,131 +36,36 @@ extern config_t *config; -/* TODO this function is fairly messy, with the obscure return codes and the odd - * 'dummy' packages and all these messy FREELISTs of synctargs - */ int pacman_deptest(alpm_list_t *targets) { - alpm_list_t *data, *i; - char *str; int retval = 0; + pmdb_t *local; + pmpkg_t *pkg; + alpm_list_t *i, *provides; if(targets == NULL) { return(0); } + + local = alpm_option_get_localdb(); - /* we create a transaction to hold a dummy package to be able to use - * deps checkings from alpm_trans_prepare() */ - if(alpm_trans_init(PM_TRANS_TYPE_ADD, 0, NULL, NULL, NULL) == -1) { - ERR(NL, "%s", alpm_strerror(pm_errno)); - if(pm_errno == PM_ERR_HANDLE_LOCK) { - MSG(NL, _(" if you're sure a package manager is not already running,\n" - " you can remove %s%s\n"), alpm_option_get_root(), PM_LOCK); - } - return(1); - } - - /* We use a hidden facility from alpm_trans_addtarget() to add a dummy - * target to the transaction (see the library code for details). - * It allows us to use alpm_trans_prepare() to check dependencies of the - * given target. - */ - str = (char *)malloc(strlen("name=dummy|version=1.0-1")+1); - if(str == NULL) { - ERR(NL, _("memory allocation failure\n")); - retval = 1; - goto cleanup; - } - strcpy(str, "name=dummy|version=1.0-1"); for(i = targets; i; i = alpm_list_next(i)) { - const char *targ = alpm_list_getdata(i); - str = (char *)realloc(str, strlen(str)+8+strlen(targ)+1); - strcat(str, "|depend="); - strcat(str, targ); - } - vprint(_("add target %s\n"), str); - if(alpm_trans_addtarget(str) == -1) { - FREE(str); - ERR(NL, _("could not add target (%s)\n"), alpm_strerror(pm_errno)); - retval = 1; - goto cleanup; - } - FREE(str); + const char *pkgname; + + pkgname = alpm_list_getdata(i); + /* find this package in the local DB */ + pkg = alpm_db_get_pkg(local, pkgname); - if(alpm_trans_prepare(&data) == -1) { - alpm_list_t *synctargs = NULL; - retval = 126; - /* return 126 = deps were missing, but successfully resolved - * return 127 = deps were missing, and failed to resolve; OR - * = deps were missing, but no resolution was attempted; OR - * = unresolvable conflicts were found - */ - switch(pm_errno) { - case PM_ERR_UNSATISFIED_DEPS: - for(i = data; i; i = alpm_list_next(i)) { - pmdepmissing_t *miss = alpm_list_getdata(i); - if(!config->op_d_resolve) { - MSG(NL, _("requires: %s"), alpm_dep_get_name(miss)); - switch(alpm_dep_get_mod(miss)) { - case PM_DEP_MOD_ANY: - break; - case PM_DEP_MOD_EQ: - MSG(CL, "=%s", alpm_dep_get_version(miss)); - break; - case PM_DEP_MOD_GE: - MSG(CL, ">=%s", alpm_dep_get_version(miss)); - break; - case PM_DEP_MOD_LE: - MSG(CL, "<=%s", alpm_dep_get_version(miss)); - break; - } - MSG(CL, "\n"); - } - synctargs = alpm_list_add(synctargs, strdup(alpm_dep_get_name(miss))); - } - alpm_list_free(data); - break; - case PM_ERR_CONFLICTING_DEPS: - /* we can't auto-resolve conflicts */ - for(i = data; i; i = alpm_list_next(i)) { - pmdepmissing_t *miss = alpm_list_getdata(i); - MSG(NL, _("conflict: %s"), alpm_dep_get_name(miss)); - } - retval = 127; - alpm_list_free(data); - break; - default: - retval = 127; - break; - } - - /* attempt to resolve missing dependencies */ - /* TODO: handle version comparators (eg, glibc>=2.2.5) */ - if(retval == 126 && synctargs != NULL) { - if(alpm_trans_release() == -1) { - ERR(NL, _("could not release transaction (%s)"), alpm_strerror(pm_errno)); - FREELIST(synctargs); - return(1); - } - if(!config->op_d_resolve || pacman_sync(synctargs) != 0) { - /* error (or -D not used) */ - retval = 127; + if(!pkg) { + /* not found, can we find anything that provides this in the local DB? */ + provides = alpm_db_whatprovides(local, pkgname); + if(!provides) { + /* nope, must be missing */ + MSG(NL, _("requires: %s"), pkgname); + retval = 1; } - FREELIST(synctargs); - return(retval); } - - FREELIST(synctargs); } - -cleanup: - if(!config->op_d_resolve) { - if(alpm_trans_release() == -1) { - ERR(NL, _("could not release transaction (%s)"), alpm_strerror(pm_errno)); - retval = 1; - } - } - return(retval); } -- cgit v1.2.3-54-g00ecf