[PATCH] release.sh: remove "git push origin" policy, replace with checks.

Peter Hutterer peter.hutterer at who-t.net
Wed Jul 29 18:38:20 PDT 2009


Running 'git push origin' at the end of the script will push changes on the
master branch - even if the release is supposed to be a stable branch
release. This may result in not-yet-ready changes being pushed to master.

This patch removes this default git push policy and replaces it with a
warning message if the object belonging to the tag is not on the remote yet.
Requirements: the tag must be on the currently checked-out branch, it is not
possible to cut a branch release from master anymore.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
The check that the tagged object is in origin/branchname seems a bit clumsy,
better suggestions appreciated.

 release.sh |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/release.sh b/release.sh
index 71efa72..0065cf6 100755
--- a/release.sh
+++ b/release.sh
@@ -129,6 +129,31 @@ if [ "x$ignorechanges" != "x1" ]; then
     set -e
 fi
 
+# Check if the object has been pushed. Do do so
+# 1. Check if the current branch has the object. If not, abort.
+# 2. Check if the object is on origin/branchname. If not, abort.
+local_sha=`git rev-list -1 $tag_current`
+current_branch=`git branch | grep "\*" | sed -e "s/\* //"`
+set +e
+git rev-list $current_branch | grep $local_sha > /dev/null
+if [ $? -eq 1 ]; then
+    echo "Cannot find tag '$tag_current' on current branch. Aborting."
+    echo "Switch to the correct branch and re-run the script."
+    exit 1
+fi
+
+revs=`git rev-list origin/$current_branch..$current_branch | wc -l`
+if [ $revs -ne 0 ]; then
+    git rev-list origin/$current_branch..$current_branch | grep $local_sha > /dev/null
+
+    if [ $? -ne 1 ]; then
+        echo "origin/$current_branch doesn't have object $local_sha"
+        echo "for tag '$tag_current'. Did you push branch first? Aborting."
+        exit 1
+    fi
+fi
+set -e
+
 tarball_dir="$(dirname $(find . -name config.status))"
 module="${tag_current%-*}"
 if [ "x$module" = "x$tag_current" ]; then
@@ -199,7 +224,6 @@ echo "    at: $announce"
 echo "installing release into server"
 scp $tarball_dir/$targz $tarball_dir/$tarbz2 $user@$host_people:$srv_path
 
-echo "pushing changes upstream"
-git push origin
+echo "pushing tag upstream"
 git push origin $tag_current
 
-- 
1.6.3.rc1.2.g0164.dirty



More information about the xorg-devel mailing list