librazor/transaction.c
changeset 384 35aa26867cfd
parent 368 ea743486ba6f
child 386 3d3fab314c4e
     1.1 --- a/librazor/transaction.c	Wed Jun 03 08:26:09 2009 +0100
     1.2 +++ b/librazor/transaction.c	Tue Aug 18 14:04:11 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);