cgal/Scripts/developer_scripts/test_merge_of_branch

93 lines
2.6 KiB
Bash
Executable File

#!/bin/zsh
zmodload zsh/stat
dir=`dirname "$0"`
PATH=$dir:$PATH
if [ -z "`git --version`" ]; then
echo 'This script needs git!' >&2
exit 1
fi
if ! git diff --exit-code > /dev/null || ! git diff --staged --exit-code > /dev/null ; then
echo 'Your working directory contains local modifications!' >&2
exit 1
fi
cd "`git rev-parse --show-toplevel`"
if [ -n "`git ls-files --other --exclude-standard --exclude=build\*`" ]; then
echo 'You have untracked files!' >&2
exit 1
fi
branch=$1
if ! git rev-parse "$branch" > /dev/null 2>&1; then
echo "\"$branch\" is not a valid branch!" >&2
exit 1
fi
trap 'echo "(aborting the merge now)" && git merge --abort' EXIT
echo ".. Test merging of the branch \"$branch\"..."
git merge --no-commit "$branch" && git status && git diff --staged --summary
if true; then # REMOVE
echo '.. Testing permissions...'
detect_wrong_permissions || exit 1
echo '.. Testing licenses...'
detect_packages_licenses || exit 1
if ! git diff --exit-code > /dev/null; then
echo '=> There are modifications in licenses:'
git status --porcelain
exit 1
fi
fi # REMOVE
if [ -d build ] && \
[ -f build/CMakeCache.txt ] && \
[ "$(grep -c -iE 'WITH_(demos|examples|tests):BOOL=(ON|TRUE|1)' build/CMakeCache.txt)" -eq "3" ]; then
echo '.. Testing CMake configuration...'
cmake_output=( ${(f)"$(cmake build >/dev/null 2>&1)"} )
cmake_exit_code=$?
if [ "$cmake_exit_code" -ne 0 ]; then
echo 'CMake error:'
string=${(F)cmake_output}
echo $string
exit 1
else
echo OK
fi
else
echo '.. Skip the CMake test (please configure a build/ CMake binary directory,'
echo 'with -DWITH_tests:BOOL=TRUE -DWITH_examples:BOOL=TRUE -DWITH_demos:BOOL=TRUE)'
fi
echo '.. List of new files (please check that it is the expected list:'
new_files=( ${(f)"$(git status --porcelain | grep -E '^A')"} )
if [ ${#new_files[@]} -gt 0 ]; then
string=${(F)new_files}
echo $string
else
echo 'No new files.'
fi
current_rev=$(git rev-parse HEAD)
trap 'echo "(aborting the merge now)" && git reset --quiet --hard ${current_rev}' EXIT
echo '.. Dummy merge commit...'
conflicts=( ${(f)"$(git status --porcelain | awk '/^[^ ][^ ]/ {print $2}')"} )
if [ ${#conflicts[@]} -gt 0 ]; then git add $conflicts || exit 1; fi
git commit -m 'dummy merge commit' || exit 1
echo '.. Size of the gzipped bundle'
trap 'echo "(aborting the merge now)" && rm bundle.gz && git reset --quiet --hard ${current_rev}' EXIT
git bundle create bundle ${current_rev}..HEAD > /dev/null 2>&1 && gzip bundle || exit 1
size=$(zstat +size bundle.gz)
echo "=> $size"
exit 0