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

commit 6a48394d017ce4f61ea1d749f72a6b7afa1f9c08
Author: Michel Hermier <[email protected]>
Date:   Sat Nov 2 13:40:35 2013 +0100

libpacman: Add trigger support to transaction. Add 
_pacman_trans_compute_triggers.

diff --git a/lib/libpacman/trans.c b/lib/libpacman/trans.c
index 6b87a60..5667915 100644
--- a/lib/libpacman/trans.c
+++ b/lib/libpacman/trans.c
@@ -90,8 +90,9 @@ void _pacman_trans_free(pmtrans_t *trans)
} else {
FREELISTPKGS(trans->packages);
}
-
FREELIST(trans->skiplist);
+       FREELIST(trans->pretriggers);
+       FREELIST(trans->posttriggers);

_pacman_trans_fini(trans);
free(trans);
@@ -190,6 +191,27 @@ int _pacman_trans_set_state(pmtrans_t *trans, int 
new_state)
return(0);
}

+int _pacman_trans_compute_triggers(pmtrans_t *trans)
+{
+       pmlist_t *lp;
+
+       /* Sanity checks */
+       ASSERT(trans != NULL, RET_ERR(PM_ERR_TRANS_NULL, -1));
+
+       /* 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 = lp->data;
+
+               trans->pretriggers = 
_pacman_stringlist_append_stringlist(trans->pretriggers, pkg->pretriggers);
+               trans->posttriggers = 
_pacman_stringlist_append_stringlist(trans->posttriggers, pkg->posttriggers);
+       }
+       trans->pretriggers = _pacman_list_remove_dupes(trans->pretriggers);
+       trans->posttriggers = _pacman_list_remove_dupes(trans->posttriggers);
+       /* FIXME: Sort the triggers to have a predictable execution order */
+
+       return 0;
+}
+
int _pacman_trans_prepare(pmtrans_t *trans, pmlist_t **data)
{
/* Sanity checks */
diff --git a/lib/libpacman/trans.h b/lib/libpacman/trans.h
index 7141ea5..be28a25 100644
--- a/lib/libpacman/trans.h
+++ b/lib/libpacman/trans.h
@@ -62,6 +62,8 @@ struct __pmtrans_t {
pmlist_t *targets;     /* pmlist_t of (char *) */
pmlist_t *packages;    /* pmlist_t of (pmpkg_t *) or (pmsyncpkg_t *) */
pmlist_t *skiplist;    /* pmlist_t of (char *) */
+       pmlist_t *pretriggers; /* pmlist_t of (char *) */
+       pmlist_t *posttriggers;/* pmlist_t of (char *) */
pmtrans_cbs_t cbs;
};

@@ -106,6 +108,8 @@ int _pacman_trans_commit(pmtrans_t *trans, pmlist_t **data);

int _pacman_trans_sysupgrade(pmtrans_t *trans);

+int _pacman_trans_compute_triggers(pmtrans_t *trans);
+
#endif /* _PACMAN_TRANS_H */

/* vim: set ts=2 sw=2 noet: */
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to