Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=f2b8082250e3d71dc4ab0680676295d908848166
commit f2b8082250e3d71dc4ab0680676295d908848166 Author: Michel Hermier <herm...@frugalware.org> Date: Mon Nov 18 21:36:22 2013 +0100 libpacman: Make sync.c use pmtrans_t::syncpkgs. diff --git a/lib/libpacman/deps.c b/lib/libpacman/deps.c index dc9aa5c..5d86149 100644 --- a/lib/libpacman/deps.c +++ b/lib/libpacman/deps.c @@ -410,13 +410,16 @@ pmlist_t *_pacman_checkdeps(pmtrans_t *trans, unsigned char op, pmlist_t *packag if(!_pacman_list_is_strin((char *)j->data, packages)) { /* check if a package in trans->packages provides this package */ for(k=trans->packages; !found && k; k=k->next) { - pmpkg_t *spkg = NULL; - if(trans->type == PM_TRANS_TYPE_SYNC) { - pmsyncpkg_t *ps = k->data; - spkg = ps->pkg; - } else { - spkg = k->data; + pmpkg_t *spkg = k->data; + + if(spkg && _pacman_list_is_strin(tp->name, _pacman_pkg_getinfo(spkg, PM_PKG_PROVIDES))) { + found=1; + } } + for(k=trans->syncpkgs; !found && k; k=k->next) { + pmsyncpkg_t *ps = k->data; + pmpkg_t *spkg = ps->pkg; + if(spkg && _pacman_list_is_strin(tp->name, _pacman_pkg_getinfo(spkg, PM_PKG_PROVIDES))) { found=1; } diff --git a/lib/libpacman/pacman.c b/lib/libpacman/pacman.c index 0c58a55..1506aaa 100644 --- a/lib/libpacman/pacman.c +++ b/lib/libpacman/pacman.c @@ -730,7 +730,7 @@ void *pacman_trans_getinfo(unsigned char parm) case PM_TRANS_TYPE: data = (void *)(long)trans->type; break; case PM_TRANS_FLAGS: data = (void *)(long)trans->flags; break; case PM_TRANS_TARGETS: data = trans->targets; break; - case PM_TRANS_PACKAGES: data = trans->packages; break; + case PM_TRANS_PACKAGES: data = trans->packages ? trans->packages : trans->syncpkgs; break; case PM_TRANS_SYNCPKGS: data = trans->syncpkgs; break; default: data = NULL; diff --git a/lib/libpacman/sync.c b/lib/libpacman/sync.c index 0a62f38..c1488c4 100644 --- a/lib/libpacman/sync.c +++ b/lib/libpacman/sync.c @@ -191,7 +191,7 @@ int _pacman_sync_addtarget(pmtrans_t *trans, const char *name) RET_ERR(PM_ERR_MEMORY, -1); } _pacman_log(PM_LOG_FLOW2, _("adding target '%s' to the transaction set"), spkg->name); - trans->packages = _pacman_list_add(trans->packages, ps); + trans->syncpkgs = _pacman_list_add(trans->syncpkgs, ps); } return(0); @@ -242,12 +242,13 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) ASSERT(db_local != NULL, RET_ERR(PM_ERR_DB_NULL, -1)); ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); + ASSERT(trans->packages == NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); if(data) { *data = NULL; } - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; list = _pacman_list_add(list, ps->pkg); } @@ -258,7 +259,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) /* Resolve targets dependencies */ EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_START, NULL, NULL); _pacman_log(PM_LOG_FLOW1, _("resolving targets dependencies")); - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmpkg_t *spkg = ((pmsyncpkg_t *)i->data)->pkg; if(_pacman_resolvedeps(trans, spkg, list, trail, data) == -1) { /* pm_errno is set by resolvedeps */ @@ -276,27 +277,27 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) ret = -1; goto cleanup; } - trans->packages = _pacman_list_add(trans->packages, ps); + trans->syncpkgs = _pacman_list_add(trans->syncpkgs, ps); _pacman_log(PM_LOG_FLOW2, _("adding package %s-%s to the transaction targets"), spkg->name, spkg->version); } else { /* remove the original targets from the list if requested */ if((trans->flags & PM_TRANS_FLAG_DEPENDSONLY)) { /* they are just pointers so we don't have to free them */ - trans->packages = _pacman_list_remove(trans->packages, spkg, pkg_cmp, NULL); + trans->syncpkgs = _pacman_list_remove(trans->syncpkgs, spkg, pkg_cmp, NULL); } } } /* re-order w.r.t. dependencies */ k = l = NULL; - for(i=trans->packages; i; i=i->next) { + for(i=trans->syncpkgs; i; i=i->next) { pmsyncpkg_t *s = (pmsyncpkg_t*)i->data; k = _pacman_list_add(k, s->pkg); } m = _pacman_sortbydeps(k, PM_TRANS_TYPE_ADD); for(i=m; i; i=i->next) { - for(j=trans->packages; j; j=j->next) { + for(j=trans->syncpkgs; j; j=j->next) { pmsyncpkg_t *s = (pmsyncpkg_t*)j->data; if(s->pkg==i->data) { l = _pacman_list_add(l, s); @@ -305,8 +306,8 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) } FREELISTPTR(k); FREELISTPTR(m); - FREELISTPTR(trans->packages); - trans->packages = l; + FREELISTPTR(trans->syncpkgs); + trans->syncpkgs = l; EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_DONE, NULL, NULL); @@ -346,7 +347,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) /* check if the conflicting package is one that's about to be removed/replaced. * if so, then just ignore it */ - for(j = trans->packages; j && !found; j = j->next) { + for(j = trans->syncpkgs; j && !found; j = j->next) { ps = j->data; if(ps->type == PM_SYNC_TYPE_REPLACE) { if(_pacman_pkg_isin(miss->depend.name, ps->data)) { @@ -414,7 +415,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) pmsyncpkg_t *rsync = _pacman_trans_find(trans, rmpkg); pmsyncpkg_t *spkg = NULL; _pacman_log(PM_LOG_FLOW2, _("removing '%s' from target list"), rmpkg); - trans->packages = _pacman_list_remove(trans->packages, rsync, ptr_cmp, (void **)&spkg); + trans->syncpkgs = _pacman_list_remove(trans->syncpkgs, rsync, ptr_cmp, (void **)&spkg); FREESYNC(spkg); continue; } @@ -451,7 +452,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) /* remove it from the target list */ pmsyncpkg_t *spkg = NULL; _pacman_log(PM_LOG_FLOW2, _("removing '%s' from target list"), miss->depend.name); - trans->packages = _pacman_list_remove(trans->packages, rsync, ptr_cmp, (void **)&spkg); + trans->syncpkgs = _pacman_list_remove(trans->syncpkgs, rsync, ptr_cmp, (void **)&spkg); FREESYNC(spkg); } } else { @@ -511,7 +512,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) * package that's in our final (upgrade) list. */ /*EVENT(trans, PM_TRANS_EVT_CHECKDEPS_DONE, NULL, NULL);*/ - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; if(ps->type == PM_SYNC_TYPE_REPLACE) { for(j = ps->data; j; j = j->next) { @@ -547,7 +548,7 @@ int _pacman_sync_prepare(pmtrans_t *trans, pmlist_t **data) * provides the same thing. If none are found, then it truly * is an unresolvable conflict. */ pmlist_t *n, *o; - for(n = trans->packages; n && !pfound; n = n->next) { + for(n = trans->syncpkgs; n && !pfound; n = n->next) { pmsyncpkg_t *sp = n->data; for(o = sp->pkg->provides; o && !pfound; o = o->next) { if(!strcmp(m->data, o->data)) { @@ -636,12 +637,12 @@ int _pacman_sync_commit(pmtrans_t *trans, pmlist_t **data) goto error; } - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; if(ps->type == PM_SYNC_TYPE_REPLACE) { for(j = ps->data; j; j = j->next) { pmpkg_t *pkg = j->data; - if(!_pacman_pkg_isin(pkg->name, tr->packages)) { + if(!_pacman_pkg_isin(pkg->name, tr->syncpkgs)) { if(_pacman_trans_addtarget(tr, pkg->name) == -1) { goto error; } @@ -677,7 +678,7 @@ int _pacman_sync_commit(pmtrans_t *trans, pmlist_t **data) _pacman_log(PM_LOG_ERROR, _("could not initialize transaction")); goto error; } - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; pmpkg_t *spkg = ps->pkg; char str[PATH_MAX]; @@ -708,7 +709,7 @@ int _pacman_sync_commit(pmtrans_t *trans, pmlist_t **data) /* propagate replaced packages' requiredby fields to their new owners */ if(replaces) { _pacman_log(PM_LOG_FLOW1, _("updating database for replaced packages' dependencies")); - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; if(ps->type == PM_SYNC_TYPE_REPLACE) { pmpkg_t *new = _pacman_db_get_pkgfromcache(db_local, ps->pkg_name); @@ -783,7 +784,7 @@ int _pacman_trans_download_commit(pmtrans_t *trans, pmlist_t **data) struct stat buf; pmdb_t *current = i->data; - for(j = trans->packages; j; j = j->next) { + for(j = trans->syncpkgs; j; j = j->next) { pmsyncpkg_t *ps = j->data; pmpkg_t *spkg = ps->pkg; pmdb_t *dbs = spkg->data; @@ -849,7 +850,7 @@ int _pacman_trans_download_commit(pmtrans_t *trans, pmlist_t **data) if(!(trans->flags & PM_TRANS_FLAG_NOINTEGRITY)) { EVENT(trans, PM_TRANS_EVT_INTEGRITY_START, NULL, NULL); - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { pmsyncpkg_t *ps = i->data; pmpkg_t *spkg = ps->pkg; char str[PATH_MAX], pkgname[PATH_MAX]; diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c index 575394e..7428bdb 100644 --- a/lib/libpacman/trans.c +++ b/lib/libpacman/trans.c @@ -125,14 +125,13 @@ void _pacman_trans_fini(pmtrans_t *trans) ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1)); FREELIST(trans->targets); - if(trans->type == PM_TRANS_TYPE_SYNC) { + FREELISTPKGS(trans->packages); + { pmlist_t *i; - for(i = trans->packages; i; i = i->next) { + for(i = trans->syncpkgs; i; i = i->next) { FREESYNC(i->data); } - FREELIST(trans->packages); - } else { - FREELISTPKGS(trans->packages); + FREELIST(trans->syncpkgs); } FREELIST(trans->skiplist); FREELIST(trans->triggers); @@ -258,14 +257,14 @@ int _pacman_trans_compute_triggers(pmtrans_t *trans) /* NOTE: Not the most efficient way, but will do until we add some string hash. */ for(lp = trans->packages; lp; lp = lp->next) { - pmpkg_t *pkg; + pmpkg_t *pkg = lp->data; - if(trans->type != PM_TRANS_TYPE_SYNC) { - pkg = lp->data; - } else { - /* FIXME: might be incomplete */ - pkg = ((pmsyncpkg_t *)lp->data)->pkg; - } + trans->triggers = f_stringlist_append_stringlist(trans->triggers, pkg->triggers); + } + for(lp = trans->syncpkgs; lp; lp = lp->next) { + pmpkg_t *pkg = ((pmsyncpkg_t *)lp->data)->pkg; + + /* FIXME: might be incomplete */ trans->triggers = f_stringlist_append_stringlist(trans->triggers, pkg->triggers); } trans->triggers = _pacman_list_remove_dupes(trans->triggers); diff --git a/lib/libpacman/trans_sysupgrade.c b/lib/libpacman/trans_sysupgrade.c index 1ddf1ac..dca1e5b 100644 --- a/lib/libpacman/trans_sysupgrade.c +++ b/lib/libpacman/trans_sysupgrade.c @@ -119,7 +119,7 @@ int _pacman_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sy goto error; } ps->data = _pacman_list_add(NULL, dummy); - trans->packages = _pacman_list_add(trans->packages, ps); + trans->syncpkgs = _pacman_list_add(trans->syncpkgs, ps); } _pacman_log(PM_LOG_FLOW2, _("%s-%s elected for upgrade (to be replaced by %s-%s)"), lpkg->name, lpkg->version, spkg->name, spkg->version); @@ -150,7 +150,7 @@ int _pacman_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sy } /* we don't care about a to-be-replaced package's newer version */ - for(j = trans->packages; j && !replace; j=j->next) { + for(j = trans->syncpkgs; j && !replace; j=j->next) { ps = j->data; if(ps->type == PM_SYNC_TYPE_REPLACE) { if(_pacman_pkg_isin(spkg->name, ps->data)) { @@ -197,7 +197,7 @@ int _pacman_sync_sysupgrade(pmtrans_t *trans, pmdb_t *db_local, pmlist_t *dbs_sy FREEPKG(dummy); goto error; } - trans->packages = _pacman_list_add(trans->packages, ps); + trans->syncpkgs = _pacman_list_add(trans->syncpkgs, ps); } else { /* spkg->name is already in the packages list -- just ignore it */ } diff --git a/lib/libpacman/util.c b/lib/libpacman/util.c index 5c5cd36..4eb33fd 100644 --- a/lib/libpacman/util.c +++ b/lib/libpacman/util.c @@ -646,18 +646,15 @@ int _pacman_check_freespace(pmtrans_t *trans, pmlist_t **data) long long pkgsize=0, freespace; for(i = trans->packages; i; i = i->next) { - if(trans->type == PM_TRANS_TYPE_SYNC) - { - pmsyncpkg_t *ps = i->data; - if(ps->type != PM_SYNC_TYPE_REPLACE) { - pmpkg_t *pkg = ps->pkg; - pkgsize += pkg->usize; - } - } - else - { - pmpkg_t *pkg = i->data; - pkgsize += pkg->size; + pmpkg_t *pkg = i->data; + pkgsize += pkg->size; + } + for(i = trans->syncpkgs; i; i = i->next) { + pmsyncpkg_t *ps = i->data; + + if(ps->type != PM_SYNC_TYPE_REPLACE) { + pmpkg_t *pkg = ps->pkg; + pkgsize += pkg->usize; } } freespace = get_freespace(); _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git