diff -r ea743486ba6f -r 4e261a14a6bd librazor/transaction.c --- a/librazor/transaction.c Wed Jun 03 08:26:09 2009 +0100 +++ b/librazor/transaction.c Thu Aug 13 07:14:51 2009 +0100 @@ -1,6 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc + * Copyright (C) 2009 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -100,6 +101,7 @@ int package_count, errors; struct transaction_set system, upstream; int changes; + struct razor_merger *merger; }; static void @@ -854,9 +856,8 @@ } RAZOR_EXPORT struct razor_set * -razor_transaction_finish(struct razor_transaction *trans) +razor_transaction_commit(struct razor_transaction *trans) { - struct razor_merger *merger; struct razor_package *u, *uend, *upkgs, *s, *send, *spkgs; char *upool, *spool; int cmp; @@ -873,7 +874,8 @@ trans->upstream.set->packages.size; upool = trans->upstream.set->string_pool.data; - merger = razor_merger_create(trans->system.set, trans->upstream.set); + trans->merger = razor_merger_create(trans->system.set, + trans->upstream.set); while (s < send || u < uend) { if (s < send && u < uend) cmp = strcmp(&spool[s->name], &upool[u->name]); @@ -884,26 +886,46 @@ if (cmp < 0) { if (trans->system.packages[s - spkgs] & TRANS_PACKAGE_PRESENT) - razor_merger_add_package(merger, s); + razor_merger_add_package(trans->merger, s); s++; } else if (cmp == 0) { if (trans->system.packages[s - spkgs] & TRANS_PACKAGE_PRESENT) - razor_merger_add_package(merger, s); + razor_merger_add_package(trans->merger, s); if (trans->upstream.packages[u - upkgs] & TRANS_PACKAGE_PRESENT) - razor_merger_add_package(merger, u); + razor_merger_add_package(trans->merger, u); s++; u++; } else { if (trans->upstream.packages[u - upkgs] & TRANS_PACKAGE_PRESENT) - razor_merger_add_package(merger, u); + razor_merger_add_package(trans->merger, u); u++; } } - razor_transaction_destroy(trans); + return razor_merger_commit(trans->merger); +} - return razor_merger_finish(merger); +RAZOR_EXPORT void +razor_transaction_fixup_package(struct razor_transaction *trans, + struct razor_package *package, + struct razor_rpm *rpm) +{ + const char *preunprog, *preun, *postunprog, *postun; + + razor_rpm_get_details(rpm, + RAZOR_DETAIL_PREUNPROG, &preunprog, + RAZOR_DETAIL_PREUN, &preun, + RAZOR_DETAIL_POSTUNPROG, &postunprog, + RAZOR_DETAIL_POSTUN, &postun, + RAZOR_DETAIL_LAST); + + razor_merger_package_add_script(trans->merger, package, + RAZOR_PROPERTY_PREUN, + preunprog, preun); + razor_merger_package_add_script(trans->merger, package, + RAZOR_PROPERTY_POSTUN, + postunprog, postun); } RAZOR_EXPORT void @@ -911,6 +933,8 @@ { assert (trans != NULL); + if (trans->merger) + razor_merger_destroy(trans->merger); transaction_set_release(&trans->system); transaction_set_release(&trans->upstream); free(trans);