From: J. Ali Harlow Date: Sat, 11 Feb 2012 09:49:58 +0000 (+0000) Subject: Pass script failures up to caller X-Git-Tag: 0.5.4~7 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=35626de28060a2091c20d629e736f091faef452b;p=razor2.git%2F.git Pass script failures up to caller --- diff --git a/librazor/razor.c b/librazor/razor.c index 45c9fef..c79697f 100644 --- a/librazor/razor.c +++ b/librazor/razor.c @@ -635,7 +635,7 @@ razor_package_remove(struct razor_set *prev, struct razor_set *next, struct razor_package *p; char *buffer, buf[32]; const char *name, *program, *script; - int i, count; + int i, count, retval = 0; struct environment env; struct list *link; const char *prefix; @@ -660,11 +660,11 @@ razor_package_remove(struct razor_set *prev, struct razor_set *next, RAZOR_DETAIL_PREUN, &script, RAZOR_DETAIL_LAST); - razor_run_script(root, RAZOR_PROPERTY_PREUN, program, - script, install_count); + retval = razor_run_script(root, RAZOR_PROPERTY_PREUN, program, + script, install_count); } - if (stage & RAZOR_STAGE_FILES) { + if (!retval && (stage & RAZOR_STAGE_FILES)) { fi = razor_file_iterator_create(prev, package, 1); while (razor_file_iterator_next(fi, &name)) { @@ -682,16 +682,18 @@ razor_package_remove(struct razor_set *prev, struct razor_set *next, } razor_file_iterator_destroy(fi); + + retval = razor_atomic_in_error_state(atomic); } - if (stage & RAZOR_STAGE_SCRIPTS_POST) { + if (!retval && (stage & RAZOR_STAGE_SCRIPTS_POST)) { razor_package_get_details(prev, package, RAZOR_DETAIL_POSTUNPROG, &program, RAZOR_DETAIL_POSTUN, &script, RAZOR_DETAIL_LAST); - razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, script, - install_count); + retval |= razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, + script, install_count); } if (stage & RAZOR_STAGE_SCRIPTS) { @@ -699,7 +701,7 @@ razor_package_remove(struct razor_set *prev, struct razor_set *next, environment_release(&env); } - return razor_atomic_in_error_state(atomic); + return retval; } RAZOR_EXPORT const char * diff --git a/librazor/rpm.c b/librazor/rpm.c index db37119..57aeda2 100644 --- a/librazor/rpm.c +++ b/librazor/rpm.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009, 2011 J. Ali Harlow + * Copyright (C) 2009, 2011, 2012 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 @@ -1141,6 +1141,7 @@ razor_rpm_install(struct razor_rpm *rpm, struct razor_atomic *atomic, const char *path, *name; size_t filesize; char *s; + int retval = 0; assert (rpm != NULL); assert (root != NULL); @@ -1161,10 +1162,10 @@ razor_rpm_install(struct razor_rpm *rpm, struct razor_atomic *atomic, razor_relocations_set_rpm(rpm->relocations, rpm); if (stage & RAZOR_STAGE_SCRIPTS_PRE) - run_script(&installer, RPMTAG_PREINPROG, RPMTAG_PREIN, - install_count); + retval = run_script(&installer, RPMTAG_PREINPROG, RPMTAG_PREIN, + install_count); - if (stage & RAZOR_STAGE_FILES) { + if (!retval && (stage & RAZOR_STAGE_FILES)) { if (installer_init(&installer)) return -1; @@ -1205,13 +1206,15 @@ razor_rpm_install(struct razor_rpm *rpm, struct razor_atomic *atomic, if (installer_finish(&installer)) return -1; + + retval = razor_atomic_in_error_state(atomic); } - if (stage & RAZOR_STAGE_SCRIPTS_POST) - run_script(&installer, RPMTAG_POSTINPROG, RPMTAG_POSTIN, - install_count); + if (!retval && (stage & RAZOR_STAGE_SCRIPTS_POST)) + retval = run_script(&installer, RPMTAG_POSTINPROG, + RPMTAG_POSTIN, install_count); - return 0; + return retval; } RAZOR_EXPORT int