#! /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 "" echo `LC_ALL="en_GB.UTF-8" git log -1 --grep="" --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 $f_base $f_base.bkp # Insert last update date last_update=`getLastUpdateDate` sed -i "s/PLACEHOLDER-LAST-UPDATE/${last_update}/" $f_base # Compile latexmk -pdf -jobname=${f_nameonly} ${f_base} mv ${f_nameonly}.pdf $out_dir/${f_dir}/. # Restore source mv $f_base.bkp $f_base cd $work_dir done updateHashes