diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-06-24 19:05:45 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-06-24 19:06:06 -0700 |
commit | ba2d0f4f35beffbf715ca652d5b36df8c0ad5ceb (patch) | |
tree | 101a2cbb0ee1bb98dc095d7c1103b2feeab78db6 /templates | |
parent | 27d69a465d14b516d6a1ba287edc83606f23a5a5 (diff) | |
download | git-ba2d0f4f35beffbf715ca652d5b36df8c0ad5ceb.tar.gz git-ba2d0f4f35beffbf715ca652d5b36df8c0ad5ceb.tar.xz |
pre-rebase hook update
This hook is what I have been using to manage topic branches in git.git,
but have not been updated to the Real Thing for a while.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'templates')
-rw-r--r-- | templates/hooks--pre-rebase | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/templates/hooks--pre-rebase b/templates/hooks--pre-rebase index 981c454cd..be1b06e25 100644 --- a/templates/hooks--pre-rebase +++ b/templates/hooks--pre-rebase @@ -1,7 +1,19 @@ #!/bin/sh # -# Copyright (c) 2006 Junio C Hamano +# Copyright (c) 2006, 2008 Junio C Hamano # +# The "pre-rebase" hook is run just before "git-rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. publish=next basebranch="$1" @@ -9,11 +21,12 @@ if test "$#" = 2 then topic="refs/heads/$2" else - topic=`git symbolic-ref HEAD` + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD fi -case "$basebranch,$topic" in -master,refs/heads/??/*) +case "$topic" in +refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. @@ -23,6 +36,12 @@ esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + # Is topic fully merged to master? not_in_master=`git-rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" |