blob: 80c67c2c773aade74261c13e51537615568e7695 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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"