diff --git a/generate-blog.bash b/generate-blog.bash index 954a464..9e42a30 100755 --- a/generate-blog.bash +++ b/generate-blog.bash @@ -150,6 +150,59 @@ el-enclose() { printf '%s' "" } +publish-html() { + declare source_dir="$1" publish_dir="$2" contents="$3" + + declare pubdate_file="$source_dir/publish_date.txt" \ + checksum_file="$source_dir/last_checksum.txt" \ + last_edit_file="$source_dir/last_edit_date.txt" \ + current_checksum='' + + current_checksum="$(cksum <<<"$contents")" + declare checksum='' + + # Determine a publishing date for the post + if [[ -f "$pubdate_file" ]]; then + read -r pubdate < "$pubdate_file" + else + pubdate="$(date)" + echo "$pubdate" > "$pubdate_file" + fi + + if [[ -f "$checksum_file" ]]; then + read -r checksum < "$checksum_file" + else + echo "$current_checksum" > "$checksum_file" + checksum="$current_checksum" + fi + + if [[ -f "$last_edit_file" ]]; then + read -r last_edit_date < "$last_edit_file" + fi + + if [[ "$checksum" != "$current_checksum" ]]; then + last_edit_date="$(date)" + + echo "$last_edit_date" > "$last_edit_file" + echo "$current_checksum" > "$checksum_file" + fi + + declare pubdate='' last_edit_date='' + # Convert publishing date to be conform RFC 822 + pubdate="$(rfc-822-date-time --date="$pubdate")" || return $? + last_edit_date="$(rfc-822-date-time --date="$last_edit_date")" || return $? + + declare index_file="$publish_dir/index.html" + if [[ "$checksum" != "$current_checksum" ]] || ! [[ -f "$index_file" ]]; then + printf 'Publishing to %s\n' "$index_file" >&2 + mkdir -p "$publish_dir" || return $? + + print-post-html-top "$title" > "$index_file" + printf '%s\n' "$contents" >> "$index_file" + print-post-html-bottom "$pubdate" "$last_edit_date" >> "$index_file" + fi +} + publish_dir="$here/publish" site_url="https://hugot.nl" @@ -185,61 +238,14 @@ while read -r post_html_path; do post_dir="$(dirname "$post_html_path")" || exit $? post_publish_dir="$publish_dir/posts/$(basename "$post_dir")" || exit $? - pubdate_file="$post_dir/publish_date.txt" - checksum_file="$post_dir/last_checksum.txt" - last_edit_file="$post_dir/last_edit_date.txt" - read -rd '' post_html < "$post_html_path" || true - current_checksum="$(cksum <<<"$post_html")" - declare checksum='' - - # Determine a publishing date for the post - if [[ -f "$pubdate_file" ]]; then - read -r pubdate < "$pubdate_file" - else - pubdate="$(date)" - echo "$pubdate" > "$pubdate_file" - fi - if [[ -f "$checksum_file" ]]; then - read -r checksum < "$checksum_file" - else - echo "$current_checksum" > "$checksum_file" - checksum="$current_checksum" - fi - - if [[ -f "$last_edit_file" ]]; then - read -r last_edit_date < "$last_edit_file" - fi - - if [[ "$checksum" != "$current_checksum" ]]; then - last_edit_date="$(date)" - - echo "$last_edit_date" > "$last_edit_file" - echo "$current_checksum" > "$checksum_file" - fi - - # Convert publishing date to be conform RFC 822 - pubdate="$(rfc-822-date-time --date="$pubdate")" - last_edit_date="$(rfc-822-date-time --date="$last_edit_date")" - - declare post_index_file="$post_publish_dir/index.html" - if [[ "$checksum" != "$current_checksum" ]] || ! [[ -f "$post_index_file" ]]; then - printf 'Publishing %s\n' "$post_html_path" >&2 - mkdir -p "$post_publish_dir" - - print-post-html-top "$title" > "$post_index_file" - printf '%s\n' "$post_html" >> "$post_index_file" - print-post-html-bottom "$pubdate" "$last_edit_date" >> "$post_index_file" - fi + publish-html "$post_dir" "$post_publish_dir" "$post_html" { el div - printf '

%s

' "$href" "$title" - printf '%s' "$pubdate" - el 'p style="margin-top: 0.5em;"' printf '%s ... Continue reading' "$excerpt" "$href" el-close p