1.1 --- a/librazor/transaction.c Wed Jun 03 08:26:09 2009 +0100
1.2 +++ b/librazor/transaction.c Sat Jul 04 11:11:59 2009 +0100
1.3 @@ -1,6 +1,7 @@
1.4 /*
1.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
1.6 * Copyright (C) 2008 Red Hat, Inc
1.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
1.8 *
1.9 * This program is free software; you can redistribute it and/or modify
1.10 * it under the terms of the GNU General Public License as published by
1.11 @@ -100,6 +101,7 @@
1.12 int package_count, errors;
1.13 struct transaction_set system, upstream;
1.14 int changes;
1.15 + struct razor_merger *merger;
1.16 };
1.17
1.18 static void
1.19 @@ -854,9 +856,8 @@
1.20 }
1.21
1.22 RAZOR_EXPORT struct razor_set *
1.23 -razor_transaction_finish(struct razor_transaction *trans)
1.24 +razor_transaction_commit(struct razor_transaction *trans)
1.25 {
1.26 - struct razor_merger *merger;
1.27 struct razor_package *u, *uend, *upkgs, *s, *send, *spkgs;
1.28 char *upool, *spool;
1.29 int cmp;
1.30 @@ -873,7 +874,8 @@
1.31 trans->upstream.set->packages.size;
1.32 upool = trans->upstream.set->string_pool.data;
1.33
1.34 - merger = razor_merger_create(trans->system.set, trans->upstream.set);
1.35 + trans->merger = razor_merger_create(trans->system.set,
1.36 + trans->upstream.set);
1.37 while (s < send || u < uend) {
1.38 if (s < send && u < uend)
1.39 cmp = strcmp(&spool[s->name], &upool[u->name]);
1.40 @@ -884,26 +886,46 @@
1.41
1.42 if (cmp < 0) {
1.43 if (trans->system.packages[s - spkgs] & TRANS_PACKAGE_PRESENT)
1.44 - razor_merger_add_package(merger, s);
1.45 + razor_merger_add_package(trans->merger, s);
1.46 s++;
1.47 } else if (cmp == 0) {
1.48 if (trans->system.packages[s - spkgs] & TRANS_PACKAGE_PRESENT)
1.49 - razor_merger_add_package(merger, s);
1.50 + razor_merger_add_package(trans->merger, s);
1.51 if (trans->upstream.packages[u - upkgs] & TRANS_PACKAGE_PRESENT)
1.52 - razor_merger_add_package(merger, u);
1.53 + razor_merger_add_package(trans->merger, u);
1.54
1.55 s++;
1.56 u++;
1.57 } else {
1.58 if (trans->upstream.packages[u - upkgs] & TRANS_PACKAGE_PRESENT)
1.59 - razor_merger_add_package(merger, u);
1.60 + razor_merger_add_package(trans->merger, u);
1.61 u++;
1.62 }
1.63 }
1.64
1.65 - razor_transaction_destroy(trans);
1.66 + return razor_merger_commit(trans->merger);
1.67 +}
1.68
1.69 - return razor_merger_finish(merger);
1.70 +RAZOR_EXPORT void
1.71 +razor_transaction_fixup_package(struct razor_transaction *trans,
1.72 + struct razor_package *package,
1.73 + struct razor_rpm *rpm)
1.74 +{
1.75 + const char *preunprog, *preun, *postunprog, *postun;
1.76 +
1.77 + razor_rpm_get_details(rpm,
1.78 + RAZOR_DETAIL_PREUNPROG, &preunprog,
1.79 + RAZOR_DETAIL_PREUN, &preun,
1.80 + RAZOR_DETAIL_POSTUNPROG, &postunprog,
1.81 + RAZOR_DETAIL_POSTUN, &postun,
1.82 + RAZOR_DETAIL_LAST);
1.83 +
1.84 + razor_merger_package_add_script(trans->merger, package,
1.85 + RAZOR_PROPERTY_PREUN,
1.86 + preunprog, preun);
1.87 + razor_merger_package_add_script(trans->merger, package,
1.88 + RAZOR_PROPERTY_POSTUN,
1.89 + postunprog, postun);
1.90 }
1.91
1.92 RAZOR_EXPORT void
1.93 @@ -911,6 +933,8 @@
1.94 {
1.95 assert (trans != NULL);
1.96
1.97 + if (trans->merger)
1.98 + razor_merger_destroy(trans->merger);
1.99 transaction_set_release(&trans->system);
1.100 transaction_set_release(&trans->upstream);
1.101 free(trans);