scripts/update-words
#!/bin/bash
Syncs words/notes/images from backup locations to project input directory
Preserves generated poems.json files to avoid redundant extraction
#
Issue 8-042: Added configurable image sync from config.lua
Issue 10-014: Migrated from input-sources.json to unified config.lua
Issue 7-003: Added --force flag to skip file preservation
#
The external sync-to-projects script does rm -rf input/, which would delete
the generated files that scripts/update creates. We preserve and restore them
so the freshness check works correctly.
#
Usage: scripts/update-words [--force]
--force: Skip file preservation (regenerate everything from scratch)
set -euo pipefail
{{{ Parse arguments
FORCE=false
for arg in "$@"; do
case "$arg" in
--force)
FORCE=true
;;
esac
done
}}}
DIR="/mnt/mtwo/programming/ai-stuff/neocities-modernization"
Issue 8-059: route the preserve/restore backup through the project's
tmpfs-backed tmp/ symlink rather than a real on-disk temp/ directory.
"${DIR}/scripts/ensure-tmp-symlink" "${DIR}"
BACKUP_DIR="${DIR}/tmp/preserved-files-$$"
Issue 10-003b: Config helper functions removed
Image syncing now uses centralized external-sync module via scripts/sync-external-files
{{{ preserve_generated_files
Back up generated files before sync (they get deleted by rm -rf input/)
preserve_generated_files() {
local preserved=0
mkdir -p "${BACKUP_DIR}"
for subdir in fediverse messages notes; do
local files_dir="${DIR}/input/${subdir}/files"
if [ -d "${files_dir}" ]; then
mkdir -p "${BACKUP_DIR}/${subdir}"
cp -a "${files_dir}" "${BACKUP_DIR}/${subdir}/"
preserved=$((preserved + 1))
fi
done
if [ $preserved -gt 0 ]; then
echo " 💾 Preserved ${preserved} generated file directories"
fi
}
}}}
{{{ restore_generated_files
Restore generated files after sync
restore_generated_files() {
local restored=0
for subdir in fediverse messages notes; do
local backup_files="${BACKUP_DIR}/${subdir}/files"
if [ -d "${backup_files}" ]; then
mkdir -p "${DIR}/input/${subdir}"
cp -a "${backup_files}" "${DIR}/input/${subdir}/"
restored=$((restored + 1))
fi
done
# Cleanup backup directory
rm -rf "${BACKUP_DIR}"
if [ $restored -gt 0 ]; then
echo " ♻️ Restored ${restored} generated file directories"
fi
}
}}}
{{{ sync_external_files
Issue 10-003b: Use centralized external-sync module
Replaces the old sync_images_from_config() function
sync_external_files() {
echo " 📁 Syncing external files from config..."
"${DIR}/scripts/sync-external-files" || {
echo " ⚠️ Some external file syncs failed (check output above)" >&2
}
}
}}}
{{{ main
Issue 7-003: Skip file preservation when --force is active
if $FORCE; then
echo " 🔄 Force regenerate: skipping file preservation"
else
# Preserve generated files before the destructive sync
preserve_generated_files
fi
Run the external sync script (does rm -rf input/)
/home/ritz/backups/words/sync-to-projects > /dev/null 2>&1
Issue 7-003: Only restore if we preserved (i.e., not in force mode)
if ! $FORCE; then
restore_generated_files
fi
Issue 10-003b: Sync external files (images, etc.) from centralized config
sync_external_files