#!/bin/sh # Updates the age-file cgit reads for the idle column. The path below is the # default age-file, so a cgitrc that changes the setting needs the same change # here. To install the hook, copy or link it to hooks/post-receive in each # repository. 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. test -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"