chiark / gitweb /
test suite: gdr-unprocessable: new test
[dgit.git] / infra / dgit-mirror-rsync
index 47142ee296beecf4eb93c57e7cf92687dc11f01a..2d912c8ad1dd30f335c2f52d8e4f6011a718a22c 100755 (executable)
@@ -54,6 +54,7 @@ rsync=(rsync -rltH --safe-links --delete)
 hooktimeout=30
 rsynctimeout=900
 rsyncssh='ssh -o batchmode=yes'
+mirror_gc_cmd='git gc --auto'
 
 . $distrodir/mirror-settings
 
@@ -74,6 +75,12 @@ case "$remoterepos" in
 esac
 
 actually () {
+       if [ "x$mirror_gc_cmd" != x ]; then
+               (
+                       cd "$repos/$package.git"
+                       $mirror_gc_cmd
+               )
+       fi
        "${rsync[@]}" \
                --timeout=$rsynctimeout                         \
                -e "$rsyncssh"                                  \
@@ -91,7 +98,7 @@ reinvoke () {
 
 check-package-mirrorable () {
        local repo=$repos/$package.git
-       local mode=$(stat -c%a "$repo")
+       local mode; mode=$(stat -c%a "$repo")
        case $mode in
        *5)     return  0       ;;
        *0)     return  1       ;;
@@ -108,7 +115,11 @@ attempt () {
        exec 3>&2 >"$queue/$package.err" 2>&1
        if actually; then
                rm -f "$queue/$package.a"
+               exec 2>&3 2>&1
                mv -f "$queue/$package.err" "$queue/$package.log"
+               if ! [ -s "$queue/$package.log" ]; then
+                       rm "$queue/$package.log"
+               fi
                rm "$queue/$package.lock"
        else
                cat >&3 "$queue/$package.err"