88 lines
1.8 KiB
Bash
Executable file
88 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Find out the posts that have been modified and record
|
|
# its lastmod information to file '_data/updates.yml'
|
|
#
|
|
# Usage:
|
|
# Call from the '_posts' sibling directory.
|
|
#
|
|
# v2.2
|
|
# https://github.com/cotes2020/jekyll-theme-chirpy
|
|
# © 2020 Cotes Chung
|
|
# Published under MIT License
|
|
|
|
set -eu
|
|
|
|
POST_DIR=_posts
|
|
OUTPUT_DIR=_data
|
|
OUTPUT_FILE=updates.yml
|
|
|
|
_init() {
|
|
|
|
if [[ ! -d "$OUTPUT_DIR" ]]; then
|
|
mkdir "$OUTPUT_DIR"
|
|
fi
|
|
|
|
if [[ -f "$OUTPUT_DIR/$OUTPUT_FILE" ]]; then
|
|
rm -f "$OUTPUT_DIR/$OUTPUT_FILE"
|
|
fi
|
|
|
|
if [[ ! -d $POST_DIR ]]; then
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
_has_changed() {
|
|
local _log_count="$(git log --pretty=%ad "$1" | wc -l | sed 's/ *//')"
|
|
_log_count=$((_log_count + 0))
|
|
|
|
if [[ $_log_count > 1 ]]; then
|
|
return 0 # true
|
|
fi
|
|
|
|
return 1 # false
|
|
}
|
|
|
|
###################################
|
|
# Storage the posts' lastmod.
|
|
#
|
|
# Args:
|
|
# - $1 the post's filename
|
|
# - $2 the post's filepath
|
|
# Output:
|
|
# the file '_data/updates.yml'
|
|
###################################
|
|
_dump() {
|
|
local _lasmod="$(git log -1 --pretty=%ad --date=iso "$2")"
|
|
|
|
if [[ ! -f "$OUTPUT_DIR/$OUTPUT_FILE" ]]; then
|
|
touch "$OUTPUT_DIR/$OUTPUT_FILE"
|
|
fi
|
|
|
|
echo "-" >> "$OUTPUT_DIR/$OUTPUT_FILE"
|
|
echo " filename: '$1'" >> "$OUTPUT_DIR/$OUTPUT_FILE"
|
|
echo " lastmod: '$_lasmod'" >> "$OUTPUT_DIR/$OUTPUT_FILE"
|
|
}
|
|
|
|
main() {
|
|
|
|
_init
|
|
|
|
local _count=0
|
|
|
|
for _file in $(find ${POST_DIR} -type f \( -iname \*.md -o -iname \*.markdown \)); do
|
|
_filename="$(basename "$_file" | sed 's/-\-\+/-/;s/[[:digit:]]\([[:digit:]]*-\)//g;s/\..*//')" # remove date and extension
|
|
|
|
if _has_changed "$_file"; then
|
|
_dump "$_filename" "$_file"
|
|
((_count = _count + 1))
|
|
fi
|
|
|
|
done
|
|
|
|
if [[ $_count > 0 ]]; then
|
|
echo "[INFO] Success to update lastmod for $_count post(s)."
|
|
fi
|
|
}
|
|
|
|
main
|