mirror of
https://github.com/NotXia/unibo-ai-notes.git
synced 2025-12-15 02:52:22 +01:00
93 lines
2.1 KiB
Bash
93 lines
2.1 KiB
Bash
#! /bin/bash
|
|
|
|
#
|
|
# Commit based .tex compiling
|
|
# $1 is the output directory.
|
|
# $2 is the directory of the current state of the files.
|
|
#
|
|
|
|
if [ $# -eq 0 ]; then
|
|
echo "Missing output directory"
|
|
exit -1
|
|
fi
|
|
|
|
shopt -s globstar extglob
|
|
|
|
out_dir=`realpath $1`
|
|
old_out_dir=`realpath $2`
|
|
hash_file="$old_out_dir/.hash"
|
|
new_hash_file="$out_dir/.hash"
|
|
work_dir=`realpath src`
|
|
|
|
mkdir -p $out_dir
|
|
touch $hash_file
|
|
|
|
# $1: path of the directory
|
|
getDirLastHash () {
|
|
path="$1"
|
|
echo `awk -F"," "\\$1 == \"$path\" { print \\$2 } " $hash_file`
|
|
}
|
|
|
|
# $1: path of the directory
|
|
getDirCurrHash () {
|
|
path="$1"
|
|
echo `git log -n 1 --format='%h' $path/**/*.!(cls)`
|
|
}
|
|
|
|
getLastUpdateDate () {
|
|
# Get the last update date.
|
|
# Ignores .cls and commits containing "<noupdate>"
|
|
echo `LC_ALL="en_GB.UTF-8" git log -1 --grep="<noupdate>" --invert-grep --pretty="format:%ad" --date="format:%d %B %Y" ./**/*.!(cls)`
|
|
}
|
|
|
|
updateHashes () {
|
|
cd $work_dir
|
|
echo "ainotes.cls,`git log -n 1 --format='%h' ./ainotes.cls`" > $new_hash_file
|
|
for f in **/[!_]*.tex; do
|
|
f_dir=$(dirname $f)
|
|
echo "$f_dir,`getDirCurrHash $f_dir`" >> $new_hash_file
|
|
done
|
|
}
|
|
|
|
|
|
cd $work_dir
|
|
|
|
old_class_hash=`getDirLastHash "ainotes.cls"`
|
|
curr_class_hash="$(git log -n 1 --format='%h' ./ainotes.cls)"
|
|
|
|
for f in **/[!_]*.tex; do
|
|
f_dir=$(dirname $f)
|
|
f_base=$(basename $f)
|
|
f_nameonly="${f_base%.*}"
|
|
old_hash=`getDirLastHash "$f_dir"`
|
|
curr_hash=`getDirCurrHash "$f_dir"`
|
|
|
|
mkdir -p $out_dir/$f_dir
|
|
|
|
# Nothing to update
|
|
if [[ $old_hash == $curr_hash && $old_class_hash == $curr_class_hash ]]; then
|
|
echo "Skipping $f_dir"
|
|
cp -r $old_out_dir/$f_dir/. $out_dir/$f_dir
|
|
continue
|
|
fi
|
|
|
|
cd ${f_dir}
|
|
|
|
# Save copy of source .tex
|
|
cp main.tex main.bkp.tex
|
|
|
|
# Insert last update date
|
|
last_update=`getLastUpdateDate`
|
|
sed -i "s/PLACEHOLDER-LAST-UPDATE/${last_update}/" main.tex
|
|
|
|
# Compile
|
|
latexmk -pdf -jobname=${f_nameonly} ${f_base}
|
|
mv ${f_nameonly}.pdf $out_dir/${f_dir}/.
|
|
|
|
# Restore source
|
|
mv main.bkp.tex main.tex
|
|
|
|
cd $work_dir
|
|
done
|
|
|
|
updateHashes |