0d47beba97
- Avoid the empty lastmod file. - Check if there is no post. - Fixed the prompt message.
96 lines
1.8 KiB
Bash
Executable file
96 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 $(ls -r "$POST_DIR")
|
|
do
|
|
_filepath="$POST_DIR/$_file"
|
|
_filename="${_file%.*}" # jekyll cannot read the extension of a file, so omit it.
|
|
_filename=${_filename:11} # remove the date
|
|
|
|
if _has_changed "$_filepath"; then
|
|
_dump "$_filename" "$_filepath"
|
|
((_count=_count+1))
|
|
fi
|
|
|
|
done
|
|
|
|
if [[ $_count > 0 ]]; then
|
|
echo "[INFO] Success to update lastmod for $_count post(s)."
|
|
fi
|
|
}
|
|
|
|
|
|
main
|