#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: feed FILENAME feed -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message FILENAME the target feed to be generated Generate FILENAME as an Atom feed. The collection type and language are inferred by the name of FILENAME. Examples: Generate a feed for TILs: $ feed src/en/feeds/til.xml EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'h' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) . src/lib.sh FILENAME="${1:-}" eval "$(assert_arg "$FILENAME" 'FILENAME')" COLLECTION="$(basename "$FILENAME" '.xml')" LANGUAGE="$(lang-for "$FILENAME")" DIR="$(dirname "$(dirname "$FILENAME")")/$COLLECTION" . src/lib/base.conf # shellcheck source=/dev/null . src/lib/base."$LANGUAGE".conf now="$(date -uIs)" url="$(url-for "${FILENAME#"$CONTENT_PREFIX"}" | absolute)" site_name_html="$(htmlesc "${site_name:?}")" export now url site_name_html mkdir -p "$(dirname "$FILENAME")" { envsubst < src/lib/feed.xml find "$DIR"/*.sortdata 2>/dev/null | sort -nr | xargs cat | xargs cat printf '\n' } > "$FILENAME"