Improve a couple support scripts:
authorWayne Davison <wayne@opencoder.net>
Sat, 13 Nov 2021 17:30:08 +0000 (09:30 -0800)
committerWayne Davison <wayne@opencoder.net>
Sat, 13 Nov 2021 18:39:09 +0000 (10:39 -0800)
- rsync-no-vanished now avoids joining stdout & stderr, avoids affecting
  a non-client run, and gets the rsync status code correctly.
- rsync-slash-strip now avoids affecting a non-client run.

support/rsync-no-vanished
support/rsync-slash-strip

index 0f0bb22f5b31c962a54dc88d1ffd12a0611cf1e6..b31a5d210fef8e4b3f052f56eb9258aea553f350 100755 (executable)
@@ -1,12 +1,21 @@
 #!/usr/bin/env bash
 
+REAL_RSYNC=/usr/bin/rsync
 IGNOREEXIT=24
 IGNOREOUT='^(file has vanished: |rsync warning: some files vanished before they could be transferred)'
 
+# If someone installs this as "rsync", make sure we don't affect a server run.
+for arg in "${@}"; do
+    if [[ "$arg" == --server ]]; then
+       exec $REAL_RSYNC "${@}"
+       exit $? # Not reached
+    fi
+done
+
 set -o pipefail
 
-rsync "${@}" 2>&1 | (grep -E -v "$IGNOREOUT" || true)
-ret=$?
+# This filters stderr without merging it with stdout:
+{ $REAL_RSYNC "${@}" 2>&1 1>&3 3>&- | grep -E -v "$IGNOREOUT"; ret=${PIPESTATUS[0]}; } 3>&1 1>&2
 
 if [[ $ret == $IGNOREEXIT ]]; then
     ret=0
index 2869e45cb09184fd124773527b51b097a65babdd..b57e61c53b863b7adfdfc38decdaec6eee92da6e 100755 (executable)
@@ -6,12 +6,19 @@
 #
 # To use this, name it something like "rs", put it somewhere in your path, and
 # then use "rs" in place of "rsync" when you are typing your copy commands.
+
+REAL_RSYNC=/usr/bin/rsync
+
 args=()
 for arg in "${@}"; do
+    if [[ "$arg" == --server ]]; then
+       exec $REAL_RSYNC "${@}"
+       exit $? # Not reached
+    fi
     if [[ "$arg" == / ]]; then
        args=("${args[@]}" /)
     else
        args=("${args[@]}" "${arg%/}")
     fi
 done
-exec /usr/bin/rsync "${args[@]}"
+exec $REAL_RSYNC "${args[@]}"