Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=efbbae48ea846b28ff8a0902d7c9d6c75b2e6073

commit efbbae48ea846b28ff8a0902d7c9d6c75b2e6073
Author: Michel Hermier <[email protected]>
Date:   Thu May 16 10:54:07 2013 +0200

libpacman: Move removal of PM_TRANS_FLAG_DEPENDSONLY transpkg to 
_pacman_trans_resolvedeps.

diff --git a/lib/libpacman/deps.c b/lib/libpacman/deps.c
index 1b8eb82..cdbeb49 100644
--- a/lib/libpacman/deps.c
+++ b/lib/libpacman/deps.c
@@ -522,6 +522,15 @@ void _pacman_removedeps(pmtrans_t *trans)
}
}

+static
+int _pacman_transpkg_remove_dependsonly (pmtrans_t *trans) {
+       FList *excludes = NULL;
+
+       f_list_exclude (&trans->packages, &excludes, 
(FDetectFunc)_pacman_transpkg_has_flags, (void*)PM_TRANS_FLAG_DEPENDSONLY);
+       f_list_delete (excludes, NULL, NULL);
+       return 0;
+}
+
/* populates *trans with packages that need to be installed to satisfy all
* dependencies (recursive) for syncpkg
*/
@@ -618,10 +627,12 @@ static
int _pacman_transpkg_resolvedeps (pmtrans_t *trans, pmtranspkg_t *transpkg, 
pmlist_t **data) {
pmlist_t *deps = NULL;

-       if (_pacman_transpkg_checkdeps (trans, transpkg, &deps) != 0) {
+       if (_pacman_transpkg_checkdeps (trans, transpkg, &deps) != 0 ||
+                       _pacman_resolvedeps (trans, deps, data) != 0) {
+               /* pm_errno is allready set */
return -1;
}
-       return _pacman_resolvedeps (trans, deps, data);
+       return 0;
}

int _pacman_trans_resolvedeps (pmtrans_t *trans, pmlist_t **data) {
@@ -631,11 +642,13 @@ int _pacman_trans_resolvedeps (pmtrans_t *trans, pmlist_t 
**data) {
return(-1);
}

-       if (_pacman_trans_checkdeps (trans, &deps) != 0) {
-               /* pm_errno is set by checkdeps */
+       if (_pacman_trans_checkdeps (trans, &deps) != 0 ||
+                       _pacman_resolvedeps (trans, deps, data) != 0 ||
+                       _pacman_transpkg_remove_dependsonly (trans) != 0) {
+               /* pm_errno is allready set */
return -1;
}
-       return _pacman_resolvedeps (trans, deps, data);
+       return 0;
}

/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c
index 0ef4d58..e18699b 100644
--- a/lib/libpacman/trans.c
+++ b/lib/libpacman/trans.c
@@ -96,6 +96,10 @@ int __pacman_transpkg_detect_name (pmtranspkg_t *transpkg, 
const char *package)
return strcmp (__pacman_transpkg_name (transpkg), package);
}

+int _pacman_transpkg_has_flags (pmtranspkg_t *transpkg, int flagsmask) {
+       return (transpkg->flags & flagsmask) == flagsmask ? 0 : 1;
+}
+
static
int check_oldcache(pmtrans_t *trans)
{
@@ -587,18 +591,6 @@ int _pacman_sync_prepare (pmtrans_t *trans, pmlist_t 
**data)
goto cleanup;
}

-               for (i = trans->_packages; i; i = i->next) {
-                       /* add the dependencies found by resolvedeps to the 
transaction set */
-                       pmpkg_t *spkg = i->data;
-                       if(__pacman_trans_get_trans_pkg(trans, spkg->name) != 
NULL) {
-                               /* 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);
-                               }
-                       }
-               }
-
_pacman_sortbydeps(trans, PM_TRANS_TYPE_ADD);

EVENT(trans, PM_TRANS_EVT_RESOLVEDEPS_DONE, NULL, NULL);
diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h
index 20335bc..ce8831c 100644
--- a/lib/libpacman/trans.h
+++ b/lib/libpacman/trans.h
@@ -121,6 +121,7 @@ void __pacman_trans_pkg_delete (pmsyncpkg_t *pkg);
const char *__pacman_transpkg_name (pmtranspkg_t *transpkg);
int __pacman_transpkg_cmp (pmtranspkg_t *transpkg1, pmtranspkg_t *transpkg2);
int __pacman_transpkg_detect_name (pmtranspkg_t *transpkg, const char *package);
+int _pacman_transpkg_has_flags (pmtranspkg_t *transpkg, int flagsmask);

/* Implementation details */
int __pacman_trans_init(pmtrans_t *trans, pmtranstype_t type, unsigned int 
flags, pmtrans_cbs_t cbs);
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to