Last active
March 25, 2019 13:12
-
-
Save keif/5f5c93395e06a515b35f1bacf2399db8 to your computer and use it in GitHub Desktop.
This utilizes an external text file (branches.txt) and runs a test against the branches to see if there is a merge conflict.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
function git_merge_test() { | |
echo "test git branch merges"; | |
RUN_UNIT_TESTS=0 | |
while test $# -gt 0; do | |
case "$1" in | |
-h|--help) | |
echo "test the branches in branches.txt for merge conflicts" | |
echo " " | |
echo "git_merge_test [options]" | |
echo " " | |
echo "options:" | |
echo "-h, --help show brief help" | |
echo "-t, --test execute unit tests on successful merge" | |
return 0 | |
;; | |
-t) | |
shift | |
RUN_UNIT_TESTS=1 | |
;; | |
*) | |
break | |
;; | |
esac | |
done | |
# prune, pull and update develop | |
git prune && git checkout develop && git pull; | |
# create test merge branch | |
test_branch_name="test-merge$(date '+%d%m%S')"; | |
echo "Creating local testing branch $test_branch_name"; | |
git checkout -b $test_branch_name; | |
branches="branches.txt"; | |
while IFS='' read -r branch || [[ -n "$branch" ]]; do | |
# strip out any hash comments | |
clean_branch=${branch%#*} | |
# trim whitepsace | |
trim_branch="$(echo -e "${clean_branch}" | tr -d '[:space:]')" | |
# only execute if there is a branch | |
if [ -n "$trim_branch" ]; then | |
echo "Merging $trim_branch" | |
(git merge --no-edit refs/remotes/origin/${trim_branch} && echo "$trim_branch: SUCCESS" >> build-result.txt) || (git merge --abort && echo "$trim_branch: FAIL" >> build-result.txt) | |
fi; | |
done < "$branches" | |
cat build-result.txt | |
if grep -F " FAIL" build-result.txt; then | |
echo "Stopping because of a merge conflict in one of the branches"; | |
rm build-result.txt; | |
# switch back to develop and delete the test branch | |
git checkout develop; | |
git reset --hard origin/develop; | |
git branch -D $test_branch_name; | |
return 1; | |
fi | |
rm build-result.txt; | |
if [ $RUN_UNIT_TESTS == 1 ]; then | |
echo "Executing build and unit tests..."; | |
grunt; | |
fi; | |
# switch back to develop and delete the test branch | |
git checkout develop; | |
git reset --hard origin/develop; | |
git branch -D $test_branch_name; | |
}; |
Made the unit test execution a passed in argument for now - there's a few instances where I just want to test the branch merges and not the tests.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
No, I haven't dug into finding a way to grab the messages git responds with to more accurately tell you what "SUCCESS" or "FAILURE" means in a "the branch was already merged" kind of way.