Pass script failures up to caller
authorJ. Ali Harlow <ali@juiblex.co.uk>
Sat, 11 Feb 2012 09:49:58 +0000 (09:49 +0000)
committerJ. Ali Harlow <ali@juiblex.co.uk>
Sat, 11 Feb 2012 09:49:58 +0000 (09:49 +0000)
librazor/razor.c
librazor/rpm.c

index 45c9fef..c79697f 100644 (file)
@@ -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 *
index db37119..57aeda2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2008  Kristian Høgsberg <krh@redhat.com>
  * Copyright (C) 2008  Red Hat, Inc
- * Copyright (C) 2009, 2011  J. Ali Harlow <ali@juiblex.co.uk>
+ * Copyright (C) 2009, 2011, 2012  J. Ali Harlow <ali@juiblex.co.uk>
  *
  * 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