From 365dddee1be6f7740e2c0d32d2c57194789520da Mon Sep 17 00:00:00 2001 From: poach3r Date: Tue, 15 Sep 2026 22:07:14 -0400 Subject: [PATCH] perf(hooks-runtime): avoid forking cat/rm per hook when flushing parallel output nixhooks_wait_parallel forked cat and rm once per hook just to flush its buffered log and delete it. Instead, we read the log via a shell builtin and batch the cleanup. --- lib/hooks-runtime.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/hooks-runtime.sh b/lib/hooks-runtime.sh index 8786e9b..eb018b2 100644 --- a/lib/hooks-runtime.sh +++ b/lib/hooks-runtime.sh @@ -123,14 +123,15 @@ run_hook_parallel() { # buffered output once it finishes and folding a nonzero exit into # NIXHOOKS_FAILED. Always exits 0. nixhooks_wait_parallel() { - local i st + local i st content for i in "${!NIXHOOKS_PARALLEL_PIDS[@]}"; do st=0 wait "${NIXHOOKS_PARALLEL_PIDS[$i]}" || st=$? - cat "${NIXHOOKS_PARALLEL_LOGS[$i]}" - rm -f "${NIXHOOKS_PARALLEL_LOGS[$i]}" + content="$(<"${NIXHOOKS_PARALLEL_LOGS[$i]}")" + [[ -n "$content" ]] && printf '%s\n' "$content" [[ "$st" -ne 0 ]] && NIXHOOKS_FAILED=1 done + rm -f "${NIXHOOKS_PARALLEL_LOGS[@]}" NIXHOOKS_PARALLEL_PIDS=() NIXHOOKS_PARALLEL_NAMES=() NIXHOOKS_PARALLEL_LOGS=() -- knotmirror 0.0.1