blob: b27d297cd0b02d4c8674d98c5e503c90748c9451 [file] [log] [blame]
#!/bin/bash
log() {
# Rotate the $LOG if current date is different from the last modification of $LOG
if test -f "$LOG" ; then
TODAY=$(date +%Y-%m-%d)
LOG_LAST_MODIFIED=$(date +%Y-%m-%d -r $LOG)
if test "$TODAY" != "$LOG_LAST_MODIFIED" ; then
mv "$LOG" "$LOG.$LOG_LAST_MODIFIED"
gzip "$LOG.$LOG_LAST_MODIFIED"
fi
fi
echo $1 | tee -a $LOG
}
TOP=/var/gerrit/git
LOG=/var/log/git/gc.log
OUT=$(date +"%D %r Started") && log "$OUT"
gc_options() {
if test -f "$1/gc-aggressive" ; then
echo "--aggressive"
elif test -f "$1/gc-aggressive-once" ; then
echo "--aggressive"
rm -f "$1/gc-aggressive-once"
else
echo ""
fi
}
log_opts() {
if test -z $1 ; then
echo ""
else
echo " [$1]"
fi
}
find $TOP -type d -name \*.git -print0 | sed 's,^./,,' | while IFS= read -r -d $'\0' d
do
OPTS=$(gc_options $d)
LOG_OPTS=$(log_opts $OPTS)
OUT=$(date +"%D %r Started: $d$LOG_OPTS") && log "$OUT"
git --git-dir="$d" config core.logallrefupdates true
git --git-dir="$d" config repack.usedeltabaseoffset true
git --git-dir="$d" config repack.writebitmaps true
git --git-dir="$d" config pack.compression 9
git --git-dir="$d" config pack.indexversion 2
git --git-dir="$d" config gc.autodetach false
git --git-dir="$d" config gc.autopacklimit 4
git --git-dir="$d" config gc.packrefs true
git --git-dir="$d" config gc.reflogexpire never
git --git-dir="$d" config gc.reflogexpireunreachable never
git --git-dir="$d" config receive.autogc false
OUT=$(git --git-dir="$d" gc --auto --prune $OPTS || date +"%D %r Failed: $d") \
&& log "$OUT"
(find "$d/refs/changes" -type d | xargs rmdir;
find "$d/refs/changes" -type d | xargs rmdir
) 2>/dev/null
OUT=$(date +"%D %r Finished: $d$LOG_OPTS") && log "$OUT"
done
OUT=$(date +"%D %r Finished") && log "$OUT"