aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2026-04-06 19:51:49 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2026-04-06 19:51:49 +0200
commit73e3ec7054ec4e70648c6cdbe313a39f460e6c92 (patch)
treeb4cfc5c82787db7eb6cf5296cff590da551576a4
parent49ba8ae22e7a5fc557814db60d46ec48b837f841 (diff)
downloadsebastiano.tronto.net-73e3ec7054ec4e70648c6cdbe313a39f460e6c92.tar.gz
sebastiano.tronto.net-73e3ec7054ec4e70648c6cdbe313a39f460e6c92.zip
Some attempt at incremental build, but it actually makes it slower
It seems that the bottleneck is just looping over all these files... Moreover, we need to remove files that are no longer wanted from the target, so cleaning the target directory is necessary for now.
-rwxr-xr-xutils/build-incremental.sh237
1 files changed, 237 insertions, 0 deletions
diff --git a/utils/build-incremental.sh b/utils/build-incremental.sh
new file mode 100755
index 0000000..5c6d74c
--- /dev/null
+++ b/utils/build-incremental.sh
@@ -0,0 +1,237 @@
1#!/bin/sh
2
3basedir="$(pwd)"
4
5if [ "$(uname)" = "Linux" ]; then
6 date_last_modified_cmd="stat -c %Y"
7else
8 date_last_modified_cmd="stat -f %m"
9fi
10
11age_top="$($date_last_modified_cmd top.html)"
12age_top_nobar="$($date_last_modified_cmd top-nobar.html)"
13age_bottom="$($date_last_modified_cmd bottom.html)"
14
15recursivebuild() {
16 local destdir=$(echo "$1" | sed 's|^src|http|')
17 mkdir -p "$destdir"
18 for file in "$1"/*; do
19 if [ -d "$file" ]; then
20 mkdir -p "$destdir/$(basename "$file")"
21 recursivebuild "$file"
22 else
23 copyfile "$file" "$destdir"
24 fi
25 done
26}
27
28# This function is currently useless, but we keep it in case we need to
29# preprocess some m4 files.
30mdpreprocess() {
31 file="$1"
32 if [ "$(echo "$file" | sed 's/.*\.//')" = "m4" ]; then
33 printf 'm4_include(macros.m4)m4_dnl\n%s\n' "$(cat "$file")" | \
34 m4 -P -I "$basedir/utils"
35 else
36 cat "$file"
37 fi
38}
39
40copyfile() {
41 file=$1
42 dest=$2
43 ind=$dest/index.html
44 extension=$(echo "$file" | sed 's/.*\.//')
45 age_src="$($date_last_modified_cmd "$file")"
46
47 case "$extension" in
48 # m4 preprocess is currently disabled
49 #m4)
50 # noext=$(echo "$file" | sed 's/\..*//')
51 # mdpreprocess "$file" > $noext.md
52 # ;;
53 md)
54 if [ \( -f "$ind" \) ]; then
55 age_dst="$($date_last_modified_cmd "$ind")"
56 if [ \( "$age_dst" -ge "$age_src" \) -a \
57 \( "$age_dst" -ge "$age_top" \) -a \
58 \( "$age_dst" -ge "$age_bottom" \) ]; then
59 echo "Skipping "$file" -> "$ind""
60 return
61 fi
62 fi
63
64 echo "Building "$file" -> "$ind""
65
66 t="$(markdowntitle "$file")"
67 sed "s/TITLE/$t/" < top.html > "$ind"
68 mdpreprocess "$file" | \
69 lowdown --html-no-skiphtml --html-no-escapehtml \
70 >> "$ind"
71 cat bottom.html >> "$ind"
72 ;;
73 noheadermd)
74 if [ \( -f "$ind" \) ]; then
75 age_dst="$($date_last_modified_cmd "$ind")"
76 if [ \( "$age_dst" -ge "$age_src" \) -a \
77 \( "$age_dst" -ge "$age_top_nobar" \) -a \
78 \( "$age_dst" -ge "$age_bottom" \) ]; then
79 echo "Skipping "$file" -> "$ind""
80 return
81 fi
82 fi
83
84 echo "Building "$file" -> "$ind""
85
86 t="$(markdowntitle "$file")"
87 sed "s/TITLE/$t/" < top-nobar.html > "$ind"
88 mdpreprocess "$file" | \
89 lowdown --html-no-skiphtml --html-no-escapehtml \
90 >> "$ind"
91 ;;
92 html)
93 if [ \( -f "$ind" \) ]; then
94 age_dst="$($date_last_modified_cmd "$ind")"
95 if [ \( "$age_dst" -ge "$age_src" \) -a \
96 \( "$age_dst" -ge "$age_top" \) -a \
97 \( "$age_dst" -ge "$age_bottom" \) ]; then
98 echo "Skipping "$file" -> "$ind""
99 return
100 fi
101 fi
102
103 echo "Copying "$file" -> "$ind""
104
105 t="$(htmltitle "$file")"
106 cat top.html "$file" bottom.html | sed "s/TITLE/$t/" > "$ind"
107 ;;
108 raw)
109 namenoraw="$(basename "$file" | sed 's/\.raw$//')"
110 if [ \( -f "$dest/$namenoraw" \) ]; then
111 age_dst="$($date_last_modified_cmd "$dest/$namenoraw")"
112 if [ "$age_dst" -ge "$age_src" ]; then
113 echo "Skipping "$file" -> "$dest/$namenoraw""
114 return
115 fi
116 fi
117
118 echo "Copying "$file" -> "$dest/$namenoraw""
119
120 cp "$file" "$dest/$namenoraw"
121 ;;
122 *)
123 dest_name="$(basename "$file")"
124 if [ \( -f "$dest/$dest_name" \) ]; then
125 age_dst="$($date_last_modified_cmd "$dest/$dest_name")"
126 if [ "$age_dst" -ge "$age_src" ]; then
127 echo "Skipping "$file" -> "$dest/$dest_name""
128 return
129 fi
130 fi
131
132 echo "Copying "$file" -> "$dest/$dest_name""
133
134 cp "$file" "$dest/$dest_name"
135 esac
136}
137
138markdowntitle() {
139 grep '^# ' "$1" | head -n 1 | sed 's/^# //'
140}
141
142htmltitle() {
143 grep '<!--TITLE: ' "$1" | sed 's/^<!--TITLE: //' | sed 's/-->$//'
144}
145
146makeblogindexandfeed() {
147 mkdir -p http/blog
148 bf=http/blog/index.html
149 ff=http/blog/feed.xml
150
151 sed "s/TITLE/Blog/" < top.html > "$bf"
152 { echo '<h1 id="blog">Blog</h1>';
153 echo '<table id="blog">';
154 echo '<a href="../series">Blog series</a> - ';
155 echo '<a href="feed.xml">RSS feed</a>'; } >> "$bf"
156
157 cp feed-top.xml "$ff"
158
159 for i in $(ls src/blog | sort -r); do
160 [ -d "src/blog/$i" ] || continue
161
162 f="src/blog/$i/*.md"
163 d="$(echo "$i" | grep -oE '^[0-9]{4}-[0-9]{2}-[0-9]{2}')"
164 t="$(markdowntitle $f)"
165 link="https://sebastiano.tronto.net/blog/$i"
166
167 thisyear="$(echo "$d" | sed 's/-.*//')"
168 if [ "$thisyear" != "$lastyear" ]; then
169 echo "<tr><td><h2>$thisyear</h2></td></tr>" >> "$bf"
170 lastyear=$thisyear
171 fi
172
173 { echo "<tr><td>$d</td>";
174 echo "<td><a href=\"$i\">$t</a></td></tr>"; } >> "$bf"
175
176 dd="$(echo "$d" | sed 's/.*-//')"
177 mm="$(echo "$d" | sed 's/....-//' | sed 's/-.*//')"
178 mon="$(month "$mm")"
179 { echo "<item>";
180 echo "<title>$t</title>";
181 echo "<link>$link</link>";
182 echo "<guid isPermaLink=\"true\">$link</guid>";
183 echo "<description>$t</description>";
184 echo "<pubDate>$dd $mon $thisyear 00:00:00 GMT</pubDate>";
185 echo "</item>";
186 echo ""; } >> $ff
187 done
188
189 echo '</table>' >> "$bf"
190 cat bottom.html >> "$bf"
191
192 { echo ""; echo "</channel>"; echo "</rss>"; } >> "$ff"
193}
194
195month() {
196 case "$1" in
197 01)
198 echo "Jan"
199 ;;
200 02)
201 echo "Feb"
202 ;;
203 03)
204 echo "Mar"
205 ;;
206 04)
207 echo "Apr"
208 ;;
209 05)
210 echo "May"
211 ;;
212 06)
213 echo "Jun"
214 ;;
215 07)
216 echo "Jul"
217 ;;
218 08)
219 echo "Aug"
220 ;;
221 09)
222 echo "Sep"
223 ;;
224 10)
225 echo "Oct"
226 ;;
227 11)
228 echo "Nov"
229 ;;
230 12)
231 echo "Dec"
232 ;;
233 esac
234}
235
236makeblogindexandfeed
237recursivebuild src

Generated with cgit - Back to sebastiano.tronto.net