#!/usr/bin/env bash usage() { printf "Usage: build-db db-file sql-file dir [dirs...]\n" >&2 } create_entry() { FILE="$1" SUBDIR="$2" SQL_FILE="$3" SECTION=$(basename "$FILE" | sed -E 's|.*\.([0-9])\..*|\1|') NAME=$(basename "$FILE" | sed -E 's|(.*)\.[0-9]\.html|\1|') OS=$(basename "$SUBDIR") if [[ -n "$(echo "$FILE" | grep "man$SECTION\.")" ]]; then NAME="$(echo "$FILE" | sed -E "s|.*man$SECTION\.(.*)/.*|\1|" ).$NAME" fi STATEMENT="INSERT INTO manpages (os, name, section, path) VALUES ('"$OS"', '"$NAME"', '"$SECTION"', '"$FILE"');" printf "%s\n" "$STATEMENT" >> "$SQL_FILE" } if [[ $# -lt 3 ]]; then usage exit 1 fi DB_FILE="$1" SQL_FILE="$2" shift 2 SUBDIRS=$@ rm -f "$DB_FILE" cat < "$SQL_FILE" CREATE TABLE manpages ( os TEXT, name TEXT, section INTEGER, path TEXT, PRIMARY KEY (os, name, section) ); EOF printf '{ "AllowedFiles" : [\n' > Allowed.json for SUBDIR in ${SUBDIRS[*]}; do FILES=$(find "$SUBDIR" -type f -regex "$SUBDIR/man[0-9]/.*\.[0-9]\.html") for FILE in ${FILES[*]}; do create_entry "$FILE" "$SUBDIR" "$SQL_FILE" printf '"%s",\n' "$FILE" >> Allowed.json done done printf '"static/htmx.min.js", "static/css/main.css", "static/index.html",' >> Allowed.json printf '"static/logos/favicon.png", "static/logos/favicon.svg", "static/logos/favicon16.png",' >> Allowed.json printf '"static/logos/favicon32.png", "static/logos/FirstInitialLogo.svg", "static/logos/FullNameLogo.svg"]}' >> Allowed.json sqlite3 "$DB_FILE" < "$SQL_FILE" chmod 400 "$DB_FILE" rm "$SQL_FILE"