Add a post-tag hook, to allow notifications when a tag is created. The hook is given the name of the newly created tag. Signed-off-by: Ammon Riley <ammon.riley@xxxxxxxxx> --- Documentation/git-tag.txt | 4 ++++ Documentation/githooks.txt | 9 +++++++++ builtin-tag.c | 2 ++ t/t3800-tag-hook.sh | 32 ++++++++++++++++++++++++++++++++ templates/hooks--post-tag.sample | 8 ++++++++ 5 files changed, 55 insertions(+), 0 deletions(-) create mode 100755 t/t3800-tag-hook.sh create mode 100755 templates/hooks--post-tag.sample diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index fa73321..3fcb3d4 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -248,6 +248,10 @@ An example follows. $ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1 ------------ +HOOKS +----- +This command can run the `post-tag` hook. See linkgit:githooks[5] +for more information. Author ------ diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt index 1c73673..4512f18 100644 --- a/Documentation/githooks.txt +++ b/Documentation/githooks.txt @@ -314,6 +314,15 @@ This hook is invoked by 'git-gc --auto'. It takes no parameter, and exiting with non-zero status from this script causes the 'git-gc --auto' to abort. +post-tag +-------- + +This hook is invoked by 'git-tag'. It takes one parameter, the name +of the tag, and is invoked after a tag is made. + +This hook is meant primarily for notification, and cannot affect +the outcome of 'git-tag'. + GIT --- Part of the linkgit:git[1] suite diff --git a/builtin-tag.c b/builtin-tag.c index 01e7374..e4509ba 100644 --- a/builtin-tag.c +++ b/builtin-tag.c @@ -482,6 +482,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix) if (write_ref_sha1(lock, object, NULL) < 0) die("%s: cannot update the ref", ref); + run_hook(NULL, "post-tag", tag, NULL); + strbuf_release(&buf); return 0; } diff --git a/t/t3800-tag-hook.sh b/t/t3800-tag-hook.sh new file mode 100755 index 0000000..68c5877 --- /dev/null +++ b/t/t3800-tag-hook.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +test_description='git tag with its hook + +This test creates a post-tag hook and tests it.' + +. ./test-lib.sh + +TAG_FILE="$(pwd)/output" +export TAG_FILE + +test_expect_success 'Setting up post-tag hook' ' + mkdir -p .git/hooks && + echo >.git/hooks/post-tag "#!/bin/sh + echo -n \$@ > \"\${TAG_FILE}\" + echo Post commit hook was called." && + chmod +x .git/hooks/post-tag +' + +test_expect_success 'post-tag hook gets correct input' ' + test \! -e "${TAG_FILE}" && + echo initial >file && + git add file && + git commit -m initial && + git tag mytag && + test -r "${TAG_FILE}" && + test "z$(cat "${TAG_FILE}")" = zmytag +' + +rm -rf "${TAG_FILE}" + +test_done diff --git a/templates/hooks--post-tag.sample b/templates/hooks--post-tag.sample new file mode 100755 index 0000000..5f6a3d3 --- /dev/null +++ b/templates/hooks--post-tag.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script that is called after a successful +# tag is made. +# +# To enable this hook, rename this file to "post-tag". + +: Nothing -- 1.5.4.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html