squeeze

A static site generator that can put the toothpaste back in the tube.
git clone https://git.mulligrubs.me/squeeze
Log | Files | Refs | README | LICENSE

commit 444402031a0467b3e0f7a0c28b4e250326a7f4f3
parent 026ad4022ab61c5cf78990ff5bc711b9dff23e42
Author: St John Karp <stjohn@fuzzjunket.com>
Date:   Mon, 30 Mar 2020 16:01:40 -0500

Use rsync and conditionals to improve speed

Use rsync instead of deleting/copying everything every time.
This ensures we'll only copy assets that have changed.

Implemented some conditionals for the Markdown processing so that
we only output HTML files which don't already exist or for which
the source file has changed in the last seven days.

These changes should make a big improvement in the speed on
subsequent runs.

Diffstat:
Msqueeze.sh | 24+++++++++++-------------
Munsqueeze.sh | 9++-------
2 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/squeeze.sh b/squeeze.sh @@ -6,7 +6,6 @@ SOURCE_DIR=source SITE_PATH=$1 # Create the directory structure. -rm -rf "$SITE_PATH"/"$OUTPUT_DIR"/* find "$SITE_PATH"/"$SOURCE_DIR" -type d | sed "s|^$SITE_PATH/$SOURCE_DIR|$SITE_PATH/$OUTPUT_DIR|" | xargs -0 -d '\n' mkdir -p -- @@ -16,21 +15,20 @@ find "$SITE_PATH"/"$SOURCE_DIR" -type f -name "*.md" -print0 | while IFS= read -r -d '' file; do echo $file NEW_PATH=`echo "$file" | sed "s|^$SITE_PATH/$SOURCE_DIR|$SITE_PATH/$OUTPUT_DIR|" | sed 's|.md$|.html|'` - # Get everything after the metadata and feed it through Pandoc. - sed "1,/^$/d" "$file" | - pandoc --ascii --from markdown+smart --to html | - # Recombine with the metadata and hand it to Prolog. - (sed "/^$/q" "$file" && cat) | - swipl --traditional -q -l parse_entry.pl -g "consult('$SITE_PATH/site.pl'), generate_entry." \ - > "$NEW_PATH" + # Only process files whose destination doesn't exist, or which has been recently changed. + if [ ! -f $NEW_PATH ] || [[ $(find $file -mtime -7) ]]; then + # Get everything after the metadata and feed it through Pandoc. + sed "1,/^$/d" "$file" | + pandoc --ascii --from markdown+smart --to html | + # Recombine with the metadata and hand it to Prolog. + (sed "/^$/q" "$file" && cat) | + swipl --traditional -q -l parse_entry.pl -g "consult('$SITE_PATH/site.pl'), generate_entry." \ + > "$NEW_PATH" + fi done # Copy anything else directly. -find "$SITE_PATH"/"$SOURCE_DIR" -type f -not -name "*.md" -print0 | - while IFS= read -r -d '' file; do - NEW_PATH=`echo "$file" | sed "s|^$SITE_PATH/$SOURCE_DIR|$SITE_PATH/$OUTPUT_DIR|"` - cp "$file" "$NEW_PATH" - done +rsync --archive --delete --verbose --exclude "*.md" --exclude "*.html" --exclude "feeds" "$SITE_PATH/$SOURCE_DIR/" "$SITE_PATH/$OUTPUT_DIR/" # Generate the RSS feed. mkdir -p "$SITE_PATH"/"$OUTPUT_DIR"/feeds diff --git a/unsqueeze.sh b/unsqueeze.sh @@ -6,7 +6,6 @@ SOURCE_DIR=source SITE_PATH=$1 # Create the directory structure. -rm -rf "$SITE_PATH"/"$SOURCE_DIR"/* find "$SITE_PATH"/"$OUTPUT_DIR" -type d | sed "s|^$SITE_PATH/$OUTPUT_DIR|$SITE_PATH/$SOURCE_DIR|" | xargs -0 -d '\n' mkdir -p -- @@ -28,8 +27,4 @@ find "$SITE_PATH"/"$OUTPUT_DIR" -type f -name "*.html" -print0 | # Copy anything else directly. # Excludes the RSS folder, which we create ourselves upon generation. -find "$SITE_PATH"/"$OUTPUT_DIR" -path "$SITE_PATH"/"$OUTPUT_DIR"/feeds -prune -o -type f -not -name "*.html" -print0 | - while IFS= read -r -d '' file; do - NEW_PATH=`echo "$file" | sed "s|^$SITE_PATH/$OUTPUT_DIR|$SITE_PATH/$SOURCE_DIR|"` - cp "$file" "$NEW_PATH" - done- \ No newline at end of file +rsync --archive --delete --verbose --exclude "*.html" --exclude "*.md" --exclude "feeds" "$SITE_PATH/$OUTPUT_DIR/" "$SITE_PATH/$SOURCE_DIR/"+ \ No newline at end of file