[PATCH] Add a post-tag hook
From: Ammon Riley <hidden>
Date: 2016-06-15 22:46:37
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 <redacted> --- 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 takesno 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