blob: 1efdbdee52901e07427b5431fc1fded11e075820 [file] [log] [blame]
#!/bin/sh
#
# Extract git commit date info to generate autodate.tex.
# If invoked on not-clean git repository, append "(m)" to date field
# for title.
# If git status is not available, use current date instead.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you can access it online at
# http://www.gnu.org/licenses/gpl-2.0.html.
#
# Copyright (C) Akira Yokosawa, 2017--2021, 2023
#
# Authors: Akira Yokosawa <akiyks@gmail.com>
export LC_TIME=C
qqzbg="false"
fn="autodate.tex"
: ${DATE:=date}
: ${SED:=sed}
# check if we have tcolorbox
tcolorbox_sty=`kpsewhich tcolorbox.sty`
if [ "$tcolorbox_sty" = "" ]
then
echo "Error: package 'tcolorbox' not found. See #5 in FAQ-BUILD.txt." >&2
exit 1
fi
# check if we are in git repository
if ! test -e .git
then
date_str=`$DATE -R`
modified=""
release=""
commitid=""
else
date_str=`git show --format="%cD" | head -1`
# check if git status is clean
gitstatus=`git status --porcelain | wc -l`
if [ $gitstatus != "0" ]
then
modified="(m)"
else
modified=""
fi
if description="`git describe --tags HEAD 2> /dev/null`"
then
case "$description" in
*-g*)
release=`env printf 'Commit: \\\texttt{%s}' "$description"`
commitid="$description"
;;
v*)
release="Release $description"
commitid=$description
qqzbg="true"
;;
Edition*)
release="Edition"
commitid=$description
qqzbg="true"
case "$description" in
*P*)
release="Print $release"
;;
esac
case "$description" in
Edition[.-][0-9]*)
ednum="`echo $description | $SED -e 's/^Edition[.-]\([0-9]*\).*$/\1/'`"
release=`env printf '\\Ordinalstringnum{%s} %s' $ednum "$release"`
;;
esac
case "$description" in
*-rc[0-9]*)
rc="`echo $description | $SED -e 's/^.*-rc\(.*\)$/\1/'`"
release="$release, Release Candidate $rc"
;;
esac
;;
*)
release=`env printf 'Tag: \\\texttt{%s}' "$description"`
commitid=`echo $description | $SED -e 's/.*-\(g.*\)/\1/'`
;;
esac
else
description=`git log --max-count=1 | head -n 1 | $SED -e 's/^commit \([0-9a-f]\{12\}\).*$/g\1/'`
release=`env printf 'Commit: \\\texttt{%s} (shallow clone)' "$description"`
commitid="$description"
fi
fi
if month=`$DATE --date="$date_str" +%B 2>/dev/null`
then
year=`$DATE --date="$date_str" +%Y`
day=`$DATE --date="$date_str" +%e`
else
if month=`$DATE -jR -f "%a, %d %b %Y %T %z" "$date_str" +%B 2>/dev/null`
then
year=`$DATE -jR -f "%a, %d %b %Y %T %z" "$date_str" +%Y`
day=`$DATE -jR -f "%a, %d %b %Y %T %z" "$date_str" +%e`
else
exit 1 # in case precheck fails to error-stop
fi
fi
if test -n "$release"
then
release=`env printf '%s %s' '\\\\' "$release"`
fi
env printf '\\date{%s %s, %s %s %s}\n' $month $day $year "$release" $modified > $fn
env printf '\\newcommand{\\commityear}{%s}\n' $year >> $fn
env printf '\\newcommand{\\commitid}{%s}\n' $commitid$modified >> $fn
env printf '\\IfQqzBg{}{\\setboolean{qqzbg}{%s}}\n' $qqzbg >> $fn
# command for newer tcolorbox (4.40 or later) to have backward-compatible skips
tcbversion=`grep ProvidesPackage $tcolorbox_sty | $SED -e 's/.*version \([0-9]\+\.[0-9]\+\).*/\1/g'`
tcbold=4.39
env printf '%% tcolorbox version: %s\n' $tcbversion >> $fn
if [ $(echo $tcbversion $tcbold | awk '{if ($1 > $2) print 1;}') ] ;
then
env printf '\\tcbsetforeverylayer{autoparskip}\n' >> $fn
fi