From d0d3410ecd3b922c2e01af5fec41adf10e916ea7 Mon Sep 17 00:00:00 2001 From: Rodrigo Campos Date: Wed, 2 Feb 2011 11:24:30 -0300 Subject: [PATCH] Avoid creation of dangling symlinks If rsync fails, possibly the new directory does not exist, so we should not create the symlink. Because if we create it, the next backup would not be incremental, because the --link-dest option does not point to an existing directory. This patch fixes this by checking the return code of rsync and only creates the symlink if rsync exits successful or with error 24 ("Partial transfer due to vanished source files") which is somewhat expected. Signed-off-by: Rodrigo Campos --- bacap | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/bacap b/bacap index 1f6f9cb..8be3167 100755 --- a/bacap +++ b/bacap @@ -132,15 +132,33 @@ do extra_flags="$extra_flags --include-from=$include" plog "Running rsync..." $run rsync $RSYNC_FLAGS $extra_flags \ - --link-dest="$current_dir" $src "$dst/" || - ret=$(($ret+1)) - plog "Moving current..." - $run rm -f $V "$current_link" || + --link-dest="$current_dir" $src "$dst/" + rsync_ret=$? + case $rsync_ret in + 0) + # Normal return + ;; + 24) + # Ignore error 24 from rsync ("Partial transfer due to + # vanished source files") which is somewhat expected + # since we don't do a snapshot + ;; + *) + # Any other error is important enough + ret=$(($ret+1)) + ;; + esac + + if [ $ret -eq $saved_ret ] + then + # Only move current if rsync did not fail, to avoid dangling + # symlinks + plog "Moving current..." + $run rm -f $V "$current_link" || ret=$(($ret+1)) - $run ln -s $V "$date" "$current_link" || + $run ln -s $V "$date" "$current_link" || ret=$(($ret+1)) - if [ $ret -ne $saved_ret ] - then + else ERROR_HOSTS="$ERROR_HOSTS $host" fi done -- 2.43.0