2015-08-31 00:51:01 +00:00
#!/bin/bash
# $Id$
# This file is part of OpenTTD.
# OpenTTD 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, version 2.
# OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
function show_help {
echo "Usage: version_utils.sh OPTION" >& 2
echo "-s: Output a SHA-256 of the source tree" >& 2
echo "-l: Output the names of all files in the source tree with their SHA-256 hash" >& 2
echo "-n: Output the names of all files in the source tree without a hash" >& 2
echo "-o: Return true (0) if SHA-256 utility can be found" >& 2
echo "-w: Write ./.ottdrev-vc" >& 2
2015-09-14 23:59:27 +00:00
echo "-r TAGNAME: Create a tag, write ./.ottdrev-vc referencing the tag, possibly update README.md," >& 2
2015-08-31 00:51:01 +00:00
echo " commit it and move the tag to point to the new revision. Requires git." >& 2
echo "-h: Show this help" >& 2
}
NAMES =
HASHLIST =
HASH =
TESTOK =
WRITE =
RELEASETAG =
while getopts ":hslnowr:" opt; do
case $opt in
s)
HASH = 1
; ;
l)
HASHLIST = 1
; ;
n)
NAMES = 1
; ;
o)
TESTOK = 1
; ;
w)
WRITE = 1
; ;
r)
RELEASETAG = " $OPTARG "
; ;
h | \? )
show_help
exit 1
; ;
esac
done
HASH_CMD =
function handle_source {
if [ -n " $2 " ] ; then
$HASH_CMD " $1 "
else
echo " $1 "
fi
}
function find_hasher {
if [ "`echo -n " test" | sha256sum 2> /dev/null`" = = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 -" ] ; then
HASH_CMD = sha256sum
elif [ "`echo -n " test" | shasum -a 256 2> /dev/null`" = = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 -" ] ; then
HASH_CMD = shasum -a 256
elif [ "`echo -n " test" | shasum -a 256 -p 2> /dev/null`" = = "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 -" ] ; then
HASH_CMD = shasum -a 256 -p
else
echo "Could not generate SHA-256" >& 2
exit 1
fi
}
function output_hash_list {
read_source "1"
}
function read_source {
handle_source "source.list" " $1 "
handle_source "config.lib" " $1 "
handle_source "configure" " $1 "
handle_source "Makefile.in" " $1 "
handle_source "Makefile.bundle.in" " $1 "
handle_source "Makefile.grf.in" " $1 "
handle_source "Makefile.setting.in" " $1 "
handle_source "Makefile.src.in" " $1 "
while IFS = $'\n' read -r line; do
handle_source " src/ $line " " $1 "
2015-12-06 12:24:39 +00:00
done < <( sed -e 's/^[ \t]*//; s/[ \t]*$//;' -e '/^$/ d;' -e '/^#/ d;' -e '/^..\// d;' -e 's/^rev.cpp$/rev.cpp.in/;' "source.list" )
2015-08-31 00:51:01 +00:00
}
if [ -z " $HASH " -a -z " $NAMES " -a -z " $HASHLIST " -a -z " $TESTOK " -a -z " $WRITE " -a -z " $RELEASETAG " ] ; then
show_help
exit 1
fi
if [ -n " $NAMES " ] ; then
read_source
fi
if [ -n " $HASHLIST " ] ; then
find_hasher
output_hash_list
fi
if [ -n " $HASH " ] ; then
find_hasher
output_hash_list | $HASH_CMD
fi
if [ -n " $WRITE " ] ; then
find_hasher
./findversion.sh > .ottdrev-vc-tmp
output_hash_list | $HASH_CMD >> .ottdrev-vc-tmp
mv .ottdrev-vc-tmp .ottdrev-vc
fi
2015-10-17 09:42:06 +00:00
function unignore_files {
2019-04-03 22:57:24 +00:00
git update-index --no-assume-unchanged README.md jgrpp-changelog.md .ottdrev-vc
2015-10-17 09:42:06 +00:00
}
2015-08-31 00:51:01 +00:00
if [ -n " $RELEASETAG " ] ; then
2019-04-03 22:57:24 +00:00
git update-index --assume-unchanged README.md jgrpp-changelog.md .ottdrev-vc
2015-10-17 09:42:06 +00:00
trap unignore_files EXIT
2015-08-31 00:51:01 +00:00
if ! git diff-index --quiet HEAD; then
echo "Repo is dirty, aborting" >& 2
exit 1
fi
if ! git diff-index --quiet --cached HEAD; then
echo "Repo is dirty, aborting" >& 2
exit 1
fi
2015-10-17 09:42:06 +00:00
if [ " ${ RELEASETAG : 0 : 6 } " = "jgrpp-" -a -n " ${ RELEASETAG : 6 } " ] ; then
if ! grep -q -e " ^### v ${ RELEASETAG : 6 } ( " jgrpp-changelog.md; then
echo " v ${ RELEASETAG : 6 } is not in changelog, aborting " >& 2
exit 1
fi
fi
2015-08-31 00:51:01 +00:00
if ! git tag " $RELEASETAG " ; then
echo "Tag already exists or is not valid, aborting" >& 2
exit 1
fi
if ! ./version_utils.sh -w; then
exit 1
fi
2015-10-17 09:42:06 +00:00
unignore_files
trap '' EXIT
2015-09-14 23:59:27 +00:00
if [ " ${ RELEASETAG : 0 : 6 } " = "jgrpp-" -a -n " ${ RELEASETAG : 6 } " ] ; then
sed -i " 1 s/^\(## JGR's Patchpack version \).\+/\1 ${ RELEASETAG : 6 } / " README.md
fi
2015-10-17 09:42:06 +00:00
git add .ottdrev-vc README.md jgrpp-changelog.md
2015-08-31 00:51:01 +00:00
git commit -m " Version: Committing version data for tag: $RELEASETAG "
git tag -f " $RELEASETAG "
fi
if [ -n " $TESTOK " ] ; then
find_hasher 2> /dev/null
fi