Add a check to ensure the local repo is on par with the remote
@@ -26,10 +26,86 @@ then
exit 1
fi
-# checkout
-git checkout master
-git fetch origin
-git reset --hard origin/master
+startup_check()
+{
+ # Need to do a git fecth first to download remote changes for us to compare against
+ git fetch
+ # Most of this code was taken from the __git_ps1_changes method of https://github.com/markgandolfo/git-bash-completion
+ local branch_ref
+ branch_ref="$(git symbolic-ref -q HEAD 2>/dev/null)";
+ if [ -n "$branch_ref" ]; then
+ local branch_origin
+ branch_origin="$(git for-each-ref --format='%(upstream:short)' $branch_ref)";
+ if [ -n "$branch_origin" ]; then
+ local branch
+ branch=${branch_ref##refs/heads/};
+
+ if [ "$branch" != "master" ]; then
+ echo "Not working on the master - cannot proceed"
+ exit 1
+ fi
+
+ local unpush
+ unpush=$(git rev-list $branch_origin..$branch --count);
+ local unpull
+ unpull=$(git rev-list $branch..$branch_origin --count);
+ local staged
+ staged=$(git diff --staged --name-status | wc -l);
+ local uncommits
+ uncommits=$(git status -s -uall --porcelain);
+
+ if [[ $unpush -gt 0 ]]; then
+ echo "There are changes which have not been pushed - cannot proceed. The following commits need to be pushed:"
+ local unpushed
+ unpushed=$(git rev-list $branch_origin..$branch);
+ for commit in $unpushed; do
+ git --no-pager log --pretty=format:"%H - %an, %ar : %s" -n 1 $commit
+ done
+ exit 1
+ fi
+
+ if [[ $unpull -gt 0 ]]; then
+ echo "There are changes which have not been pulled - cannot proceed. The following commits have been added to master since your last pull:"
+ local unpulled
+ unpulled=$(git rev-list $branch..$branch_origin);
+ for commit in $unpulled; do
+ git --no-pager log --pretty=format:"%H - %an, %ar : %s" -n 1 $commit
+ done
+ exit 1
+ fi
+
+ if [[ $staged -gt 0 ]]; then
+ local staging
+ staging=$(git diff --staged --name-status);
+ echo "There are changes which are staged but have been commited - cannot proceed"
+ echo $staging
+ exit 1
+ fi
+
+ local unstaged
+ unstaged=$(echo "$uncommits" | grep -c "^ [A-Z]");
+ if [[ $unstaged -gt 0 ]]; then
+ echo "There are unstaged changes - cannot proceed"
+ echo $(echo "$uncommits" | grep "^ [A-Z]")
+ exit 1
+ fi
+
+ local untracked
+ untracked=$(echo "$uncommits" | grep -c "^??");
+ if [[ $untracked -gt 0 ]]; then
+ echo "There are untracked changes - cannot proceed"
+ echo $(echo "$uncommits" | grep "^??")
+ exit 1
+ fi
+ fi
+ else
+ echo "Working folder isn't a git folder"
+ exit 1
+ fi
+}
+
+# check
+startup_check
# update version
mvn versions:set -DnewVersion=$VERSION
