git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Add a post-tag hook

From
Ammon Riley <ammon.riley@gmail.com>
Date
Apr 17, 2009, 22:15 UTC
Message-ID
<cd3664ac0904171515u1e2fce41ubd34f60ec43fcafd@mail.gmail.com>

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@gmail.com>
---
 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
Next: Shawn O. Pearce
Message 1 of 4 in “Add a post-tag hook”
  1. Add a post-tag hookAmmon Riley, Apr 17, 2009
  2. Shawn O. PearceApr 17, 2009
  3. Ammon RileyApr 17, 2009
  4. Pat NotzApr 24, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.