transaction: New script_output callback

Used to pass the outputs (stdout and stderr) of an executed scriptlet to
the user.
This commit is contained in:
Marek Blaha 2024-08-21 15:03:14 +02:00
parent b915955ebe
commit 0d6e2cff4d
3 changed files with 15 additions and 0 deletions

View File

@ -92,6 +92,14 @@ public:
virtual void script_error(const TransactionItem * item, Nevra nevra, ScriptType type, uint64_t return_code);
virtual void script_start(const TransactionItem * item, Nevra nevra, ScriptType type);
virtual void script_stop(const TransactionItem * item, Nevra nevra, ScriptType type, uint64_t return_code);
/// Called after the scriptlet finished
/// @param item Transaction item
/// @param nevra NEVRA of the package the scriptlet belongs to
/// @param type Type of the scriptlet
/// @param return_code Return code of the scriptlet: OK, non-critical error, error
/// @param output Output produced by the scriptlet
virtual void script_output(
const TransactionItem * item, Nevra nevra, ScriptType type, uint64_t return_code, const std::string output);
virtual void elem_progress(const TransactionItem & item, uint64_t amount, uint64_t total);
virtual void verify_progress(uint64_t amount, uint64_t total);
virtual void verify_start(uint64_t total);

View File

@ -672,6 +672,8 @@ void * Transaction::ts_callback(
to_full_nevra_string(nevra),
total);
if (callbacks) {
std::lock_guard<std::mutex> lock(transaction.last_script_output_mutex);
callbacks->script_output(item, nevra, script_type, return_code, transaction.last_script_output);
callbacks->script_error(item, nevra, script_type, return_code);
}
} else {
@ -693,6 +695,8 @@ void * Transaction::ts_callback(
if (callbacks) {
callbacks->script_start(item, nevra, script_type);
}
std::lock_guard<std::mutex> lock(transaction.last_script_output_mutex);
transaction.last_script_output = "";
break;
}
case RPMCALLBACK_SCRIPT_STOP: {
@ -706,6 +710,7 @@ void * Transaction::ts_callback(
to_full_nevra_string(nevra),
total);
if (callbacks) {
callbacks->script_output(item, nevra, script_type, total, transaction.last_script_output);
callbacks->script_stop(item, nevra, script_type, total);
}
break;

View File

@ -85,6 +85,8 @@ void TransactionCallbacks::script_start(const TransactionItem *, Nevra, ScriptTy
void TransactionCallbacks::script_stop(const TransactionItem *, Nevra, ScriptType, uint64_t) {}
void TransactionCallbacks::script_output(const TransactionItem *, Nevra, ScriptType, uint64_t, const std::string) {}
void TransactionCallbacks::elem_progress(const TransactionItem &, uint64_t, uint64_t) {}
void TransactionCallbacks::verify_progress(uint64_t, uint64_t) {}