From dea52efa3e93c34b0baa81c7987d59483ec83c34 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 18 May 2026 17:04:02 +0200 Subject: refactor(gen_web_hook): skip writes when content unchanged Adds write_if_changed: generates to a same-fs temp file, skips mv if cmp -s matches, otherwise atomically replaces. Trap ensures cleanup on failure. All header/footer write sites ported to use it. Also merges write_header/write_category_header into one function (optional cat_name arg for the pill), and splits footer_sig into footer_sig_inner so generate_root_footer can reuse the sig block without duplicating HTML. Co-Authored-By: Claude Sonnet 4.6 --- gen_web_hook.sh | 102 ++++++++++++++++++++++---------------------------------- 1 file changed, 39 insertions(+), 63 deletions(-) diff --git a/gen_web_hook.sh b/gen_web_hook.sh index 77e2ec0..7be8c87 100644 --- a/gen_web_hook.sh +++ b/gen_web_hook.sh @@ -21,6 +21,22 @@ fi log "Generating static web files in $PKGREPO ..." +# ── Write file only if content changed ─────────────────────────────────────── +write_if_changed() { + local target="$1" + local tmp + tmp=$(mktemp "${target}.XXXXXX") + trap 'rm -f "$tmp"' EXIT + cat > "$tmp" + if cmp -s "$tmp" "$target" 2>/dev/null; then + rm "$tmp" + else + mv "$tmp" "$target" + log "Written: $target" + fi + trap - EXIT +} + # ── HTML escape ─────────────────────────────────────────────────────────────── html_escape() { local s="$1" @@ -106,10 +122,8 @@ address { display: none; } ' # ── Shared footer signature ─────────────────────────────────────────────────── -footer_sig() { +footer_sig_inner() { cat << 'EOF' -
- - +$(footer_sig_inner)
EOF - } > "$PKGREPO/_footer.html" - log "Written: $PKGREPO/_footer.html" + } | write_if_changed "$PKGREPO/_footer.html" } # ── Generate per-package _footer.html ──────────────────────────────────────── @@ -176,7 +193,7 @@ generate_package_footer() { if [ -z "$txt_file" ]; then # No .txt file — minimal footer - { echo ''; footer_sig; } > "$pkg_dir/_footer.html" + { echo ''; footer_sig; } | write_if_changed "$pkg_dir/_footer.html" return fi @@ -234,55 +251,16 @@ generate_package_footer() { echo '' footer_sig - } > "$pkg_dir/_footer.html" - - log "Written: $pkg_dir/_footer.html" + } | write_if_changed "$pkg_dir/_footer.html" } -# ── Write _header.html to a given directory ─────────────────────────────────── +# ── Write _header.html to a given directory (optional category pill) ────────── write_header() { local dir="$1" - cat > "$dir/_header.html" << EOF - - - - - - danix Slackware Repository - - - - - ${CSS} - - - -
-EOF - log "Written: $dir/_header.html" -} - -# ── Write _header.html for a category directory (includes pill) ─────────────── -write_category_header() { - local dir="$1" - local cat_name - cat_name=$(basename "$dir") - cat > "$dir/_header.html" << EOF + local cat_name="${2:-}" + local pill='' + [ -n "$cat_name" ] && pill="
$(html_escape "$cat_name")
" + write_if_changed "$dir/_header.html" << EOF @@ -311,18 +289,16 @@ write_category_header() { ChangeLog RSS
-
$(html_escape "$cat_name")
+${pill}
EOF - log "Written: $dir/_header.html" } # ── Generate category _footer.html (just the signature) ────────────────────── generate_category_footer() { local cat_dir="$1" - { echo '
'; footer_sig; } > "$cat_dir/_footer.html" - log "Written: $cat_dir/_footer.html" + { echo ''; footer_sig; } | write_if_changed "$cat_dir/_footer.html" } # ── Main ────────────────────────────────────────────────────────────────────── @@ -331,7 +307,7 @@ generate_root_footer for category in "$PKGREPO"/*/; do [ -d "$category" ] || continue - write_category_header "$category" + write_header "$category" "$(basename "$category")" generate_category_footer "$category" for pkg in "$category"*/; do [ -d "$pkg" ] || continue -- cgit v1.2.3