#!/bin/sh# Drops cgit's output cache after a push, so new commits show up right away# instead of once the cache-*-ttl minutes have passed. It only matters when# cache-size in cgitrc is above 0, which turns the cache on.## cgit names each cache slot after a hash of the request url, so there is no# way to expire one repository's pages on their own and this clears the lot.# cgit refills a slot the next time something asks for it. The cached# repository scan goes too, which is what makes a brand new repository appear# without waiting out cache-scan-ttl.## The path below is the default cache-root, so a cgitrc that changes the# setting needs the same change here. The web server owns the cache root, so# the pushing user needs write access to it. Nothing here exits nonzero when# that access is missing, so the pusher is not shown an error over a stale# page.## To install the hook, copy or link it to hooks/post-receive in each# repository. Git runs one post-receive per repository, so fold this together# with the age-file hook to have both.set -eu
cache_root=/var/cache/cgit
test -d "$cache_root" || exit0# Everything directly under the cache root is a cache file, so the only thing# worth keeping is the lock files, which belong to writers still working.# The "! -name . -prune" pair is how POSIX find stays out of subdirectories.
find "$cache_root"/. ! -name . -prune ! -name '*.lock' -type f \
-exec rm -f {} + || exit0