remove.c: refactor into functions
Pulled two loops out of _alpm_remove_prepare and gave them their own functions. Signed-off-by: K. Piche <kevin@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
db4258c1fd
commit
2d991a25ae
1 changed files with 59 additions and 40 deletions
|
@ -81,6 +81,60 @@ int _alpm_remove_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void remove_prepare_cascade(pmtrans_t *trans, pmdb_t *db,
|
||||||
|
alpm_list_t *lp)
|
||||||
|
{
|
||||||
|
ALPM_LOG_FUNC;
|
||||||
|
|
||||||
|
while(lp) {
|
||||||
|
alpm_list_t *i;
|
||||||
|
for(i = lp; i; i = i->next) {
|
||||||
|
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
||||||
|
pmpkg_t *info = _alpm_db_get_pkgfromcache(db, miss->target);
|
||||||
|
if(info) {
|
||||||
|
if(!_alpm_pkg_find(alpm_pkg_get_name(info), trans->packages)) {
|
||||||
|
_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n",
|
||||||
|
alpm_pkg_get_name(info));
|
||||||
|
trans->packages = alpm_list_add(trans->packages, _alpm_pkg_dup(info));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"),
|
||||||
|
miss->target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||||
|
alpm_list_free(lp);
|
||||||
|
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void remove_prepare_keep_needed(pmtrans_t *trans, pmdb_t *db,
|
||||||
|
alpm_list_t *lp)
|
||||||
|
{
|
||||||
|
ALPM_LOG_FUNC;
|
||||||
|
|
||||||
|
/* Remove needed packages (which break dependencies) from the target list */
|
||||||
|
while(lp != NULL) {
|
||||||
|
alpm_list_t *i;
|
||||||
|
for(i = lp; i; i = i->next) {
|
||||||
|
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
||||||
|
void *vpkg;
|
||||||
|
pmpkg_t *pkg;
|
||||||
|
trans->packages = alpm_list_remove(trans->packages, miss->causingpkg,
|
||||||
|
_alpm_pkgname_pkg_cmp, &vpkg);
|
||||||
|
pkg = vpkg;
|
||||||
|
if(pkg) {
|
||||||
|
_alpm_log(PM_LOG_WARNING, "removing %s from the target-list\n",
|
||||||
|
alpm_pkg_get_name(pkg));
|
||||||
|
_alpm_pkg_free(pkg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
||||||
|
alpm_list_free(lp);
|
||||||
|
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||||
{
|
{
|
||||||
alpm_list_t *lp;
|
alpm_list_t *lp;
|
||||||
|
@ -101,48 +155,13 @@ int _alpm_remove_prepare(pmtrans_t *trans, pmdb_t *db, alpm_list_t **data)
|
||||||
_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n");
|
_alpm_log(PM_LOG_DEBUG, "looking for unsatisfied dependencies\n");
|
||||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
||||||
if(lp != NULL) {
|
if(lp != NULL) {
|
||||||
|
|
||||||
if(trans->flags & PM_TRANS_FLAG_CASCADE) {
|
if(trans->flags & PM_TRANS_FLAG_CASCADE) {
|
||||||
while(lp) {
|
remove_prepare_cascade(trans, db, lp);
|
||||||
alpm_list_t *i;
|
|
||||||
for(i = lp; i; i = i->next) {
|
|
||||||
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
|
||||||
pmpkg_t *info = _alpm_db_get_pkgfromcache(db, miss->target);
|
|
||||||
if(info) {
|
|
||||||
if(!_alpm_pkg_find(alpm_pkg_get_name(info), trans->packages)) {
|
|
||||||
_alpm_log(PM_LOG_DEBUG, "pulling %s in the targets list\n",
|
|
||||||
alpm_pkg_get_name(info));
|
|
||||||
trans->packages = alpm_list_add(trans->packages, _alpm_pkg_dup(info));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_alpm_log(PM_LOG_ERROR, _("could not find %s in database -- skipping\n"),
|
|
||||||
miss->target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
|
||||||
alpm_list_free(lp);
|
|
||||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
|
||||||
}
|
|
||||||
} else if (trans->flags & PM_TRANS_FLAG_UNNEEDED) {
|
} else if (trans->flags & PM_TRANS_FLAG_UNNEEDED) {
|
||||||
/* Remove needed packages (which break dependencies) from the target list */
|
/* Remove needed packages (which would break dependencies)
|
||||||
while(lp != NULL) {
|
* from the target list */
|
||||||
alpm_list_t *i;
|
remove_prepare_keep_needed(trans, db, lp);
|
||||||
for(i = lp; i; i = i->next) {
|
|
||||||
pmdepmissing_t *miss = (pmdepmissing_t *)i->data;
|
|
||||||
void *vpkg;
|
|
||||||
pmpkg_t *pkg;
|
|
||||||
trans->packages = alpm_list_remove(trans->packages, miss->causingpkg,
|
|
||||||
_alpm_pkgname_pkg_cmp, &vpkg);
|
|
||||||
pkg = vpkg;
|
|
||||||
if(pkg) {
|
|
||||||
_alpm_log(PM_LOG_WARNING, "removing %s from the target-list\n",
|
|
||||||
alpm_pkg_get_name(pkg));
|
|
||||||
_alpm_pkg_free(pkg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
alpm_list_free_inner(lp, (alpm_list_fn_free)_alpm_depmiss_free);
|
|
||||||
alpm_list_free(lp);
|
|
||||||
lp = alpm_checkdeps(db, 1, trans->packages, NULL);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if(data) {
|
if(data) {
|
||||||
*data = lp;
|
*data = lp;
|
||||||
|
|
Loading…
Add table
Reference in a new issue