| 1137 | } |
| 1138 | |
| 1139 | static int cli_activation_transaction_finalize_close( |
| 1140 | cbm_activation_transaction_t **transaction_io) { |
| 1141 | if (!transaction_io || !*transaction_io) { |
| 1142 | return CLI_ERR; |
| 1143 | } |
| 1144 | cbm_activation_transaction_status_t status = |
| 1145 | cbm_activation_transaction_finalize(*transaction_io); |
| 1146 | if (status != CBM_ACTIVATION_TRANSACTION_OK && status != CBM_ACTIVATION_TRANSACTION_DEFERRED) { |
| 1147 | (void)cli_activation_transaction_abort(transaction_io); |
| 1148 | return CLI_ERR; |
| 1149 | } |
| 1150 | if (status == CBM_ACTIVATION_TRANSACTION_DEFERRED) { |
| 1151 | const char *deferred = cbm_activation_transaction_deferred_path(*transaction_io); |
| 1152 | cbm_log_warn("cli.activation_backup_cleanup_deferred", "path", |
| 1153 | deferred ? deferred : "unknown"); |
| 1154 | (void)fprintf(stderr, |
| 1155 | "warning: old executable cleanup was deferred until " |
| 1156 | "reboot: %s\n", |
| 1157 | deferred ? deferred : "unknown path"); |
| 1158 | } |
| 1159 | return cli_activation_transaction_abort(transaction_io); |
| 1160 | } |
| 1161 | |
| 1162 | static void cli_activation_transaction_finalize_committed_or_fail_stop( |
| 1163 | cbm_activation_transaction_t **transaction_io, const char *component) { |
no test coverage detected