diff options
context:
space:
mode:
Diffstat (limited to 'custom/hooks/post-receive.cgit-age')
-rwxr-xr-xcustom/hooks/post-receive.cgit-age38
1 file changed, 38 insertions, 0 deletions
diff --git a/custom/hooks/post-receive.cgit-age b/custom/hooks/post-receive.cgit-age
new file mode 100755
index 0000000..80c67c2
--- /dev/null
+++ b/custom/hooks/post-receive.cgit-age
@@ -0,0 +1,38 @@
+#!/bin/sh
+#
+# Example hook that updates the "agefile" cgit reads for the idle column.
+#
+# This hook assumes that you are using the default agefile location of
+# "info/web/last-modified". If you change the value in your cgitrc then you
+# must also change it here.
+#
+# To install the hook, copy (or link) it to the file "hooks/post-receive" in
+# each of your repositories.
+#
+
+set -eu
+
+# The pushing user's umask decides the mode of a freshly written agefile, so
+# force one that leaves the file readable by the web server.
+umask 022
+
+agefile="$(git rev-parse --git-dir)"/info/web/last-modified
+
+# Committer dates rather than author dates, so a push of rebased or imported
+# history still counts as recent activity. Branch tips only, since an
+# annotated tag carries no committer date of its own and would sort in as an
+# empty line.
+date="$(git for-each-ref --sort=-committerdate --count=1 \
+ --format='%(committerdate:iso8601)' refs/heads/)"
+
+# A repository with no branches keeps whatever cgit already had, rather than
+# being handed an empty file.
+[ -n "$date" ] || exit 0
+
+mkdir -p "$(dirname "$agefile")"
+
+# Write through a temporary file so a reader never sees a half written date.
+tmpfile="$agefile.$$"
+trap 'rm -f "$tmpfile"' EXIT
+printf '%s\n' "$date" >"$tmpfile"
+mv "$tmpfile" "$agefile"