#!/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"