From 729bdec77aa867f9e24156ed228b013a600d5730 Mon Sep 17 00:00:00 2001 From: Stephen Haberman Date: Tue, 11 Nov 2008 23:53:29 -0600 Subject: [PATCH] Merge update-ensure-tag-in-branch itno update-allow-tags-branches. --- server/update-allow-tags-branches | 44 ++++++++----------- server/update-ensure-tag-in-branch | 32 -------------- ...sh => t3100-update-allow-tags-branches.sh} | 7 +-- 3 files changed, 23 insertions(+), 60 deletions(-) delete mode 100644 server/update-ensure-tag-in-branch rename tests/{t3100-ensure-tag-in-branch.sh => t3100-update-allow-tags-branches.sh} (76%) diff --git a/server/update-allow-tags-branches b/server/update-allow-tags-branches index 23e736a..3714762 100644 --- a/server/update-allow-tags-branches +++ b/server/update-allow-tags-branches @@ -3,8 +3,6 @@ # An example hook script to blocks unannotated tags from entering. # Called by git-receive-pack with arguments: refname sha1-old sha1-new # -# To enable this hook, make this file executable by "chmod +x update". -# # Config # ------ # hooks.update-allow-tags-branches.unannotatedtag @@ -16,37 +14,23 @@ # hooks.update-allow-tags-branches.deletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. +# hooks.update-allow-tags-branches.nakedtag +# This boolean sets whether tags are allowed into the repo to commits +# that are not pointed to by a branch. By default they won't be. # +. $(dirname $0)/functions + # --- Command line refname="$1" oldrev="$2" newrev="$3" -# --- Safety check -if [ -z "$GIT_DIR" ]; then - echo "Don't run this script from the command line." >&2 - echo " (if you want, you could supply GIT_DIR then run" >&2 - echo " $0 )" >&2 - exit 1 -fi - -if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then - echo "Usage: $0 " >&2 - exit 1 -fi - # --- Config allowunannotatedtag=$(git config --bool hooks.update-allow-tags-branches.unannotatedtag) allowdeletebranch=$(git config --bool hooks.update-allow-tags-branches.deletebranch) allowdeletetag=$(git config --bool hooks.update-allow-tags-branches.deletetag) - -# check for no description -projectdesc=$(sed -e '1q' "$GIT_DIR/description") -if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file to name it for gitweb." ]; then - echo "*** Project description file hasn't been set" >&2 - exit 1 -fi +allownakedtag=$(git config --bool hooks.update-allow-tags-branches.nakedtag) # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. @@ -61,20 +45,30 @@ case "$refname","$newrev_type" in # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotatedtag" != "true" ]; then - echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 - echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + display_error_message "Unannotated tags ($short_refname) are not allowed" + exit 1 + fi + contains=$(git branch --contains "$newrev" | wc -l) + if [ $contains -eq 0 -a "$allownakedtag" != "true" ] ; then + display_error_message "The tag $short_refname is not included in any branch" exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then - echo "*** Deleting a tag is not allowed in this repository" >&2 + display_error_message "Deleting tags is not allowed" exit 1 fi ;; refs/tags/*,tag) # annotated tag + short_refname=${refname##refs/tags/} + contains=$(git branch --contains "$newrev" | wc -l) + if [ $contains -eq 0 -a "$allownakedtag" != "true" ] ; then + display_error_message "The tag $short_refname is not included in any branch" + exit 1 + fi ;; refs/heads/*,commit) # branch diff --git a/server/update-ensure-tag-in-branch b/server/update-ensure-tag-in-branch deleted file mode 100644 index 3c01543..0000000 --- a/server/update-ensure-tag-in-branch +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -# -# Tags should only be allowed to point to commits that are within a branch. -# - -. $(dirname $0)/functions - -refname="$1" -oldrev="$2" -newrev="$3" - -# Only interested in tags -case "$refname" in - refs/tags/*) - short_refname=${refname##refs/tags/} - ;; - *) - exit 0 - ;; -esac - -# Except if they're getting deleted -if [ "$newrev" == "0000000000000000000000000000000000000000" ] ; then - exit 0 -fi - -contains=$(git branch --contains "$newrev" | wc -l) -if [ $contains -eq 0 ] ; then - display_error_message "The tag $short_refname is not included in any branch." - exit 1 -fi - diff --git a/tests/t3100-ensure-tag-in-branch.sh b/tests/t3100-update-allow-tags-branches.sh similarity index 76% rename from tests/t3100-ensure-tag-in-branch.sh rename to tests/t3100-update-allow-tags-branches.sh index 55b8621..ecac232 100644 --- a/tests/t3100-ensure-tag-in-branch.sh +++ b/tests/t3100-update-allow-tags-branches.sh @@ -1,6 +1,6 @@ #!/bin/sh -test_description='server update tags in branch check' +test_description='server update allow tags and branches' . ./test-lib.sh @@ -13,14 +13,14 @@ test_expect_success 'setup' ' git remote add origin ./server ' -install_update_hook 'update-ensure-tag-in-branch' +install_update_hook 'update-allow-tags-branches' test_expect_success 'push only tag fails' ' echo "$test_name" >a && git commit -a -m "$test_name moved master" && git tag -a -m "tagged move as r1" r1 && ! git push --tags 2>push.err && - cat push.err | grep "The tag r1 is not included in any branch." && + cat push.err | grep "The tag r1 is not included in any branch" && # But now it works if we push the commit first git push && @@ -35,6 +35,7 @@ test_expect_success 'push works if done at the same time' ' ' test_expect_success 'moving branch back and deleting tag works' ' + GIT_DIR=./server/.git git config hooks.update-allow-tags-branches.deletetag true git reset --hard HEAD^ && git push --force origin master:master :r2 ' -- 2.39.5