* [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).