* [PATCH] hooks--update: allow deleting a tag through git push <remote> :<tag> @ 2007-11-07 10:34 Gerrit Pape 2007-11-08 0:54 ` Junio C Hamano 0 siblings, 1 reply; 3+ messages in thread From: Gerrit Pape @ 2007-11-07 10:34 UTC (permalink / raw) To: git, Junio C Hamano The update hook interpretes deleting a tag, no matter if annotated or not, through git push <remote> :<tag> as unannotated tag, and declines it by default: $ git push origin :atag deleting 'refs/tags/atag' *** The un-annotated tag, atag, is not allowed in this repository *** Use 'git tag [ -a | -s ]' for tags you want to propagate. ng refs/tags/atag hook declined error: hooks/update exited with error code 1 error: hook declined to update refs/tags/atag error: failed to push to 'monolith:/git/qm/test-repo' With this patch deleting a tag is allowed unconditionally, just as deleting a branch. Signed-off-by: Gerrit Pape <pape@smarden.org> --- templates/hooks--update | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/templates/hooks--update b/templates/hooks--update index 65e8c32..a109b1b 100644 --- a/templates/hooks--update +++ b/templates/hooks--update @@ -43,7 +43,7 @@ fi # --- Check types # if $newrev is 0000...0000, it's a commit to delete a branch if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then - newrev_type=commit + newrev_type=delete else newrev_type=$(git-cat-file -t $newrev) fi @@ -58,13 +58,16 @@ case "$refname","$newrev_type" in exit 1 fi ;; + refs/tags/*,delete) + # delete tag + ;; refs/tags/*,tag) # annotated tag ;; - refs/heads/*,commit) + refs/heads/*,commit | refs/heads/*,delete) # branch ;; - refs/remotes/*,commit) + refs/remotes/*,commit | refs/remotes/*,delete) # tracking branch ;; *) -- 1.5.3.5 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] hooks--update: allow deleting a tag through git push <remote> :<tag> 2007-11-07 10:34 [PATCH] hooks--update: allow deleting a tag through git push <remote> :<tag> Gerrit Pape @ 2007-11-08 0:54 ` Junio C Hamano 2007-11-08 9:47 ` [PATCH] hooks--update: decline deleting tags or branches by default, add config options Gerrit Pape 0 siblings, 1 reply; 3+ messages in thread From: Junio C Hamano @ 2007-11-08 0:54 UTC (permalink / raw) To: Gerrit Pape; +Cc: git Gerrit Pape <pape@smarden.org> writes: > The update hook interpretes deleting a tag, no matter if annotated or not, > through git push <remote> :<tag> as unannotated tag, and declines it by > default: > ... > With this patch deleting a tag is allowed unconditionally, just as > deleting a branch. > > Signed-off-by: Gerrit Pape <pape@smarden.org> > --- > templates/hooks--update | 9 ++++++--- > 1 files changed, 6 insertions(+), 3 deletions(-) Since you are allowing deletion for anything, wouldn't this be much simpler, I wonder... --- templates/hooks--update | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/hooks--update b/templates/hooks--update index d8c7626..e12904a 100644 --- a/templates/hooks--update +++ b/templates/hooks--update @@ -41,9 +41,9 @@ if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file t fi # --- Check types -# if $newrev is 0000...0000, it's a commit to delete a branch +# if $newrev is 0000...0000, it's a commit to delete a ref. if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then - newrev_type=commit + exit 0 ;# allow anything to be deleted else newrev_type=$(git-cat-file -t $newrev) fi ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] hooks--update: decline deleting tags or branches by default, add config options 2007-11-08 0:54 ` Junio C Hamano @ 2007-11-08 9:47 ` Gerrit Pape 0 siblings, 0 replies; 3+ messages in thread From: Gerrit Pape @ 2007-11-08 9:47 UTC (permalink / raw) To: Junio C Hamano; +Cc: git Decline deleting tags or branches through git push <remote> :<ref> by default, support config options hooks.allowdeletetag, hooks.allowdeletebranch to override this per repository. Before this patch the update hook interpreted deleting a tag, no matter if annotated or not, through git push <remote> :<tag> as unannotated tag, and declined it by default, but with an unappropriate error message: $ git push origin :atag deleting 'refs/tags/atag' *** The un-annotated tag, atag, is not allowed in this repository *** Use 'git tag [ -a | -s ]' for tags you want to propagate. ng refs/tags/atag hook declined error: hooks/update exited with error code 1 error: hook declined to update refs/tags/atag error: failed to push to 'monolith:/git/qm/test-repo' Signed-off-by: Gerrit Pape <pape@smarden.org> --- On Wed, Nov 07, 2007 at 04:54:42PM -0800, Junio C Hamano wrote: > Since you are allowing deletion for anything, wouldn't this be > much simpler, I wonder... Yes, true. But to be a good axample hook, I suggest to differentiate this in the implementation, and to deny deleting tags, branches by default. templates/hooks--update | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-) diff --git a/templates/hooks--update b/templates/hooks--update index 65e8c32..7d7c251 100644 --- a/templates/hooks--update +++ b/templates/hooks--update @@ -10,6 +10,12 @@ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. # # --- Command line @@ -32,6 +38,8 @@ fi # --- Config allowunannotated=$(git-repo-config --bool hooks.allowunannotated) +allowdeletebranch=$(git-repo-config --bool hooks.allowdeletebranch) +allowdeletetag=$(git-repo-config --bool hooks.allowdeletetag) # check for no description projectdesc=$(sed -ne '1p' "$GIT_DIR/description") @@ -41,9 +49,9 @@ if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file t fi # --- Check types -# if $newrev is 0000...0000, it's a commit to delete a branch +# if $newrev is 0000...0000, it's a commit to delete a ref. if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then - newrev_type=commit + newrev_type=delete else newrev_type=$(git-cat-file -t $newrev) fi @@ -58,15 +66,36 @@ case "$refname","$newrev_type" in exit 1 fi ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; refs/tags/*,tag) # annotated tag ;; refs/heads/*,commit) # branch ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; refs/remotes/*,commit) # tracking branch ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 -- 1.5.3.5 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-11-08 9:47 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-11-07 10:34 [PATCH] hooks--update: allow deleting a tag through git push <remote> :<tag> Gerrit Pape 2007-11-08 0:54 ` Junio C Hamano 2007-11-08 9:47 ` [PATCH] hooks--update: decline deleting tags or branches by default, add config options Gerrit Pape
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).