Add more JGit GC config options Introduce more variables for configuring the JGit execution: - PACK_THREADS: number of threads for packing concurrently - JAVA_ARGS: extra JVM options to pass to the JGit JVM - PRUNE_EXPIRE: interval for unreferenced loose objects expire - GIT: path where to find the 'git' executable - GIT_GC_OPTION: option to pass to the JGit GC command line Also, JAVA_ARGS would automatically set the JVM heap needed to complete a full GC cycle as twice the current size of the repository. Change-Id: If5953e9cc25f25bb344aabb030adb4dd33791dfb
diff --git a/maintenance/git-gc/scripts/utils.sh b/maintenance/git-gc/scripts/utils.sh index f0d9a14..5d6597b 100755 --- a/maintenance/git-gc/scripts/utils.sh +++ b/maintenance/git-gc/scripts/utils.sh
@@ -1,8 +1,12 @@ #!/bin/bash -JGIT=${JGIT:-"/bin/jgit"} +JGIT=${JGIT:-$(which jgit)} +GIT=${GIT:-$(which git)} GIT_HOME=${GIT_HOME:-"/git"} -GIT_GC_OPTION=${GIT_GC_OPTION:-"--preserve-oldpacks"} +GIT_GC_OPTION=${GIT_GC_OPTION:-""} +PACK_THREADS=${PACK_THREADS:-""} +PRUNE_EXPIRE=${PRUNE_EXPIRE:-""} +PRUNE_PACK_EXPIRE=${PRUNE_PACK_EXPIRE:-""} function gc_project { proj=$1 @@ -29,10 +33,21 @@ } } +function java_heap_for_repo() { + MIN_SIZE=1048576 + REPO_SIZE_X2=$(expr $(du -s -k . | cut -f 1) '*' 2) + [ $REPO_SIZE_X2 -gt $MIN_SIZE ] && echo $REPO_SIZE_X2 || echo $MIN_SIZE +} + function do_gc() { - log_project "$proj" "Running $JGIT gc $GIT_GC_OPTION ..." + [ -z "$PRUNE_PACK_EXPIRE" ] || $GIT config gc.prunePackExpire $PRUNE_PACK_EXPIRE + [ -z "$PRUNE_EXPIRE" ] || $GIT config gc.pruneExpire $PRUNE_EXPIRE + [ -z "$PACK_THREADS" ] || $GIT config gc.packThreads $PACK_THREADS + + JAVA_ARGS="$JAVA_ARGS -Xmx$(java_heap_for_repo)k" + log_project "$proj" "Running java_args=\"$JAVA_ARGS\" $JGIT gc $GIT_GC_OPTION ..." start=$SECONDS - $JGIT gc $GIT_GC_OPTION || { + java_args=$JAVA_ARGS $JGIT gc $GIT_GC_OPTION || { status_code=$? err_proj "$proj" "Could not GC $proj ($status_code)." return 1