blob: 0d3c824489b59c6b3cd87fdcd572d99513aa8e60 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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 $LOG.
=> /logs/$LOG.gmi My $LOG" \
>> "$FILENAME"
fi
else
if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then
echo "From my $LOG.
=> /logs/$LOG.gmi 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.
=> /logs/$LOG.gmi 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 -rf "$TMP"
echo "Done."
|