1.1 --- a/librazor/merger.c Wed Apr 28 11:59:02 2010 +0100
1.2 +++ b/librazor/merger.c Sat Feb 11 23:50:26 2012 +0000
1.3 @@ -1,7 +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, 2010 J. Ali Harlow <ali@juiblex.co.uk>
1.8 + * Copyright (C) 2009-2011 J. Ali Harlow <ali@juiblex.co.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or modify
1.11 * it under the terms of the GNU General Public License as published by
1.12 @@ -47,9 +47,18 @@
1.13 struct razor_merger *merger;
1.14 int count;
1.15 size_t size;
1.16 + uint32_t header_version;
1.17
1.18 merger = zalloc(sizeof *merger);
1.19 merger->set = razor_set_create();
1.20 + if (set1->packages.size) {
1.21 + header_version = razor_set_get_header_version(set1);
1.22 + if (set2->packages.size &&
1.23 + razor_set_get_header_version(set2) > header_version)
1.24 + header_version = razor_set_get_header_version(set2);
1.25 + } else
1.26 + header_version = razor_set_get_header_version(set2);
1.27 + razor_set_set_header_version(merger->set, header_version);
1.28 hashtable_init(&merger->table, &merger->set->string_pool);
1.29 hashtable_init(&merger->file_table, &merger->set->file_string_pool);
1.30 hashtable_init(&merger->details_table,
1.31 @@ -592,16 +601,24 @@
1.32
1.33 switch (script) {
1.34 case RAZOR_PROPERTY_PREUN:
1.35 - assert(pool[package->preun.program] == '\0');
1.36 - assert(pool[package->preun.body] == '\0');
1.37 - package->preun.program = p;
1.38 - package->preun.body = b;
1.39 + if (package->preun.program != p) {
1.40 + assert(pool[package->preun.program] == '\0');
1.41 + package->preun.program = p;
1.42 + }
1.43 + if (package->preun.body != b) {
1.44 + assert(pool[package->preun.body] == '\0');
1.45 + package->preun.body = b;
1.46 + }
1.47 break;
1.48 case RAZOR_PROPERTY_POSTUN:
1.49 - assert(pool[package->postun.program] == '\0');
1.50 - assert(pool[package->postun.body] == '\0');
1.51 - package->postun.program = p;
1.52 - package->postun.body = b;
1.53 + if (package->postun.program != p) {
1.54 + assert(pool[package->postun.program] == '\0');
1.55 + package->postun.program = p;
1.56 + }
1.57 + if (package->postun.body != b) {
1.58 + assert(pool[package->postun.body] == '\0');
1.59 + package->postun.body = b;
1.60 + }
1.61 break;
1.62 default:
1.63 break;