I'm not ready to enforce that all tips must be new quite yet.
[git-central.git] / server / update-stable
index fb1a8e6..b935dae 100644 (file)
@@ -51,17 +51,48 @@ newrev="$3"
 . $(dirname $0)/functions
 set_change_type
 
-if [[ "$refname" =~ refs/heads/(.*) ]] ; then
-       short_refname=${refname##refs/heads/}
-else
+case "$refname" in
+       refs/heads/*)
+               short_refname=${refname##refs/heads/}
+               ;;
+       *)
+               exit 0
+               ;;
+esac
+
+if [ "$change_type" == "delete" ] ; then
        exit 0
 fi
 
+if [ "$change_type" == "create" -a "$short_refname" != "stable" ] ; then
+       not_on_stable=$(git rev-list stable..$newrev)
+       if [ "$not_on_stable" == "" ] ; then
+               echo "----------------------------------------------------"
+               echo
+               echo "Creating a branch must include new commits"
+               echo
+               echo "----------------------------------------------------"
+               exit 1
+       fi
+fi
+
 # create/delete is okay
 if [ "$change_type" != "update" ] ; then
        exit 0
 fi
 
+# # The tip must always be new
+# already=$(git branch --contains "$newrev")
+# if [ "$already" != "" ] ; then
+#      already=${already##  }
+#      echo "----------------------------------------------------"
+#      echo
+#      echo "$short_refname is already referred to by $already"
+#      echo
+#      echo "----------------------------------------------------"
+#      exit 1
+#fi
+
 if [ "$short_refname" == "stable" ] ; then
        # Stable enforcement
 
@@ -122,12 +153,16 @@ else
        fi
 
        # For now candidates can mix amongst each other so early exit
-       if [[ "$refname" =~ refs/heads/candidate(.*) ]] ; then
-               exit 0
-       fi
+       case "$refname" in
+               refs/heads/candidate*)
+                       exit 0
+                       ;;
+               *)
+                       ;;
+       esac
 
        # Check if topic is already in candidates
-       candidate=$(git branch --contains "$oldrev" | grep -oP candidate.* --max-count=1)
+       candidate=$(git branch --contains "$oldrev" | grep -oP "candidate.*" --max-count=1)
        if [ $? -eq 0 ] ; then
                echo "----------------------------------------------------"
                echo