aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit_cleaner.sh34
1 files changed, 22 insertions, 12 deletions
diff --git a/git_cleaner.sh b/git_cleaner.sh
index 9ab8ddd..fb69436 100755
--- a/git_cleaner.sh
+++ b/git_cleaner.sh
@@ -2,28 +2,38 @@
BASE=/srv/repositories
+# silence pushd/popd
+pushd () {
+ command pushd "$@" > /dev/null
+}
+
+popd () {
+ command popd "$@" > /dev/null
+}
+
for repo in $(find $BASE -type d -name "*.git");
do
+ pushd $repo
# 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"
+ if [ -f gc.log ];
+ then
+ echo "WARNING: found ${repo}/gc.log"
cat ${repo}/gc.log
rm -f ${repo}/gc.log
- fi
+ fi
- # check for dangling commits and orphans
+ # check for dangling commits and orphans
if [ ! -z "$(git fsck --connectivity-only --no-progress)" ];
- then
- # this causes dangling refs to expire now and prunes
+ 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
+ git reflog expire --expire=now --all
+ ionice -c2 -n7 -- git gc --prune=now --aggressive >/dev/null
+ else
+ ionice -c2 -n7 -- git gc --auto > /dev/null
+ fi
done