aboutsummaryrefslogtreecommitdiff
path: root/git_cleaner.sh
blob: 9ab8ddda695ca90477e066315fa42035b3e1a93b (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
#!/bin/bash

BASE=/srv/repositories

for repo in $(find $BASE -type d -name "*.git");
do
    # the gc.log is a copy of the stderr created by a backgrounded
    # gc process.  It will block further git operations until removed
    # but we need a chance to at least look at what it's complaining
    # about first.
	if [ -f ${repo}/gc.log ];
	then
		echo "WARNING: found ${repo}/gc.log"
        cat ${repo}/gc.log
        rm -f ${repo}/gc.log
	fi

	# check for dangling commits and orphans
    if [ ! -z "$(git fsck --connectivity-only --no-progress)" ];
	then
		# this causes dangling refs to expire now and prunes
        # them from the object pack.  It's expensive, however,
        # because we end up repacking the object files.
		git reflog expire --expire=now --all
		ionice -c2 -n7 git gc --prune=now --agressive
	else
		ionice -c2 -n7 git gc --auto
	fi
done