This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-mvnd.git


The following commit(s) were added to refs/heads/master by this push:
     new f6c3a35  Add a check to ensure the local repo is on par with the remote
f6c3a35 is described below

commit f6c3a35a98074387c6911e7848a1a33c1a2301b3
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Fri Apr 29 16:55:15 2022 +0200

    Add a check to ensure the local repo is on par with the remote
---
 build/release.sh | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 80 insertions(+), 4 deletions(-)

diff --git a/build/release.sh b/build/release.sh
index ec9dfe8..e635560 100755
--- a/build/release.sh
+++ b/build/release.sh
@@ -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

Reply via email to