36 lines
1.4 KiB
Bash
36 lines
1.4 KiB
Bash
# This script fragment must be sourced by the main script file
|
|
# in order to define the FIXED_TRAVIS_COMMIT_RANGE variable
|
|
# . .travis/fix_travis_commit_range.sh
|
|
|
|
# TRAVIS_COMMIT_RANGE uses triple-dot syntax to specify which commits have
|
|
# triggered the build. This is wrong. In case of forced push, the previous
|
|
# commit is not an ancestor of the last commit, so it is not present in the
|
|
# cloned repository. And also, the range contains unrelated commits.
|
|
# https://docs.travis-ci.com/user/environment-variables/
|
|
# https://git-scm.com/book/tr/v2/Git-Tools-Revision-Selection
|
|
# https://github.com/travis-ci/travis-ci/issues/4596
|
|
#
|
|
# The solution is to use double-dot syntax instead.
|
|
# In case of forced push, we can't know the previous commit. So we just use
|
|
# the parent commit as previous one.
|
|
|
|
echo TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE
|
|
|
|
PREVIOUS_COMMIT=$(echo $TRAVIS_COMMIT_RANGE | sed 's/\.\.\..*//')
|
|
CURRENT_COMMIT=$TRAVIS_COMMIT
|
|
|
|
if ! git merge-base --is-ancestor $PREVIOUS_COMMIT $CURRENT_COMMIT 2>/dev/null
|
|
then
|
|
# Forced push: use parent commit as previous commit
|
|
PREVIOUS_COMMIT=$CURRENT_COMMIT~
|
|
fi
|
|
|
|
# Normalize commits
|
|
PREVIOUS_COMMIT=$(git rev-parse --short $PREVIOUS_COMMIT)
|
|
CURRENT_COMMIT=$(git rev-parse --short $CURRENT_COMMIT)
|
|
|
|
export FIXED_TRAVIS_COMMIT_RANGE=$PREVIOUS_COMMIT..$CURRENT_COMMIT
|
|
echo FIXED_TRAVIS_COMMIT_RANGE=$FIXED_TRAVIS_COMMIT_RANGE
|
|
|
|
unset PREVIOUS_COMMIT CURRENT_COMMIT
|