summaryrefslogtreecommitdiff
path: root/capsule
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-04-10 10:00:47 +0100
committerJoe Carstairs <me@joeac.net>2026-04-10 10:01:33 +0100
commit4f3ca6cdfd766192958fa00637e954566b5543f8 (patch)
tree2bf01441a72e2a659bc6f2bc6361a96869f12b20 /capsule
parent719c9afde558f157ee3cf2a96b0b7a5ec19d4ece (diff)
loglog builder
Diffstat (limited to 'capsule')
-rw-r--r--capsule/.gitignore2
-rwxr-xr-xcapsule/build_loglog.sh131
-rw-r--r--capsule/loglog-header.gmi4
3 files changed, 137 insertions, 0 deletions
diff --git a/capsule/.gitignore b/capsule/.gitignore
index 2747379..4651ceb 100644
--- a/capsule/.gitignore
+++ b/capsule/.gitignore
@@ -1 +1,3 @@
.certificates
+content/logs/loglog.gmi
+tmp-build-loglog-*
diff --git a/capsule/build_loglog.sh b/capsule/build_loglog.sh
new file mode 100755
index 0000000..12c8af8
--- /dev/null
+++ b/capsule/build_loglog.sh
@@ -0,0 +1,131 @@
+#!/bin/bash
+
+TMP="tmp-build-loglog-$(date +%s%N)"
+LOGLOG="content/logs/loglog.gmi"
+LOGLOG_HEADER="loglog-header.gmi"
+
+new_filename()
+{
+ DATE="$1"
+ mkdir -p "$TMP/$DATE"
+ N=0
+ while [[ -f "$TMP/$DATE/$N" ]]; do
+ N=$(( N + 1 ))
+ done
+ echo "$TMP/$DATE/$N"
+}
+
+read_log_to_tmp()
+{
+ LOGPATH="$1"
+ LOG="$(echo $LOGPATH | sed "s/.*\///g" | sed "s/\.gmi//g")"
+ CURRENT_POST_HEADING=""
+ CURRENT_POST_FILENAME=""
+ while read line; do
+ if [[ -z "$CURRENT_POST_FILENAME" ]]; then
+ if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then
+ CURRENT_POST_HEADING="${BASH_REMATCH[1]}"
+ DATE="${BASH_REMATCH[2]}"
+ CURRENT_POST_FILENAME="$(new_filename $DATE)"
+ elif [[ "$line" =~ \=\>\ +([^\ ]+)\ +([0-9]{4}-[0-9]{2}-[0-9]{2})\ +(.*) ]]; then
+ HREF="${BASH_REMATCH[1]}"
+ DATE="${BASH_REMATCH[2]}"
+ NAME="${BASH_REMATCH[3]}"
+ FILENAME="$(new_filename $DATE)"
+ echo "
+=> $HREF $DATE $NAME
+
+From my gemlog.
+
+=> /gemlog My $LOG" \
+ >> "$FILENAME"
+ fi
+ else
+ if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then
+ echo "From my $LOG.
+
+=> /$LOG My $LOG" \
+ >> "$CURRENT_POST_FILENAME"
+ CURRENT_POST_HEADING="${BASH_REMATCH[1]}"
+ DATE="${BASH_REMATCH[2]}"
+ CURRENT_POST_FILENAME="$(new_filename $DATE)"
+ elif [[ "$line" =~ \#.* ]] && ! [[ "$line" =~ ${CURRENT_POST_HEADING}\#.* ]]; then
+ echo "From my $LOG.
+
+=> /$LOG My $LOG" \
+ >> "$CURRENT_POST_FILENAME"
+ CURRENT_POST_HEADING=""
+ DATE=""
+ CURRENT_POST_FILENAME=""
+ else
+ echo "$line" >> "$CURRENT_POST_FILENAME"
+ fi
+ fi
+ done <$LOGPATH
+}
+
+trim_entries()
+{
+ ENTRY_DIR="$1"
+ for entry in $ENTRY_DIR/*; do
+ while [[ -z "$(head -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do
+ tail -n +2 "$entry" | tee "$entry" 1>0
+ done
+ while [[ -z "$(tail -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do
+ head -n -1 "$entry" | tee "$entry" 1>0
+ done
+ if [[ -z "$(cat "$entry")" ]]; then
+ echo "Removing entry $entry: $(cat $entry)"
+ rm "$entry"
+ fi
+ done
+ if [[ "$(ls "$ENTRY_DIR" | wc -l)" -eq 0 ]]; then
+ rmdir "$ENTRY_DIR"
+ fi
+}
+
+append_entries_for_date()
+{
+ DATE_DIR="$1"
+ DATE="$(echo "$DATE" | sed "s/.*\///g")"
+ echo "## $DATE
+" >> "$LOGLOG"
+ ENTRY_COUNT="$(ls $DATE_DIR | wc -l)"
+ LAST_ENTRY="$(ls $DATE_DIR | tail -n 1)"
+ for entry in $DATE_DIR/*; do
+ cat "$entry" >> "$LOGLOG"
+ echo "" >> "$LOGLOG"
+ if [[ "$ENTRY_COUNT" -gt 1 && "$entry" != "$DATE_DIR/$LAST_ENTRY" ]]; then
+ echo \
+------------------------------------------------------------------------ >> "$LOGLOG"
+ echo "" >> "$LOGLOG"
+ fi
+ done
+}
+
+echo "Cleaning existing loglog..."
+rm -f "$LOGLOG"
+
+echo "Reading logs to temporary files..."
+for log in content/logs/*log.gmi; do
+ read_log_to_tmp "$log"
+done
+
+echo "Trimming entries in temporary files..."
+for date in $TMP/*; do
+ trim_entries "$date"
+done
+
+echo "Copying loglog header..."
+cp "$LOGLOG_HEADER" "$LOGLOG"
+
+echo "Appending entries to loglog..."
+dates=($TMP/*)
+for ((i=${#dates[@]}-1; i>=0; i--)); do
+ append_entries_for_date "${dates[i]}"
+done
+
+echo "Cleaning up temporary files..."
+rm -rd "$TMP"
+
+echo "Done."
diff --git a/capsule/loglog-header.gmi b/capsule/loglog-header.gmi
new file mode 100644
index 0000000..0a5f401
--- /dev/null
+++ b/capsule/loglog-header.gmi
@@ -0,0 +1,4 @@
+# joeac's loglog
+
+Hi! I'm Joe Carstairs, and you've found my loglog; my log of logs; all my posts of every description, all gathered into one place. If you're really that interested in my posts, I would encourage you to strongly consider the benefits of touching grass.
+