mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-09 19:10:38 +00:00
1b8166b198
Add a script to write a .ottdrev style file: .ottdrev-vc, which also includes a SHA-256 hash of the source tree. Modify findversion.sh to use this file if no VCS info can be found, and use the source tree hash to set the modified status. Include leading digits of hash in version string if different, this is to make it easier to distinguish between modified or non-release versions. Add function to create release tag and create/commit .ottdrev-vc in one go.
146 lines
3.6 KiB
Bash
Executable File
146 lines
3.6 KiB
Bash
Executable File
#!/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
|
|
echo "-r TAGNAME: Create a tag, write ./.ottdrev-vc referencing the tag," >&2
|
|
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"
|
|
done < <( sed -e 's/^[ \t]*//; s/[ \t]*$//;' -e '/^$/ d;' -e '/^#/ d;' -e '/^..\// d;' "source.list" )
|
|
}
|
|
|
|
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
|
|
|
|
if [ -n "$RELEASETAG" ]; then
|
|
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
|
|
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
|
|
git add .ottdrev-vc
|
|
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
|