Add basic support for uninstall scripts.
RPM_INSTALL_PREFIX{n} is not yet supported and upgrading a package
where an uninstall script changes may need more work to ensure the
old script doesn't get included in the merged set (when it is too
late to remove). I haven't yet tested whether this is a real problem.
1.1 --- a/librazor/importer.c Wed Jun 03 08:26:09 2009 +0100
1.2 +++ b/librazor/importer.c Fri Jun 12 16:59: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 @@ -82,6 +83,7 @@
1.12 const char *version,
1.13 const char *arch)
1.14 {
1.15 + uint32_t empty;
1.16 struct razor_package *p;
1.17
1.18 p = array_add(&importer->set->packages, sizeof *p);
1.19 @@ -92,6 +94,12 @@
1.20
1.21 importer->package = p;
1.22 array_init(&importer->properties);
1.23 +
1.24 + empty = hashtable_tokenize(&importer->details_table, "");
1.25 + importer->package->preun.program = empty;
1.26 + importer->package->preun.body = empty;
1.27 + importer->package->postun.program = empty;
1.28 + importer->package->postun.body = empty;
1.29 }
1.30
1.31 /**
1.32 @@ -135,6 +143,39 @@
1.33 }
1.34
1.35 /**
1.36 + * razor_importer_add_script:
1.37 + * @importer: the %razor_importer
1.38 + * @script: either %RAZOR_PROPERTY_PREUN or %RAZOR_PROPERTY_POSTUN
1.39 + * @program: the program to run the script
1.40 + * @body: the body of the script
1.41 + *
1.42 + * Provide a script to use when uninstalling the current package.
1.43 + **/
1.44 +RAZOR_EXPORT void
1.45 +razor_importer_add_script(struct razor_importer *importer,
1.46 + enum razor_property_flags script,
1.47 + const char *program,
1.48 + const char *body)
1.49 +{
1.50 + switch (script) {
1.51 + case RAZOR_PROPERTY_PREUN:
1.52 + importer->package->preun.program =
1.53 + hashtable_tokenize(&importer->table, program);
1.54 + importer->package->preun.body =
1.55 + hashtable_tokenize(&importer->table, body);
1.56 + break;
1.57 + case RAZOR_PROPERTY_POSTUN:
1.58 + importer->package->postun.program =
1.59 + hashtable_tokenize(&importer->table, program);
1.60 + importer->package->postun.body =
1.61 + hashtable_tokenize(&importer->table, body);
1.62 + break;
1.63 + default:
1.64 + break;
1.65 + }
1.66 +}
1.67 +
1.68 +/**
1.69 * razor_importer_add_property:
1.70 * @importer: the %razor_importer
1.71 * @name: name of the property
2.1 --- a/librazor/merger.c Wed Jun 03 08:26:09 2009 +0100
2.2 +++ b/librazor/merger.c Fri Jun 12 16:59:11 2009 +0100
2.3 @@ -1,6 +1,7 @@
2.4 /*
2.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
2.6 * Copyright (C) 2008 Red Hat, Inc
2.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
2.8 *
2.9 * This program is free software; you can redistribute it and/or modify
2.10 * it under the terms of the GNU General Public License as published by
2.11 @@ -18,6 +19,7 @@
2.12 */
2.13
2.14 #include <string.h>
2.15 +#include <assert.h>
2.16 #include "razor-internal.h"
2.17 #include "razor.h"
2.18
2.19 @@ -30,6 +32,7 @@
2.20 };
2.21
2.22 struct razor_merger {
2.23 + int committed;
2.24 struct razor_set *set;
2.25 struct hashtable table;
2.26 struct hashtable file_table;
2.27 @@ -79,6 +82,8 @@
2.28 struct source *source;
2.29 uint32_t flags;
2.30
2.31 + assert(merger->committed == 0);
2.32 +
2.33 set1 = merger->source1.set;
2.34 if (set1->packages.data <= (void *) package &&
2.35 (void *) package < set1->packages.data + set1->packages.size) {
2.36 @@ -111,6 +116,15 @@
2.37 source->file_map[r->data] = 1;
2.38 r = list_next(r);
2.39 }
2.40 +
2.41 + p->preun.program = hashtable_tokenize(&merger->table,
2.42 + &pool[package->preun.program]);
2.43 + p->preun.body = hashtable_tokenize(&merger->table,
2.44 + &pool[package->preun.body]);
2.45 + p->postun.program = hashtable_tokenize(&merger->table,
2.46 + &pool[package->postun.program]);
2.47 + p->postun.body = hashtable_tokenize(&merger->table,
2.48 + &pool[package->postun.body]);
2.49 }
2.50
2.51 static uint32_t
2.52 @@ -481,9 +495,8 @@
2.53 }
2.54
2.55 struct razor_set *
2.56 -razor_merger_finish(struct razor_merger *merger)
2.57 +razor_merger_commit(struct razor_merger *merger)
2.58 {
2.59 - struct razor_set *result;
2.60 struct razor_package *p, *pend;
2.61
2.62 /* As we built the package list, we filled out a bitvector of
2.63 @@ -523,10 +536,49 @@
2.64 rebuild_property_package_lists(merger->set);
2.65 rebuild_file_package_lists(merger->set);
2.66
2.67 - result = merger->set;
2.68 + merger->committed = 1;
2.69 +
2.70 + return merger->set;
2.71 +}
2.72 +
2.73 +void
2.74 +razor_merger_package_add_script(struct razor_merger *merger,
2.75 + struct razor_package *package,
2.76 + enum razor_property_flags script,
2.77 + const char *program, const char *body)
2.78 +{
2.79 + uint32_t p, b;
2.80 + char *pool;
2.81 + struct razor_set *set = merger->set;
2.82 + assert ((void *)package >= set->packages.data && \
2.83 + (void *)package < set->packages.data + set->packages.size);
2.84 +
2.85 + p = hashtable_tokenize(&merger->table, program);
2.86 + b = hashtable_tokenize(&merger->table, body);
2.87 +
2.88 + pool = merger->set->string_pool.data;
2.89 +
2.90 + switch (script) {
2.91 + case RAZOR_PROPERTY_PREUN:
2.92 + assert(pool[package->preun.program] == '\0');
2.93 + assert(pool[package->preun.body] == '\0');
2.94 + package->preun.program = p;
2.95 + package->preun.body = b;
2.96 + break;
2.97 + case RAZOR_PROPERTY_POSTUN:
2.98 + assert(pool[package->postun.program] == '\0');
2.99 + assert(pool[package->postun.body] == '\0');
2.100 + package->postun.program = p;
2.101 + package->postun.body = b;
2.102 + break;
2.103 + default:
2.104 + break;
2.105 + }
2.106 +}
2.107 +
2.108 +void razor_merger_destroy(struct razor_merger *merger)
2.109 +{
2.110 hashtable_release(&merger->table);
2.111 hashtable_release(&merger->file_table);
2.112 free(merger);
2.113 -
2.114 - return result;
2.115 }
3.1 --- a/librazor/razor-internal.h Wed Jun 03 08:26:09 2009 +0100
3.2 +++ b/librazor/razor-internal.h Fri Jun 12 16:59:11 2009 +0100
3.3 @@ -1,6 +1,7 @@
3.4 /*
3.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
3.6 * Copyright (C) 2008 Red Hat, Inc
3.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
3.8 *
3.9 * This program is free software; you can redistribute it and/or modify
3.10 * it under the terms of the GNU General Public License as published by
3.11 @@ -67,6 +68,11 @@
3.12 #define RAZOR_FILE_POOL "file_pool"
3.13 #define RAZOR_FILE_STRING_POOL "file_string_pool"
3.14
3.15 +struct razor_script {
3.16 + uint32_t program;
3.17 + uint32_t body;
3.18 +};
3.19 +
3.20 struct razor_package {
3.21 unsigned int name : 24;
3.22 unsigned int flags : 8;
3.23 @@ -78,6 +84,8 @@
3.24 uint32_t license;
3.25 struct list_head properties;
3.26 struct list_head files;
3.27 + struct razor_script preun;
3.28 + struct razor_script postun;
3.29 };
3.30
3.31
3.32 @@ -175,17 +183,28 @@
3.33 razor_merger_add_package(struct razor_merger *merger,
3.34 struct razor_package *package);
3.35 struct razor_set *
3.36 -razor_merger_finish(struct razor_merger *merger);
3.37 +razor_merger_commit(struct razor_merger *merger);
3.38 +void
3.39 +razor_merger_package_add_script(struct razor_merger *merger,
3.40 + struct razor_package *package,
3.41 + enum razor_property_flags script,
3.42 + const char *program, const char *body);
3.43 +void
3.44 +razor_merger_destroy(struct razor_merger *merger);
3.45
3.46 int run_lua_script(const char *root, const char *name, const char *body,
3.47 ssize_t len);
3.48
3.49 +int razor_run_script(const char *root, enum razor_property_flags script,
3.50 + const char *program, const char *body);
3.51 +
3.52 /* Utility functions */
3.53
3.54 void
3.55 razor_package_get_details_varg(struct razor_set *set,
3.56 struct razor_package *package,
3.57 va_list args);
3.58 +void razor_rpm_get_details_varg(struct razor_rpm *rpm, va_list args);
3.59
3.60 int razor_create_dir(const char *root, const char *path);
3.61 int razor_write(int fd, const void *data, size_t size);
4.1 --- a/librazor/razor.c Wed Jun 03 08:26:09 2009 +0100
4.2 +++ b/librazor/razor.c Fri Jun 12 16:59:11 2009 +0100
4.3 @@ -1,6 +1,7 @@
4.4 /*
4.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
4.6 * Copyright (C) 2008 Red Hat, Inc
4.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
4.8 *
4.9 * This program is free software; you can redistribute it and/or modify
4.10 * it under the terms of the GNU General Public License as published by
4.11 @@ -34,6 +35,7 @@
4.12 #include <errno.h>
4.13 #include <ctype.h>
4.14 #include <fnmatch.h>
4.15 +#include <limits.h>
4.16 #include <assert.h>
4.17
4.18 #include "razor-internal.h"
4.19 @@ -410,6 +412,22 @@
4.20 pool = set->details_string_pool.data;
4.21 return &pool[package->license];
4.22
4.23 + case RAZOR_DETAIL_PREUNPROG:
4.24 + pool = set->string_pool.data;
4.25 + return &pool[package->preun.program];
4.26 +
4.27 + case RAZOR_DETAIL_PREUN:
4.28 + pool = set->string_pool.data;
4.29 + return &pool[package->preun.body];
4.30 +
4.31 + case RAZOR_DETAIL_POSTUNPROG:
4.32 + pool = set->string_pool.data;
4.33 + return &pool[package->postun.program];
4.34 +
4.35 + case RAZOR_DETAIL_POSTUN:
4.36 + pool = set->string_pool.data;
4.37 + return &pool[package->postun.body];
4.38 +
4.39 default:
4.40 fprintf(stderr, "type %u not found\n", type);
4.41 return NULL;
4.42 @@ -466,6 +484,60 @@
4.43 va_end (args);
4.44 }
4.45
4.46 +/**
4.47 + * razor_package_remove:
4.48 + * @set: a %razor_set
4.49 + * @package: a %razor_package
4.50 + * @root: the root into which the package is currently installed
4.51 + *
4.52 + * Removes an installed package.
4.53 + **/
4.54 +RAZOR_EXPORT int
4.55 +razor_package_remove(struct razor_set *set, struct razor_package *package,
4.56 + const char *root)
4.57 +{
4.58 + struct razor_file_iterator *fi;
4.59 + struct razor_package_iterator *pi;
4.60 + struct razor_package *p;
4.61 + char buffer[PATH_MAX];
4.62 + const char *name, *program, *script;
4.63 + int retval = 0, count;
4.64 +
4.65 + razor_package_get_details(set, package,
4.66 + RAZOR_DETAIL_PREUNPROG, &program,
4.67 + RAZOR_DETAIL_PREUN, &script,
4.68 + RAZOR_DETAIL_LAST);
4.69 +
4.70 + if (razor_run_script(root, RAZOR_PROPERTY_PREUN, program, script))
4.71 + return -1;
4.72 +
4.73 + fi = razor_file_iterator_create(set, package);
4.74 +
4.75 + while (!retval && razor_file_iterator_next(fi, &name)) {
4.76 + pi = razor_package_iterator_create_for_file(set, name);
4.77 + count = 0;
4.78 + while (razor_package_iterator_next(pi, &p, RAZOR_DETAIL_LAST))
4.79 + count++;
4.80 + razor_package_iterator_destroy(pi);
4.81 + if (count <= 1) {
4.82 + snprintf(buffer, sizeof buffer, "%s%s", root, name);
4.83 + retval = remove(buffer);
4.84 + }
4.85 + }
4.86 +
4.87 + razor_file_iterator_destroy(fi);
4.88 +
4.89 + if (retval)
4.90 + return retval;
4.91 +
4.92 + razor_package_get_details(set, package,
4.93 + RAZOR_DETAIL_POSTUNPROG, &program,
4.94 + RAZOR_DETAIL_POSTUN, &script,
4.95 + RAZOR_DETAIL_LAST);
4.96 +
4.97 + return razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, script);
4.98 +}
4.99 +
4.100 RAZOR_EXPORT const char *
4.101 razor_property_relation_to_string(struct razor_property *p)
4.102 {
5.1 --- a/librazor/razor.h Wed Jun 03 08:26:09 2009 +0100
5.2 +++ b/librazor/razor.h Fri Jun 12 16:59:11 2009 +0100
5.3 @@ -1,6 +1,7 @@
5.4 /*
5.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
5.6 * Copyright (C) 2008 Red Hat, Inc
5.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
5.8 *
5.9 * This program is free software; you can redistribute it and/or modify
5.10 * it under the terms of the GNU General Public License as published by
5.11 @@ -36,7 +37,11 @@
5.12 RAZOR_DETAIL_SUMMARY,
5.13 RAZOR_DETAIL_DESCRIPTION,
5.14 RAZOR_DETAIL_URL,
5.15 - RAZOR_DETAIL_LICENSE
5.16 + RAZOR_DETAIL_LICENSE,
5.17 + RAZOR_DETAIL_PREUNPROG,
5.18 + RAZOR_DETAIL_PREUN,
5.19 + RAZOR_DETAIL_POSTUNPROG,
5.20 + RAZOR_DETAIL_POSTUN
5.21 };
5.22
5.23 enum razor_property_flags {
5.24 @@ -103,6 +108,9 @@
5.25 void
5.26 razor_package_get_details(struct razor_set *set,
5.27 struct razor_package *package, ...);
5.28 +int
5.29 +razor_package_remove(struct razor_set *set, struct razor_package *package,
5.30 + const char *root);
5.31
5.32
5.33 /**
5.34 @@ -234,6 +242,8 @@
5.35 * from packages from one or more other package sets.
5.36 **/
5.37
5.38 +struct razor_rpm;
5.39 +
5.40 struct razor_transaction *
5.41 razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
5.42 void razor_transaction_install_package(struct razor_transaction *transaction,
5.43 @@ -242,10 +252,13 @@
5.44 struct razor_package *package);
5.45 void razor_transaction_update_package(struct razor_transaction *trans,
5.46 struct razor_package *package);
5.47 +void razor_transaction_fixup_package(struct razor_transaction *trans,
5.48 + struct razor_package *package,
5.49 + struct razor_rpm *rpm);
5.50 void razor_transaction_update_all(struct razor_transaction *transaction);
5.51 int razor_transaction_resolve(struct razor_transaction *trans);
5.52 int razor_transaction_describe(struct razor_transaction *trans);
5.53 -struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
5.54 +struct razor_set *razor_transaction_commit(struct razor_transaction *trans);
5.55 void razor_transaction_destroy(struct razor_transaction *trans);
5.56
5.57 /* Temporary helper for test suite. */
5.58 @@ -264,7 +277,6 @@
5.59 **/
5.60
5.61 struct razor_relocations;
5.62 -struct razor_rpm;
5.63
5.64 struct razor_relocations *razor_relocations_create(void);
5.65 void razor_relocations_add(struct razor_relocations *relocations,
5.66 @@ -276,6 +288,7 @@
5.67 void razor_relocations_destroy(struct razor_relocations *relocations);
5.68
5.69 struct razor_rpm *razor_rpm_open(const char *filename);
5.70 +void razor_rpm_get_details(struct razor_rpm *rpm, ...);
5.71 void razor_rpm_set_relocations(struct razor_rpm *rpm,
5.72 struct razor_relocations *relocations);
5.73 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
5.74 @@ -332,6 +345,10 @@
5.75 const char *description,
5.76 const char *url,
5.77 const char *license);
5.78 +void razor_importer_add_script(struct razor_importer *importer,
5.79 + enum razor_property_flags script,
5.80 + const char *program,
5.81 + const char *body);
5.82 void razor_importer_add_property(struct razor_importer *importer,
5.83 const char *name,
5.84 uint32_t flags,
6.1 --- a/librazor/rpm.c Wed Jun 03 08:26:09 2009 +0100
6.2 +++ b/librazor/rpm.c Fri Jun 12 16:59:11 2009 +0100
6.3 @@ -256,6 +256,7 @@
6.4 size_t size;
6.5 void *payload;
6.6 struct razor_relocations *relocations;
6.7 + char *evr;
6.8 };
6.9
6.10 enum razor_relocation_flags {
6.11 @@ -491,6 +492,95 @@
6.12 }
6.13 }
6.14
6.15 +static void
6.16 +razor_rpm_build_evr(struct razor_rpm *rpm)
6.17 +{
6.18 + const char *version, *release;
6.19 + const uint32_t *epoch;
6.20 + char evr[128], buf[16];
6.21 +
6.22 + epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL);
6.23 + version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
6.24 + release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL);
6.25 + if (epoch)
6.26 + snprintf(buf, sizeof buf, "%lu", (unsigned long)ntohl(*epoch));
6.27 + razor_build_evr(evr, sizeof evr, epoch ? buf : NULL, version, release);
6.28 + rpm->evr = strdup(evr);
6.29 +}
6.30 +
6.31 +static const char *
6.32 +razor_rpm_get_details_type(struct razor_rpm *rpm, enum razor_detail_type type)
6.33 +{
6.34 + switch(type) {
6.35 + case RAZOR_DETAIL_NAME:
6.36 + return razor_rpm_get_indirect(rpm, RPMTAG_NAME, NULL);
6.37 +
6.38 + case RAZOR_DETAIL_VERSION:
6.39 + if (!rpm->evr)
6.40 + razor_rpm_build_evr(rpm);
6.41 + return rpm->evr;
6.42 +
6.43 + case RAZOR_DETAIL_ARCH:
6.44 + return razor_rpm_get_indirect(rpm, RPMTAG_ARCH, NULL);
6.45 +
6.46 + case RAZOR_DETAIL_SUMMARY:
6.47 + return razor_rpm_get_indirect(rpm, RPMTAG_SUMMARY, NULL);
6.48 +
6.49 + case RAZOR_DETAIL_DESCRIPTION:
6.50 + return razor_rpm_get_indirect(rpm, RPMTAG_DESCRIPTION, NULL);
6.51 +
6.52 + case RAZOR_DETAIL_URL:
6.53 + return razor_rpm_get_indirect(rpm, RPMTAG_URL, NULL);
6.54 +
6.55 + case RAZOR_DETAIL_LICENSE:
6.56 + return razor_rpm_get_indirect(rpm, RPMTAG_LICENSE, NULL);
6.57 +
6.58 + case RAZOR_DETAIL_PREUNPROG:
6.59 + return razor_rpm_get_indirect(rpm, RPMTAG_PREUNPROG, NULL);
6.60 +
6.61 + case RAZOR_DETAIL_PREUN:
6.62 + return razor_rpm_get_indirect(rpm, RPMTAG_PREUN, NULL);
6.63 +
6.64 + case RAZOR_DETAIL_POSTUNPROG:
6.65 + return razor_rpm_get_indirect(rpm, RPMTAG_POSTUNPROG, NULL);
6.66 +
6.67 + case RAZOR_DETAIL_POSTUN:
6.68 + return razor_rpm_get_indirect(rpm, RPMTAG_POSTUN, NULL);
6.69 +
6.70 + default:
6.71 + fprintf(stderr, "type %u not found\n", type);
6.72 + return NULL;
6.73 + }
6.74 +}
6.75 +
6.76 +void
6.77 +razor_rpm_get_details_varg(struct razor_rpm *rpm, va_list args)
6.78 +{
6.79 + int i;
6.80 + enum razor_detail_type type;
6.81 + const char **data;
6.82 +
6.83 + for (i = 0;; i += 2) {
6.84 + type = va_arg(args, enum razor_detail_type);
6.85 + if (type == RAZOR_DETAIL_LAST)
6.86 + break;
6.87 + data = va_arg(args, const char **);
6.88 + *data = razor_rpm_get_details_type(rpm, type);
6.89 + }
6.90 +}
6.91 +
6.92 +RAZOR_EXPORT void
6.93 +razor_rpm_get_details(struct razor_rpm *rpm, ...)
6.94 +{
6.95 + va_list args;
6.96 +
6.97 + assert(rpm != NULL);
6.98 +
6.99 + va_start(args, rpm);
6.100 + razor_rpm_get_details_varg(rpm, args);
6.101 + va_end(args);
6.102 +}
6.103 +
6.104 RAZOR_EXPORT struct razor_rpm *
6.105 razor_rpm_open(const char *filename)
6.106 {
6.107 @@ -865,7 +955,7 @@
6.108 }
6.109 }
6.110
6.111 - if (strcmp(program, "<lua>") == 0)
6.112 + if (program && strcmp(program, "<lua>") == 0)
6.113 retval = run_script_lua(installer->root, script_tag, script);
6.114 else
6.115 retval = run_script_external(installer->root, program, script);
6.116 @@ -881,6 +971,47 @@
6.117 return retval;
6.118 }
6.119
6.120 +int
6.121 +razor_run_script(const char *root, enum razor_property_flags script,
6.122 + const char *program, const char *body)
6.123 +{
6.124 + int retval;
6.125 + unsigned int script_tag;
6.126 +
6.127 + if (program && !*program)
6.128 + program = NULL;
6.129 + if (body && !*body)
6.130 + body = NULL;
6.131 + if (program == NULL && body == NULL)
6.132 + return 0;
6.133 +
6.134 + if (program && strcmp(program, "<lua>") == 0)
6.135 + {
6.136 + switch(script) {
6.137 + case RAZOR_PROPERTY_PRE:
6.138 + script_tag = RPMTAG_PREIN;
6.139 + break;
6.140 + case RAZOR_PROPERTY_POST:
6.141 + script_tag = RPMTAG_POSTIN;
6.142 + break;
6.143 + case RAZOR_PROPERTY_PREUN:
6.144 + script_tag = RPMTAG_PREUN;
6.145 + break;
6.146 + case RAZOR_PROPERTY_POSTUN:
6.147 + script_tag = RPMTAG_POSTUN;
6.148 + break;
6.149 + default:
6.150 + script_tag = 0;
6.151 + break;
6.152 + }
6.153 + retval = run_script_lua(root, script_tag, body);
6.154 + }
6.155 + else
6.156 + retval = run_script_external(root, program, body);
6.157 +
6.158 + return retval;
6.159 +}
6.160 +
6.161 static int
6.162 installer_init(struct installer *installer)
6.163 {
6.164 @@ -1035,6 +1166,7 @@
6.165 free(rpm->dirs);
6.166 free(rpm->prefixes);
6.167 err = razor_file_free_contents(rpm->map, rpm->size);
6.168 + free(rpm->evr);
6.169 free(rpm);
6.170
6.171 return err;
6.172 @@ -1043,32 +1175,23 @@
6.173 RAZOR_EXPORT int
6.174 razor_importer_add_rpm(struct razor_importer *importer, struct razor_rpm *rpm)
6.175 {
6.176 - const char *name, *version, *release, *arch;
6.177 + const char *name, *version, *arch;
6.178 const char *summary, *description, *url, *license;
6.179 - const uint32_t *epoch;
6.180 - char evr[128], buf[16];
6.181
6.182 assert (importer != NULL);
6.183 assert (rpm != NULL);
6.184
6.185 - name = razor_rpm_get_indirect(rpm, RPMTAG_NAME, NULL);
6.186 - epoch = razor_rpm_get_indirect(rpm, RPMTAG_EPOCH, NULL);
6.187 - version = razor_rpm_get_indirect(rpm, RPMTAG_VERSION, NULL);
6.188 - release = razor_rpm_get_indirect(rpm, RPMTAG_RELEASE, NULL);
6.189 - arch = razor_rpm_get_indirect(rpm, RPMTAG_ARCH, NULL);
6.190 + razor_rpm_get_details(rpm,
6.191 + RAZOR_DETAIL_NAME, &name,
6.192 + RAZOR_DETAIL_VERSION, &version,
6.193 + RAZOR_DETAIL_ARCH, &arch,
6.194 + RAZOR_DETAIL_SUMMARY, &summary,
6.195 + RAZOR_DETAIL_DESCRIPTION, &description,
6.196 + RAZOR_DETAIL_URL, &url,
6.197 + RAZOR_DETAIL_LICENSE, &license,
6.198 + RAZOR_DETAIL_LAST);
6.199
6.200 - summary = razor_rpm_get_indirect(rpm, RPMTAG_SUMMARY, NULL);
6.201 - description = razor_rpm_get_indirect(rpm, RPMTAG_DESCRIPTION, NULL);
6.202 - url = razor_rpm_get_indirect(rpm, RPMTAG_URL, NULL);
6.203 - license = razor_rpm_get_indirect(rpm, RPMTAG_LICENSE, NULL);
6.204 -
6.205 - if (epoch) {
6.206 - snprintf(buf, sizeof buf, "%lu", ntohl(*epoch));
6.207 - razor_build_evr(evr, sizeof evr, buf, version, release);
6.208 - } else {
6.209 - razor_build_evr(evr, sizeof evr, NULL, version, release);
6.210 - }
6.211 - razor_importer_begin_package(importer, name, evr, arch);
6.212 + razor_importer_begin_package(importer, name, version, arch);
6.213
6.214 razor_importer_add_details(importer, summary, description, url,
6.215 license);
7.1 --- a/librazor/transaction.c Wed Jun 03 08:26:09 2009 +0100
7.2 +++ b/librazor/transaction.c Fri Jun 12 16:59:11 2009 +0100
7.3 @@ -1,6 +1,7 @@
7.4 /*
7.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
7.6 * Copyright (C) 2008 Red Hat, Inc
7.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
7.8 *
7.9 * This program is free software; you can redistribute it and/or modify
7.10 * it under the terms of the GNU General Public License as published by
7.11 @@ -100,6 +101,7 @@
7.12 int package_count, errors;
7.13 struct transaction_set system, upstream;
7.14 int changes;
7.15 + struct razor_merger *merger;
7.16 };
7.17
7.18 static void
7.19 @@ -854,9 +856,8 @@
7.20 }
7.21
7.22 RAZOR_EXPORT struct razor_set *
7.23 -razor_transaction_finish(struct razor_transaction *trans)
7.24 +razor_transaction_commit(struct razor_transaction *trans)
7.25 {
7.26 - struct razor_merger *merger;
7.27 struct razor_package *u, *uend, *upkgs, *s, *send, *spkgs;
7.28 char *upool, *spool;
7.29 int cmp;
7.30 @@ -873,7 +874,8 @@
7.31 trans->upstream.set->packages.size;
7.32 upool = trans->upstream.set->string_pool.data;
7.33
7.34 - merger = razor_merger_create(trans->system.set, trans->upstream.set);
7.35 + trans->merger = razor_merger_create(trans->system.set,
7.36 + trans->upstream.set);
7.37 while (s < send || u < uend) {
7.38 if (s < send && u < uend)
7.39 cmp = strcmp(&spool[s->name], &upool[u->name]);
7.40 @@ -884,26 +886,46 @@
7.41
7.42 if (cmp < 0) {
7.43 if (trans->system.packages[s - spkgs] & TRANS_PACKAGE_PRESENT)
7.44 - razor_merger_add_package(merger, s);
7.45 + razor_merger_add_package(trans->merger, s);
7.46 s++;
7.47 } else if (cmp == 0) {
7.48 if (trans->system.packages[s - spkgs] & TRANS_PACKAGE_PRESENT)
7.49 - razor_merger_add_package(merger, s);
7.50 + razor_merger_add_package(trans->merger, s);
7.51 if (trans->upstream.packages[u - upkgs] & TRANS_PACKAGE_PRESENT)
7.52 - razor_merger_add_package(merger, u);
7.53 + razor_merger_add_package(trans->merger, u);
7.54
7.55 s++;
7.56 u++;
7.57 } else {
7.58 if (trans->upstream.packages[u - upkgs] & TRANS_PACKAGE_PRESENT)
7.59 - razor_merger_add_package(merger, u);
7.60 + razor_merger_add_package(trans->merger, u);
7.61 u++;
7.62 }
7.63 }
7.64
7.65 - razor_transaction_destroy(trans);
7.66 + return razor_merger_commit(trans->merger);
7.67 +}
7.68
7.69 - return razor_merger_finish(merger);
7.70 +RAZOR_EXPORT void
7.71 +razor_transaction_fixup_package(struct razor_transaction *trans,
7.72 + struct razor_package *package,
7.73 + struct razor_rpm *rpm)
7.74 +{
7.75 + const char *preunprog, *preun, *postunprog, *postun;
7.76 +
7.77 + razor_rpm_get_details(rpm,
7.78 + RAZOR_DETAIL_PREUNPROG, &preunprog,
7.79 + RAZOR_DETAIL_PREUN, &preun,
7.80 + RAZOR_DETAIL_POSTUNPROG, &postunprog,
7.81 + RAZOR_DETAIL_POSTUN, &postun,
7.82 + RAZOR_DETAIL_LAST);
7.83 +
7.84 + razor_merger_package_add_script(trans->merger, package,
7.85 + RAZOR_PROPERTY_PREUN,
7.86 + preunprog, preun);
7.87 + razor_merger_package_add_script(trans->merger, package,
7.88 + RAZOR_PROPERTY_POSTUN,
7.89 + postunprog, postun);
7.90 }
7.91
7.92 RAZOR_EXPORT void
7.93 @@ -911,6 +933,8 @@
7.94 {
7.95 assert (trans != NULL);
7.96
7.97 + if (trans->merger)
7.98 + razor_merger_destroy(trans->merger);
7.99 transaction_set_release(&trans->system);
7.100 transaction_set_release(&trans->upstream);
7.101 free(trans);
8.1 --- a/src/import-rpmdb.c Wed Jun 03 08:26:09 2009 +0100
8.2 +++ b/src/import-rpmdb.c Fri Jun 12 16:59:11 2009 +0100
8.3 @@ -1,6 +1,7 @@
8.4 /*
8.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
8.6 * Copyright (C) 2008 Red Hat, Inc
8.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
8.8 *
8.9 * This program is free software; you can redistribute it and/or modify
8.10 * it under the terms of the GNU General Public License as published by
8.11 @@ -79,6 +80,21 @@
8.12 versions.list[i]);
8.13 }
8.14
8.15 +static void
8.16 +add_script(struct razor_importer *importer,
8.17 + uint32_t type_flags, Header h,
8.18 + int32_t program_tag, int32_t body_tag)
8.19 +{
8.20 + union rpm_entry program, body;
8.21 + int32_t type, count;
8.22 +
8.23 + headerGetEntry(h, program_tag, &type, &program.p, &count);
8.24 + headerGetEntry(h, body_tag, &type, &body.p, &count);
8.25 +
8.26 + razor_importer_add_script(importer, type_flags,
8.27 + program.string, body.string);
8.28 +}
8.29 +
8.30 struct razor_set *
8.31 razor_set_create_from_rpmdb(void)
8.32 {
8.33 @@ -163,6 +179,12 @@
8.34 razor_importer_add_file(importer, filename);
8.35 }
8.36
8.37 + add_script(importer, RAZOR_PROPERTY_PREUN, h,
8.38 + RPMTAG_PREUNPROG, RPMTAG_PREUN);
8.39 +
8.40 + add_script(importer, RAZOR_PROPERTY_POSTUN, h,
8.41 + RPMTAG_POSTUNPROG, RPMTAG_POSTUN);
8.42 +
8.43 razor_importer_finish_package(importer);
8.44
8.45 printf("\rimporting %d", ++imported_count);
9.1 --- a/src/main.c Wed Jun 03 08:26:09 2009 +0100
9.2 +++ b/src/main.c Fri Jun 12 16:59:11 2009 +0100
9.3 @@ -50,8 +50,8 @@
9.4 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
9.5
9.6 static int
9.7 -update_packages(struct razor_set *system, struct razor_set *next,
9.8 - struct razor_relocations *relocations);
9.9 +update_packages(struct razor_transaction *trans, struct razor_set *system,
9.10 + struct razor_set *next, struct razor_relocations *relocations);
9.11
9.12 static struct razor_package_iterator *
9.13 create_iterator_from_argv(struct razor_set *set, int argc, const char *argv[])
9.14 @@ -222,6 +222,44 @@
9.15 }
9.16
9.17 static int
9.18 +command_list_scripts(int argc, const char *argv[])
9.19 +{
9.20 + struct razor_set *set;
9.21 + struct razor_package *package;
9.22 + struct razor_package_iterator *pi;
9.23 + const char *preunprog, *preun, *postunprog, *postun;
9.24 +
9.25 + set = razor_root_open_read_only(install_root);
9.26 + if (set == NULL)
9.27 + return 1;
9.28 +
9.29 + pi = create_iterator_from_argv(set, argc, argv);
9.30 + while (razor_package_iterator_next(pi, &package,
9.31 + RAZOR_DETAIL_PREUNPROG, &preunprog,
9.32 + RAZOR_DETAIL_PREUN, &preun,
9.33 + RAZOR_DETAIL_POSTUNPROG, &postunprog,
9.34 + RAZOR_DETAIL_POSTUN, &postun,
9.35 + RAZOR_DETAIL_LAST)) {
9.36 + if (preun && *preun) {
9.37 + printf("preuninstall scriptlet");
9.38 + if (preunprog && *preunprog)
9.39 + printf(" (using %s)",preunprog);
9.40 + printf(":\n%s\n",preun);
9.41 + }
9.42 + if (postun && *postun) {
9.43 + printf("postuninstall scriptlet");
9.44 + if (postunprog && *postunprog)
9.45 + printf(" (using %s)",postunprog);
9.46 + printf(":\n%s\n",postun);
9.47 + }
9.48 + }
9.49 + razor_package_iterator_destroy(pi);
9.50 + razor_set_destroy(set);
9.51 +
9.52 + return 0;
9.53 +}
9.54 +
9.55 +static int
9.56 command_list_files(int argc, const char *argv[])
9.57 {
9.58 struct razor_set *set;
9.59 @@ -542,6 +580,7 @@
9.60 for (i = 0; i < argc; i++) {
9.61 if (mark_packages_for_update(trans, set, argv[i]) == 0) {
9.62 fprintf(stderr, "no match for %s\n", argv[i]);
9.63 + razor_transaction_destroy(trans);
9.64 return 1;
9.65 }
9.66 }
9.67 @@ -550,11 +589,13 @@
9.68 errors = razor_transaction_describe(trans);
9.69 if (errors) {
9.70 fprintf(stderr, "unresolved dependencies\n");
9.71 + razor_transaction_destroy(trans);
9.72 return 1;
9.73 }
9.74
9.75 - set = razor_transaction_finish(trans);
9.76 + set = razor_transaction_commit(trans);
9.77 razor_set_write(set, updated_repo_filename, RAZOR_REPO_FILE_MAIN);
9.78 + razor_transaction_destroy(trans);
9.79 razor_set_destroy(set);
9.80 razor_set_destroy(upstream);
9.81 printf("wrote system-updated.rzdb\n");
9.82 @@ -598,10 +639,11 @@
9.83 return 1;
9.84 }
9.85
9.86 - next = razor_transaction_finish(trans);
9.87 - update_packages(system, next, NULL);
9.88 + next = razor_transaction_commit(trans);
9.89 + update_packages(trans, system, next, NULL);
9.90 razor_root_update(root, next);
9.91
9.92 + razor_transaction_destroy(trans);
9.93 razor_set_destroy(next);
9.94 razor_set_destroy(upstream);
9.95
9.96 @@ -774,6 +816,7 @@
9.97 struct razor_property *property;
9.98 struct razor_rpm *rpm;
9.99 const char *name, *version, *arch, *summary, *desc, *url, *license;
9.100 + const char *preunprog, *preun, *postunprog, *postun;
9.101 char file[PATH_MAX];
9.102 uint32_t flags;
9.103
9.104 @@ -788,6 +831,10 @@
9.105 RAZOR_DETAIL_DESCRIPTION, &desc,
9.106 RAZOR_DETAIL_URL, &url,
9.107 RAZOR_DETAIL_LICENSE, &license,
9.108 + RAZOR_DETAIL_PREUNPROG, &preunprog,
9.109 + RAZOR_DETAIL_PREUN, &preun,
9.110 + RAZOR_DETAIL_POSTUNPROG, &postunprog,
9.111 + RAZOR_DETAIL_POSTUN, &postun,
9.112 RAZOR_DETAIL_LAST)) {
9.113 snprintf(file, sizeof file,
9.114 "rpms/%s", rpm_filename(name, version, arch));
9.115 @@ -820,6 +867,11 @@
9.116 }
9.117 razor_file_iterator_destroy(file_iter);
9.118
9.119 + razor_importer_add_script(importer, RAZOR_PROPERTY_PREUN,
9.120 + preunprog, preun);
9.121 + razor_importer_add_script(importer, RAZOR_PROPERTY_POSTUN,
9.122 + postunprog, postun);
9.123 +
9.124 razor_importer_finish_package(importer);
9.125 }
9.126
9.127 @@ -828,7 +880,8 @@
9.128 }
9.129
9.130 static int
9.131 -install_package(struct razor_set *set, struct razor_package *package,
9.132 +install_package(struct razor_transaction *trans, struct razor_set *set,
9.133 + struct razor_package *package,
9.134 struct razor_relocations *relocations)
9.135 {
9.136 int retval;
9.137 @@ -853,6 +906,7 @@
9.138 }
9.139 if (relocations)
9.140 razor_rpm_set_relocations(rpm, relocations);
9.141 + razor_transaction_fixup_package(trans, package, rpm);
9.142 retval = razor_rpm_install(rpm, install_root);
9.143 if (retval < 0)
9.144 fprintf(stderr, "failed to install rpm %s\n", file);
9.145 @@ -861,37 +915,8 @@
9.146 }
9.147
9.148 static int
9.149 -remove_package(struct razor_set *set, struct razor_package *package)
9.150 -{
9.151 - struct razor_file_iterator *fi;
9.152 - struct razor_package_iterator *pi;
9.153 - struct razor_package *p;
9.154 - char buffer[PATH_MAX];
9.155 - const char *name;
9.156 - int retval = 0, count;
9.157 -
9.158 - fi = razor_file_iterator_create(set, package);
9.159 -
9.160 - while (!retval && razor_file_iterator_next(fi, &name)) {
9.161 - pi = razor_package_iterator_create_for_file(set, name);
9.162 - count = 0;
9.163 - while (razor_package_iterator_next(pi, &p, RAZOR_DETAIL_LAST))
9.164 - count++;
9.165 - razor_package_iterator_destroy(pi);
9.166 - if (count <= 1) {
9.167 - snprintf(buffer, sizeof buffer, "%s%s", install_root,
9.168 - name);
9.169 - retval = remove(buffer);
9.170 - }
9.171 - }
9.172 -
9.173 - razor_file_iterator_destroy(fi);
9.174 - return retval;
9.175 -}
9.176 -
9.177 -static int
9.178 -update_packages(struct razor_set *system, struct razor_set *next,
9.179 - struct razor_relocations *relocations)
9.180 +update_packages(struct razor_transaction *trans, struct razor_set *system,
9.181 + struct razor_set *next, struct razor_relocations *relocations)
9.182 {
9.183 struct razor_install_iterator *ii;
9.184 struct razor_package *package;
9.185 @@ -903,9 +928,11 @@
9.186 while (!retval && razor_install_iterator_next(ii, &set, &package,
9.187 &action, &count)) {
9.188 if (action == RAZOR_INSTALL_ACTION_ADD)
9.189 - retval = install_package(set, package, relocations);
9.190 + retval = install_package(trans, set, package,
9.191 + relocations);
9.192 else if (action == RAZOR_INSTALL_ACTION_REMOVE)
9.193 - retval = remove_package(set, package);
9.194 + retval = razor_package_remove(set, package,
9.195 + install_root);
9.196 }
9.197 razor_install_iterator_destroy(ii);
9.198
9.199 @@ -974,6 +1001,7 @@
9.200 for (; i < argc; i++) {
9.201 if (mark_packages_for_update(trans, upstream, argv[i]) == 0) {
9.202 fprintf(stderr, "no package matched %s\n", argv[i]);
9.203 + razor_transaction_destroy(trans);
9.204 razor_root_close(root);
9.205 return 1;
9.206 }
9.207 @@ -982,28 +1010,32 @@
9.208 if (dependencies) {
9.209 razor_transaction_resolve(trans);
9.210 if (razor_transaction_describe(trans) > 0) {
9.211 + razor_transaction_destroy(trans);
9.212 razor_root_close(root);
9.213 return 1;
9.214 }
9.215 }
9.216
9.217 - next = razor_transaction_finish(trans);
9.218 -
9.219 - razor_root_update(root, next);
9.220 + next = razor_transaction_commit(trans);
9.221
9.222 if (mkdir("rpms", 0777) && errno != EEXIST) {
9.223 fprintf(stderr, "failed to create rpms directory.\n");
9.224 + razor_transaction_destroy(trans);
9.225 razor_root_close(root);
9.226 return 1;
9.227 }
9.228
9.229 if (download_packages(system, next) < 0) {
9.230 + razor_transaction_destroy(trans);
9.231 razor_root_close(root);
9.232 return 1;
9.233 }
9.234
9.235 - update_packages(system, next, relocations);
9.236 + update_packages(trans, system, next, relocations);
9.237
9.238 + razor_root_update(root, next);
9.239 +
9.240 + razor_transaction_destroy(trans);
9.241 if (relocations)
9.242 razor_relocations_destroy(relocations);
9.243 razor_set_destroy(next);
9.244 @@ -1167,6 +1199,7 @@
9.245 { "list-provides", "list all provides for the given package", command_list_provides },
9.246 { "list-obsoletes", "list all obsoletes for the given package", command_list_obsoletes },
9.247 { "list-conflicts", "list all conflicts for the given package", command_list_conflicts },
9.248 + { "list-scripts", "list all scripts for the given package", command_list_scripts },
9.249 { "list-files", "list files for package set", command_list_files },
9.250 { "list-file-packages", "list packages owning file", command_list_file_packages },
9.251 { "list-package-files", "list files in package", command_list_package_files },
10.1 --- a/src/rpm.c Wed Jun 03 08:26:09 2009 +0100
10.2 +++ b/src/rpm.c Fri Jun 12 16:59:11 2009 +0100
10.3 @@ -1,6 +1,7 @@
10.4 /*
10.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
10.6 * Copyright (C) 2008 Red Hat, Inc
10.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
10.8 *
10.9 * This program is free software; you can redistribute it and/or modify
10.10 * it under the terms of the GNU General Public License as published by
10.11 @@ -602,17 +603,21 @@
10.12
10.13 if (!option_nodeps && razor_transaction_describe(trans) > 0) {
10.14 printf("unsatisfied dependencies.\n");
10.15 + razor_transaction_destroy(trans);
10.16 exit(1);
10.17 }
10.18
10.19 - if (option_test)
10.20 + if (option_test) {
10.21 + razor_transaction_destroy(trans);
10.22 exit(0);
10.23 + }
10.24
10.25 - next = razor_transaction_finish(trans);
10.26 + next = razor_transaction_commit(trans);
10.27
10.28 if (!option_justdb)
10.29 razor_set_diff(set, next, update_package, NULL);
10.30
10.31 + razor_transaction_destroy(trans);
10.32 razor_set_destroy(set);
10.33 razor_set_destroy(upstream);
10.34
10.35 @@ -644,17 +649,21 @@
10.36
10.37 if (!option_nodeps && razor_transaction_describe(trans) > 0) {
10.38 printf("unsatisfied dependencies.\n");
10.39 + razor_transaction_destroy(trans);
10.40 exit(1);
10.41 }
10.42
10.43 - if (option_test)
10.44 + if (option_test) {
10.45 + razor_transaction_destroy(trans);
10.46 exit(0);
10.47 + }
10.48
10.49 - next = razor_transaction_finish(trans);
10.50 + next = razor_transaction_commit(trans);
10.51
10.52 if (!option_justdb)
10.53 razor_set_diff(set, next, update_package, NULL);
10.54
10.55 + razor_transaction_destroy(trans);
10.56 razor_set_destroy(set);
10.57 razor_set_destroy(upstream);
10.58
10.59 @@ -686,17 +695,21 @@
10.60
10.61 if (!option_nodeps && razor_transaction_describe(trans) > 0) {
10.62 printf("unsatisfied dependencies.\n");
10.63 + razor_transaction_destroy(trans);
10.64 exit(1);
10.65 }
10.66
10.67 - if (option_test)
10.68 + if (option_test) {
10.69 + razor_transaction_destroy(trans);
10.70 exit(0);
10.71 + }
10.72
10.73 - next = razor_transaction_finish(trans);
10.74 + next = razor_transaction_commit(trans);
10.75
10.76 if (!option_justdb)
10.77 razor_set_diff(set, next, update_package, NULL);
10.78
10.79 + razor_transaction_destroy(trans);
10.80 razor_set_destroy(set);
10.81 razor_set_destroy(upstream);
10.82
11.1 --- a/src/test-driver.c Wed Jun 03 08:26:09 2009 +0100
11.2 +++ b/src/test-driver.c Fri Jun 12 16:59:11 2009 +0100
11.3 @@ -1,6 +1,7 @@
11.4 /*
11.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
11.6 * Copyright (C) 2008 Red Hat, Inc
11.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
11.8 *
11.9 * This program is free software; you can redistribute it and/or modify
11.10 * it under the terms of the GNU General Public License as published by
11.11 @@ -336,7 +337,8 @@
11.12
11.13 if (!errors) {
11.14 struct razor_set *new;
11.15 - new = razor_transaction_finish(ctx->trans);
11.16 + new = razor_transaction_commit(ctx->trans);
11.17 + razor_transaction_destroy(ctx->trans);
11.18 ctx->trans = NULL;
11.19 ctx->system_set = new;
11.20 }
12.1 --- a/test/remove.sh Wed Jun 03 08:26:09 2009 +0100
12.2 +++ b/test/remove.sh Fri Jun 12 16:59:11 2009 +0100
12.3 @@ -1,4 +1,19 @@
12.4 #!/bin/sh
12.5 +fs_check_file()
12.6 +{
12.7 + if [ ! -e "$RAZOR_ROOT$1" ]; then
12.8 + echo $1: Not in filesystem >&2
12.9 + ls -R "$RAZOR_ROOT" >&2
12.10 + exit 1
12.11 + fi
12.12 +}
12.13 +fs_check_no_file()
12.14 +{
12.15 + if [ -e "$RAZOR_ROOT$1" ]; then
12.16 + echo $1: Still in filesystem >&2
12.17 + exit 1
12.18 + fi
12.19 +}
12.20 check_file()
12.21 {
12.22 ../src/razor list-files | grep -x "$1" > /dev/null
12.23 @@ -28,10 +43,7 @@
12.24 exit 1
12.25 fi
12.26 done
12.27 - if [ ! -e "$RAZOR_ROOT$1" ]; then
12.28 - echo $1: Not in filesystem >&2
12.29 - exit 1
12.30 - fi
12.31 + fs_check_file $1
12.32 }
12.33 check_no_file()
12.34 {
12.35 @@ -40,19 +52,18 @@
12.36 echo $1: Still in database >&2
12.37 exit 1
12.38 fi
12.39 - if [ -e "$RAZOR_ROOT$1" ]; then
12.40 - echo $1: Still in filesystem >&2
12.41 - exit 1
12.42 - fi
12.43 + fs_check_no_file $1
12.44 }
12.45 export RAZOR_ROOT=`mktemp -dt` || exit 1
12.46 ../src/razor init || exit 1
12.47 export YUM_URL="file://localhost/`pwd`"
12.48 ../src/razor import-yum || exit 1
12.49 ../src/razor install zip || exit 1
12.50 +fs_check_file /usr/var/lib/zip/data.zap
12.51 ../src/razor remove zip || exit 1
12.52 check_file /usr/bin/zap
12.53 check_no_file /usr/bin/zip
12.54 +fs_check_no_file /usr/var/lib/zip/data.zap
12.55 ../src/razor install zsh || exit 1
12.56 ../src/razor install zsh2 || exit 1
12.57 ../src/razor remove zsh || exit 1
13.1 --- a/test/zip.spec Wed Jun 03 08:26:09 2009 +0100
13.2 +++ b/test/zip.spec Fri Jun 12 16:59:11 2009 +0100
13.3 @@ -43,7 +43,6 @@
13.4 end
13.5
13.6 %postun -p <lua>
13.7 -print("zip: postun script\n");
13.8 prefix=posix.getenv("RPM_INSTALL_PREFIX0")
13.9 if prefix==nil then
13.10 prefix="/usr"