diff options
| author | Danilo M. <danix@danix.xyz> | 2026-05-18 17:04:02 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-05-18 17:04:02 +0200 |
| commit | dea52efa3e93c34b0baa81c7987d59483ec83c34 (patch) | |
| tree | 6daea3e091b51278b4e2411cce78d9c47ef8b168 | |
| parent | 8e7bb77a16cad59928225c59b2e6f43fd00d1cb4 (diff) | |
| download | pkgs-html-structure-dea52efa3e93c34b0baa81c7987d59483ec83c34.tar.gz pkgs-html-structure-dea52efa3e93c34b0baa81c7987d59483ec83c34.zip | |
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 <noreply@anthropic.com>
| -rw-r--r-- | gen_web_hook.sh | 102 |
1 files 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; } </style>' # ── Shared footer signature ─────────────────────────────────────────────────── -footer_sig() { +footer_sig_inner() { cat << 'EOF' -<footer class="site-footer"> - <div class="footer-inner"> <div class="footer-sig"> <span>danix packages · Slackware64-current</span> <span class="footer-sep">·</span> @@ -117,6 +131,16 @@ footer_sig() { <span class="footer-sep">·</span> <span>GPG signed · use at your own risk</span> </div> +EOF +} + +footer_sig() { + cat << 'EOF' +<footer class="site-footer"> + <div class="footer-inner"> +EOF + footer_sig_inner + cat << 'EOF' </div> </footer> </body> @@ -149,20 +173,13 @@ generate_root_footer() { RSS feed </a> </div> - <div class="footer-sig"> - <span>danix packages · Slackware64-current</span> - <span class="footer-sep">·</span> - <a href="https://danix.xyz/is/here/">Contact danix</a> - <span class="footer-sep">·</span> - <span>GPG signed · use at your own risk</span> - </div> +$(footer_sig_inner) </div> </footer> </body> </html> 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 '</div><!-- .autoindex-wrapper -->'; footer_sig; } > "$pkg_dir/_footer.html" + { echo '</div><!-- .autoindex-wrapper -->'; footer_sig; } | write_if_changed "$pkg_dir/_footer.html" return fi @@ -234,55 +251,16 @@ generate_package_footer() { echo '</section>' 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 -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>danix Slackware Repository</title> - <link rel="icon" type="image/png" href="/.assets/img/favicon.png"> - <link rel="preconnect" href="https://fonts.googleapis.com"> - <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&family=IBM+Plex+Sans:wght@300;400;600&display=swap" rel="stylesheet"> - <script src="/.assets/js/matrix-rain.js" defer></script> - ${CSS} -</head> -<body> -<header class="site-header"> - <div class="header-top"> - <div class="site-title"><span>//</span> <a href="https://packages.danix.xyz" style="color:var(--accent)">danix packages</a></div> - <div class="site-subtitle">Slackware64-current · unofficial repository</div> - </div> - <p class="header-desc"> - Third-party Slackware packages built with - <a href="https://github.com/aclemons/slackrepo" style="color:var(--accent)">slackrepo</a> - on Slackware64-current. Use at your own risk. All packages are signed with my GPG key. - </p> - <div class="header-links"> - <a href="https://danix.xyz/is/here/">Contact me</a> - <a href="/ChangeLog.txt">ChangeLog</a> - <a href="/ChangeLog.rss">RSS</a> - </div> -</header> -<div class="autoindex-wrapper"> -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=" <div class=\"category-pill\"><span>$(html_escape "$cat_name")</span></div>" + write_if_changed "$dir/_header.html" << EOF <!DOCTYPE html> <html lang="en"> <head> @@ -311,18 +289,16 @@ write_category_header() { <a href="/ChangeLog.txt">ChangeLog</a> <a href="/ChangeLog.rss">RSS</a> </div> - <div class="category-pill"><span>$(html_escape "$cat_name")</span></div> +${pill} </header> <div class="autoindex-wrapper"> EOF - log "Written: $dir/_header.html" } # ── Generate category _footer.html (just the signature) ────────────────────── generate_category_footer() { local cat_dir="$1" - { echo '</div><!-- .autoindex-wrapper -->'; footer_sig; } > "$cat_dir/_footer.html" - log "Written: $cat_dir/_footer.html" + { echo '</div><!-- .autoindex-wrapper -->'; 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 |
