chiark / gitweb /
Mirroring: Sort out stderr plumbing
[dgit.git] / infra / dgit-mirror-rsync
index 5b54d16cc0f9a1cdbf0be5251d1943b5f5d3d535..01620424182ddaae166c1e9c71bb142d96178afc 100755 (executable)
@@ -37,6 +37,13 @@ fail () {
 if [ $# -lt 2 ]; then fail "too few arguments"; fi
 
 self=$0
+
+case "$self" in
+/*)                            ;;
+*/*)   self="$PWD/$self"       ;;
+*)                             ;;
+esac
+
 distrodir=$1;  shift
 action=$1;     shift
 package=$1
@@ -79,7 +86,7 @@ reinvoke () {
 
        exec                                                    \
        "$@"                                                    \
-       "$0"    "$distrodir" "reinvoke$newaction" "$package"
+       "$self" "$distrodir" "reinvoke$newaction" "$package"
 }
 
 check-package-mirrorable () {
@@ -98,13 +105,13 @@ lock-and-process () {
 }
 
 attempt () {
-       exec >"$queue/$package.err" 2>&1
+       exec 3>&2 >"$queue/$package.err" 2>&1
        if actually; then
-               rm "$queue/$package.a"
+               rm -f "$queue/$package.a"
                mv -f "$queue/$package.err" "$queue/$package.log"
                rm "$queue/$package.lock"
        else
-               cat >&2 "$queue/$package.err"
+               cat >&3 "$queue/$package.err"
                exit 127
        fi
 }