Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # Post merge hook to automerge branch to branches which
- vercomp () {
- if [[ $1 == $2 ]]
- then
- return 0
- fi
- local IFS=.
- local i ver1=($1) ver2=($2)
- # fill empty fields in ver1 with zeros
- for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
- do
- ver1[i]=0
- done
- for ((i=0; i<${#ver1[@]}; i++))
- do
- if [[ -z ${ver2[i]} ]]
- then
- # fill empty fields in ver2 with zeros
- ver2[i]=0
- fi
- if ((10#${ver1[i]} > 10#${ver2[i]}))
- then
- return 1
- fi
- if ((10#${ver1[i]} < 10#${ver2[i]}))
- then
- return 2
- fi
- done
- return 0
- }
- PATTERN='release/*'
- CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
- LAST_COMMIT=$(git rev-list -1 HEAD)
- #echo $CURRENT_BRANCH
- #echo $LAST_COMMIT
- # Get current branch version, exit if no match (no release branch)
- if [[ $CURRENT_BRANCH =~ ^release\/v?([0-9\.]+)$ ]]; then
- CURRENT_VERSION=${BASH_REMATCH[1]}
- else
- echo 'Current branch does not match pattern.';
- exit 0;
- fi
- # Find first next version in all branches
- # Loop through all branches and compare each item to current and next versions
- eval "$(git for-each-ref --shell --format='branches+=(%(refname:strip=2))' refs/heads/)"
- for branch in "${branches[@]}"; do
- if [[ $branch =~ ^release\/v?([0-9\.]+)$ ]]; then
- version=${BASH_REMATCH[1]}
- # is branch version greater then current version? Should be 1
- vercomp $version $CURRENT_VERSION
- current_comp=$?
- # is branch version lower then current next version? Should be 2
- vercomp $version $NEXT_VERSION
- next_comp=$?
- if [[ $current_comp = 1 && ( $next_comp = 2 || -z "$NEXT_VERSION" ) ]]; then
- NEXT_VERSION=$version
- NEXT_BRANCH=$branch
- fi
- fi
- done
- echo "Next version after $CURRENT_VERSION is $NEXT_VERSION"
- # Now merge branch to new next branch
- #
- if [[ -n "$NEXT_VERSION" ]]; then
- git checkout $NEXT_VERSION && git merge $LAST_COMMIT
- git checkout $CURRENT_BRANCH
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement