You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.1 KiB
98 lines
3.1 KiB
#!/bin/bash |
|
|
|
# Set the current target version |
|
TARGET=${TARGET:-"14.0.0"} |
|
|
|
# When $SUFFIX = true then the package tarball name will be $package-trinity. |
|
# When $SUFFIX != true then the package tarball name will be trinity-$package. |
|
# Choose the option that satisfies any distro package name rules. |
|
SUFFIX=${SUFFIX:-"true"} |
|
|
|
# Setting where the tarball will be created. |
|
# The default is the parent directory (..). |
|
TARBALL_DIR=${TARBALL_DIR:-".."} |
|
|
|
# Set compression method |
|
case ${COMPRESS:="xz"} in |
|
"gzip") TAR_SUFFIX="gz";; |
|
"bzip2") TAR_SUFFIX="bz2";; |
|
"xz") TAR_SUFFIX="xz";; |
|
esac |
|
|
|
# Check git-dir |
|
if [[ ! -e .git ]] || |
|
[[ -z "`git rev-parse --git-dir 2>/dev/null`" ]]; then |
|
echo "This script can only be run from a top level git directory. Exiting..." |
|
exit 1 |
|
fi |
|
|
|
# Check remote branch |
|
branch=`git branch --contains HEAD | grep -v "no branch" | head -n1 | cut -c 3-` |
|
if [[ -z "$branch" ]] || |
|
[[ -z "`git rev-parse --symbolic-full-name --remotes=\"*/$branch\"`" ]]; then |
|
echo "There is not active upstream branch. Exiting..." |
|
exit 1 |
|
fi |
|
|
|
# Check submodules |
|
if [[ -e .gitmodules ]]; then |
|
sed -n "s|^\[submodule \"\([^\"]*\)\"\]$|\1|p" <.gitmodules | \ |
|
while read submodule; do |
|
if [[ ! -e "$submodule/.git" ]]; then |
|
git submodule init -- "$submodule" |
|
git submodule update -- "$submodule" |
|
fi |
|
done |
|
fi |
|
|
|
# Check status |
|
if [[ ! -z "`git status --porcelain`" ]]; then |
|
echo "Current tree contains changes that have not been committed. Exiting..." |
|
exit 1 |
|
fi |
|
if [[ -z "`git branch -r --contains HEAD`" ]]; then |
|
echo "Current tree contains commits not pushed to the server. Exiting..." |
|
exit 1 |
|
fi |
|
|
|
target_tag=`git tag | grep -F "$TARGET" | head -n1` |
|
if [[ -n "$target_tag" ]] && \ |
|
[[ `git log $target_tag..HEAD | wc -l` -gt 0 ]]; then |
|
echo "Current tree contains commits beyond target release tag $target_tag. Exiting..." |
|
exit 1 |
|
fi |
|
if [[ -n "$target_tag" ]] && \ |
|
[[ `git log HEAD..$target_tag | wc -l` -gt 0 ]]; then |
|
echo "Current tree is behind target release tag $target_tag. Exiting..." |
|
exit 1 |
|
fi |
|
|
|
# Calculate version |
|
tag=`git tag | sort -r | while read t; do \ |
|
git branch --contains $t | cut -c 3- | grep -x "$branch" >/dev/null && \ |
|
echo "$t..HEAD" && break; done` |
|
|
|
count=`git log $tag --pretty=oneline | wc -l` |
|
|
|
if [ "$SUFFIX" = "true" ]; then |
|
package=$(basename $PWD)-trinity-$TARGET |
|
else |
|
package=trinity-$(basename $PWD)-$TARGET |
|
fi |
|
if [[ "$count" -gt 0 ]] || [[ -z "$target_tag" ]]; then |
|
package=$package~pre$count+$(git rev-parse HEAD | cut -c 1-8) |
|
fi |
|
|
|
# Create tarball |
|
echo "Package name: $package" |
|
if [ ! -e $TARBALL_DIR/$package.tar.$TAR_SUFFIX ]; then |
|
echo "Creating tarball in $TARBALL_DIR." |
|
trap "rm $TARBALL_DIR/tar-$$; exit 1" INT |
|
tar c --owner=root --group=users --exclude .git --exclude .gitmodules --transform "s|^\.|$package|" ./ | \ |
|
$COMPRESS -9 >$TARBALL_DIR/tar-$$ && \ |
|
mv $TARBALL_DIR/tar-$$ $TARBALL_DIR/$package.tar.$TAR_SUFFIX || \ |
|
rm $TARBALL_DIR/tar-$$ |
|
else |
|
echo "Unchanged tarball in $TARBALL_DIR." |
|
exit 2 |
|
fi
|
|
|